--- linux-2.6-3.0.0~rc6.orig/debian/rules.defs +++ linux-2.6-3.0.0~rc6/debian/rules.defs @@ -0,0 +1,4 @@ +BUILD_DIR = debian/build +STAMPS_DIR = debian/stamps +TEMPLATES_DIR = debian/templates + --- linux-2.6-3.0.0~rc6.orig/debian/compat +++ linux-2.6-3.0.0~rc6/debian/compat @@ -0,0 +1 @@ +7 --- linux-2.6-3.0.0~rc6.orig/debian/README.Debian +++ linux-2.6-3.0.0~rc6/debian/README.Debian @@ -0,0 +1,58 @@ +linux-2.6 for DEBIAN +------------------------ + +Patches +------- +Debian applies small changes to the kernel source. These are split up into +separated patches addressing individual problems. Each of the patch files +contains a description and mentions the author. The patches can be found +at http://svn.debian.org/wsvn/kernel/dists/trunk/linux-2.6/debian/patches/. + +Config Files +------------ +The .config files used to build the various linux-image files are dynamically +generated during the linux-2.6 package build. See the source package for +details. Each linux-image-* package provides the complete .config file that +was used to generate it. This file is installed in /boot. + +Scope of security support +------------------------- +Security support is provided not only for the binary builds, but also +for the full source package, allowing for locally customized kernels. +However, kernel options that are not enabled in official Debian builds are +given a lower priority for security support. Options marked as BROKEN +or EXPERIMENTAL are of very low priority, and should not be enabled in +customized builds for a security-sensitive environment. + +Building custom kernel binary packages +-------------------------------------- +We recommend using the 'make deb-pkg' target provided by the upstream +kernel source. + +Alternately, you may use the 'make-kpkg' command provided by the +'kernel-package' package. + +Rebuilding official binary packages +----------------------------------- +You can build specific kernel binary packages using the targets in +debian/rules.gen, which have names of the form: + binary-arch___ + +Example: + fakeroot make -f debian/rules.gen binary-arch_i386_none_686 + +Rebuilding Adaptec AIC7xxx/79xx firmware +---------------------------------------- +You can rebuild the firmware for the Adaptec AIC7xxx/79xx SCSI Adapters. To +do so you need to set AIC7XXX_BUILD_FIRMWARE/AIC79XX_BUILD_FIRMWARE config +options. Note that this requires to have the development packages for +berkelydb (libdb4.2-dev) installed. + +Non-free bits removed +--------------------- +See the patches under debian/patches/debian/dfsg. + +Further information +------------------- +Debian Linux Kernel Handbook: http://kernel-handbook.alioth.debian.org +Debian Wiki: http://wiki.debian.org/DebianKernel --- linux-2.6-3.0.0~rc6.orig/debian/config.defines.dump +++ linux-2.6-3.0.0~rc6/debian/config.defines.dump @@ -0,0 +1,552 @@ +[('abi',)] +abiname: '1' + +[('base',)] +arches: ['alpha', 'amd64', 'armel', 'armhf', 'hppa', 'i386', 'ia64', 'm68k', 'mips', 'mipsel', 'powerpc', 'ppc64', 's390', 'sh4', 'sparc', 'sparc64'] +featuresets: ['none'] +compiler: 'gcc-4.4' + +[('base', 'alpha')] +kernel-arch: 'alpha' +featuresets: ['none'] +compiler: 'gcc-4.4' + +[('base', 'alpha', 'none')] +implicit-flavour: True +flavours: ['alpha-generic', 'alpha-smp', 'alpha-legacy'] + +[('base', 'amd64')] +kernel-arch: 'x86' +featuresets: ['none'] + +[('base', 'amd64', 'none')] +implicit-flavour: True +flavours: ['amd64'] + +[('base', 'armel')] +kernel-arch: 'arm' +featuresets: ['none'] + +[('base', 'armel', 'none')] +implicit-flavour: True +flavours: ['iop32x', 'kirkwood', 'orion5x', 'versatile'] + +[('base', 'armhf')] +kernel-arch: 'arm' +featuresets: ['none'] + +[('base', 'armhf', 'none')] +implicit-flavour: True +flavours: ['mx5'] + +[('base', 'hppa')] +kernel-arch: 'parisc' +featuresets: ['none'] +compiler: 'gcc-4.4' + +[('base', 'hppa', None, 'parisc64')] +override-host-type: 'hppa64-linux-gnu' +cflags: '-fno-cse-follow-jumps' + +[('base', 'hppa', None, 'parisc64-smp')] +override-host-type: 'hppa64-linux-gnu' +cflags: '-fno-cse-follow-jumps' + +[('base', 'hppa', 'none')] +implicit-flavour: True +flavours: ['parisc', 'parisc-smp', 'parisc64', 'parisc64-smp'] + +[('base', 'i386')] +kernel-arch: 'x86' +featuresets: ['none'] + +[('base', 'i386', 'none')] +implicit-flavour: True +flavours: ['486', '686-pae', 'amd64'] + +[('base', 'ia64')] +kernel-arch: 'ia64' +featuresets: ['none'] + +[('base', 'ia64', 'none')] +implicit-flavour: True +flavours: ['itanium', 'mckinley'] + +[('base', 'm68k')] +kernel-arch: 'm68k' +featuresets: ['none'] +compiler: 'gcc-4.4' + +[('base', 'm68k', 'none')] +implicit-flavour: True +flavours: ['amiga', 'atari', 'bvme6000', 'mac', 'mvme147', 'mvme16x'] + +[('base', 'mips')] +kernel-arch: 'mips' +featuresets: ['none'] + +[('base', 'mips', 'none')] +implicit-flavour: True +flavours: ['r4k-ip22', 'r5k-ip32', 'sb1-bcm91250a', 'sb1a-bcm91480b', '4kc-malta', '5kc-malta', 'octeon'] + +[('base', 'mipsel')] +kernel-arch: 'mips' +featuresets: ['none'] + +[('base', 'mipsel', 'none')] +implicit-flavour: True +flavours: ['r5k-cobalt', 'sb1-bcm91250a', 'sb1a-bcm91480b', '4kc-malta', '5kc-malta', 'loongson-2f'] + +[('base', 'powerpc')] +kernel-arch: 'powerpc' +featuresets: ['none'] + +[('base', 'powerpc', 'none')] +implicit-flavour: True +flavours: ['powerpc', 'powerpc-smp', 'powerpc64'] + +[('base', 'ppc64')] +kernel-arch: 'powerpc' +featuresets: ['none'] + +[('base', 'ppc64', 'none')] +implicit-flavour: True +flavours: ['powerpc64'] + +[('base', 's390')] +kernel-arch: 's390' +featuresets: ['none'] + +[('base', 's390', None, 's390-tape')] +modules: False + +[('base', 's390', None, 's390x-tape')] +modules: False + +[('base', 's390', 'none')] +implicit-flavour: True +flavours: ['s390x', 's390x-tape'] + +[('base', 'sh4')] +kernel-arch: 'sh' +featuresets: ['none'] + +[('base', 'sh4', 'none')] +implicit-flavour: True +flavours: ['sh7751r', 'sh7785lcr'] + +[('base', 'sparc')] +kernel-arch: 'sparc' +featuresets: ['none'] + +[('base', 'sparc', 'none')] +implicit-flavour: True +flavours: ['sparc64', 'sparc64-smp'] + +[('base', 'sparc64')] +kernel-arch: 'sparc' +featuresets: ['none'] + +[('base', 'sparc64', 'none')] +implicit-flavour: True +flavours: ['sparc64', 'sparc64-smp'] + +[('build', 'armel', None, 'iop32x')] +image-file: 'arch/arm/boot/zImage' + +[('build', 'armel', None, 'ixp4xx')] +image-file: 'arch/arm/boot/zImage' + +[('build', 'armel', None, 'kirkwood')] +image-file: 'arch/arm/boot/zImage' + +[('build', 'armel', None, 'orion5x')] +image-file: 'arch/arm/boot/zImage' + +[('build', 'armhf', None, 'mx5')] +image-file: 'arch/arm/boot/zImage' + +[('build', 'sh4', None, 'sh7751r')] +image-file: 'arch/sh/boot/zImage' + +[('build', 'sh4', None, 'sh7785lcr')] +image-file: 'arch/sh/boot/zImage' + +[('description',)] +part-long-up: 'This kernel is not suitable for SMP (multi-processor,\nmulti-core or hyper-threaded) systems.' +part-long-xen: 'This kernel also runs on a Xen hypervisor.\nIt supports both privileged (dom0) and unprivileged (domU) operation.' + +[('description', 'alpha', None, 'alpha-generic')] +hardware: 'Alpha' +hardware-long: 'DEC Alpha systems with extended kernel start address (Wildfire, Titan, Marvel)' + +[('description', 'alpha', None, 'alpha-legacy')] +hardware: 'Alpha Legacy' +hardware-long: 'DEC Alpha systems with legacy kernel start address' + +[('description', 'alpha', None, 'alpha-smp')] +hardware: 'Alpha SMP' +hardware-long: 'DEC Alpha SMP systems with extended kernel start address (Wildfire, Titan, Marvel)' + +[('description', 'amd64', None, 'amd64')] +hardware: '64-bit PCs' +parts: ['xen'] +hardware-long: 'PCs with AMD64 or Intel 64 processors' + +[('description', 'armel', None, 'iop32x')] +hardware: 'IOP32x' +hardware-long: 'IOP32x based systems (Thecus N2100, etc)' + +[('description', 'armel', None, 'ixp4xx')] +hardware: 'IXP4xx' +hardware-long: 'IXP4xx based systems (Linksys NSLU2, etc)' + +[('description', 'armel', None, 'kirkwood')] +hardware: 'Marvell Kirkwood' +hardware-long: 'Marvell Kirkwood based systems (SheevaPlug, QNAP TS-119/TS-219, etc)' + +[('description', 'armel', None, 'orion5x')] +hardware: 'Marvell Orion' +hardware-long: 'Marvell Orion 5181, 5182 and 5281 based systems (QNAP TS-109/TS-209, etc)' + +[('description', 'armel', None, 'versatile')] +hardware: 'Versatile' +hardware-long: 'Versatile systems (PB, AB, Qemu)' + +[('description', 'armhf', None, 'mx5')] +hardware: 'Freescale MXC/iMX-based' +hardware-long: 'Support for Freescale MXC/iMX-based family of processors' + +[('description', 'hppa', None, 'parisc')] +hardware: '32-bit PA-RISC' + +[('description', 'hppa', None, 'parisc-smp')] +hardware: 'multiprocessor 32-bit PA-RISC' + +[('description', 'hppa', None, 'parisc64')] +hardware: '64-bit PA-RISC' + +[('description', 'hppa', None, 'parisc64-smp')] +hardware: 'multiprocessor 64-bit PA-RISC' + +[('description', 'i386')] +part-long-pae: 'This kernel requires PAE (Physical Address Extension).\nThis feature is supported by the Intel Pentium Pro/II/III/4/4M/D, Xeon,\nCeleron, Core and Atom; AMD Geode NX, Athlon (K7), Duron, Opteron, Sempron,\nTurion or Phenom; Transmeta Efficeon; and VIA C7.' + +[('description', 'i386', None, '486')] +hardware: 'older PCs' +parts: ['up'] +hardware-long: 'PCs with a single processor not supporting PAE' + +[('description', 'i386', None, '686-pae')] +hardware: 'modern PCs' +parts: ['pae', 'xen'] +hardware-long: 'PCs with one or more processors supporting PAE' + +[('description', 'i386', None, 'amd64')] +hardware: '64-bit PCs' +parts: ['xen'] +hardware-long: 'PCs with AMD64 or Intel 64 processors' + +[('description', 'ia64', None, 'itanium')] +hardware: 'Itanium' + +[('description', 'ia64', None, 'mckinley')] +hardware: 'Itanium II' + +[('description', 'm68k', None, 'amiga')] +hardware: 'Amiga' + +[('description', 'm68k', None, 'atari')] +hardware: 'Atari' + +[('description', 'm68k', None, 'bvme6000')] +hardware: 'BVM BVME4000 and BVME6000' + +[('description', 'm68k', None, 'hp')] +hardware: 'HP' + +[('description', 'm68k', None, 'mac')] +hardware: 'Macintosh' + +[('description', 'm68k', None, 'mvme147')] +hardware: 'Motorola MVME147' + +[('description', 'm68k', None, 'mvme16x')] +hardware: 'Motorola MVME162/6/7, MVME172/7' + +[('description', 'm68k', None, 'q40')] +hardware: 'Q40 and Q60' + +[('description', 'm68k', None, 'sun3')] +hardware: 'sun3' + +[('description', 'mips', None, '4kc-malta')] +hardware: 'MIPS Malta' +hardware-long: 'MIPS Malta boards' + +[('description', 'mips', None, '5kc-malta')] +hardware: 'MIPS Malta (64-bit)' +hardware-long: 'MIPS Malta boards (64-bit)' + +[('description', 'mips', None, 'octeon')] +hardware: 'Octeon' +hardware-long: 'Cavium Networks Octeon' + +[('description', 'mips', None, 'r4k-ip22')] +hardware: 'SGI IP22' +hardware-long: 'SGI IP22 systems (Indy, Indigo2)' + +[('description', 'mips', None, 'r5k-ip32')] +hardware: 'SGI IP32' +hardware-long: 'SGI IP32 systems (O2)' + +[('description', 'mips', None, 'sb1-bcm91250a')] +hardware: 'BCM91250A' +hardware-long: 'Broadcom BCM91250A systems (aka SWARM)' + +[('description', 'mips', None, 'sb1a-bcm91480b')] +hardware: 'BCM91480B' +hardware-long: 'Broadcom BCM91480B systems (aka BigSur)' + +[('description', 'mipsel', None, '4kc-malta')] +hardware: 'MIPS Malta' +hardware-long: 'MIPS Malta boards' + +[('description', 'mipsel', None, '5kc-malta')] +hardware: 'MIPS Malta (64-bit)' +hardware-long: 'MIPS Malta boards (64-bit)' + +[('description', 'mipsel', None, 'loongson-2f')] +hardware: 'Loongson 2F' +hardware-long: 'Lemote Loongson 2F systems' + +[('description', 'mipsel', None, 'r5k-cobalt')] +hardware: 'Cobalt' +hardware-long: 'Cobalt systems (Qube, RaQ, Qube2, RaQ2)' + +[('description', 'mipsel', None, 'sb1-bcm91250a')] +hardware: 'BCM91250A' +hardware-long: 'Broadcom BCM91250A systems (aka SWARM)' + +[('description', 'mipsel', None, 'sb1a-bcm91480b')] +hardware: 'BCM91480B' +hardware-long: 'Broadcom BCM91480B systems (aka BigSur)' + +[('description', 'powerpc', None, 'powerpc')] +hardware: 'uniprocessor 32-bit PowerPC' + +[('description', 'powerpc', None, 'powerpc-smp')] +hardware: 'multiprocessor 32-bit PowerPC' + +[('description', 'powerpc', None, 'powerpc64')] +hardware: '64-bit PowerPC' + +[('description', 'ppc64', None, 'powerpc64')] +hardware: '64-bit PowerPC' + +[('description', 's390')] +part-short-tape: 'IPL from tape' +part-long-tape: 'This kernel has support to IPL (boot) from a tape.' +part-long-reader: 'This kernel has support to IPL (boot) from a VM reader or DASD device.' + +[('description', 's390', None, 's390')] +hardware: 'IBM S/390' +parts: ['reader'] + +[('description', 's390', None, 's390-tape')] +hardware: 'IBM S/390' +parts: ['tape'] + +[('description', 's390', None, 's390x')] +hardware: 'IBM zSeries' +parts: ['reader'] + +[('description', 's390', None, 's390x-tape')] +hardware: 'IBM zSeries' +parts: ['tape'] + +[('description', 'sh4', None, 'sh7751r')] +hardware: 'sh7751r' +hardware-long: 'Renesas SH7751R R2D plus board' + +[('description', 'sh4', None, 'sh7785lcr')] +hardware: 'sh7785lcr' +hardware-long: 'Renesas SH7785 reference board' + +[('description', 'sparc', None, 'sparc32')] +hardware: 'uniprocessor sparc32 (sun4m)' + +[('description', 'sparc', None, 'sparc64')] +hardware: 'uniprocessor 64-bit UltraSPARC' + +[('description', 'sparc', None, 'sparc64-smp')] +hardware: 'multiprocessor 64-bit UltraSPARC' + +[('description', 'sparc64', None, 'sparc64')] +hardware: 'uniprocessor 64-bit UltraSPARC' + +[('description', 'sparc64', None, 'sparc64-smp')] +hardware: 'multiprocessor 64-bit UltraSPARC' + +[('image',)] +initramfs-generators: ['initramfs-tools', 'initramfs-fallback'] +type: 'plain' + +[('image', 'alpha')] +suggests: 'aboot, fdutils' + +[('image', 'amd64')] +configs: ['kernelarch-x86/config'] +bootloaders: ['grub-pc', 'extlinux', 'lilo'] + +[('image', 'amd64', None, 'amd64')] +configs: ['kernelarch-x86/config-arch-64'] + +[('image', 'armel')] +suggests: 'fdutils' + +[('image', 'armel', None, 'iop32x')] +check-size: '1441784' + +[('image', 'armel', None, 'ixp4xx')] +check-size: '1441760' + +[('image', 'armel', None, 'kirkwood')] +check-size: '2097080' +recommends: 'uboot-mkimage' + +[('image', 'armel', None, 'orion5x')] +check-size: '1572792' +recommends: 'uboot-mkimage' + +[('image', 'armhf')] +suggests: 'fdutils' +configs: ['armel/config', 'armhf/config'] + +[('image', 'hppa')] +suggests: 'palo' + +[('image', 'i386')] +configs: ['kernelarch-x86/config'] +bootloaders: ['grub-pc', 'extlinux', 'lilo'] + +[('image', 'i386', None, '486')] +configs: ['kernelarch-x86/config-arch-32'] + +[('image', 'i386', None, '686-pae')] +configs: ['kernelarch-x86/config-arch-32'] +recommends: 'libc6-i686' + +[('image', 'i386', None, 'amd64')] +configs: ['kernelarch-x86/config-arch-64'] +recommends: 'libc6-i686' + +[('image', 'ia64')] +suggests: 'fdutils' +bootloaders: ['elilo'] + +[('image', 'm68k')] +suggests: 'vmelilo, fdutils' +initramfs: False + +[('image', 'mips')] +initramfs: False + +[('image', 'mipsel')] +initramfs: False + +[('image', 'mipsel', None, '4kc-malta')] +configs: ['mips/config.4kc-malta'] + +[('image', 'mipsel', None, '5kc-malta')] +configs: ['mips/config.5kc-malta'] + +[('image', 'mipsel', None, 'sb1-bcm91250a')] +configs: ['mips/config.sb1-bcm91250a'] + +[('image', 'mipsel', None, 'sb1a-bcm91480b')] +configs: ['mips/config.sb1a-bcm91480b'] + +[('image', 'powerpc')] +suggests: 'mkvmlinuz' + +[('image', 'powerpc', None, 'powerpc-smp')] +configs: ['powerpc/config.powerpc', 'powerpc/config.powerpc-smp'] + +[('image', 'ppc64')] +suggests: 'mkvmlinuz' +configs: ['powerpc/config'] + +[('image', 'ppc64', None, 'powerpc64')] +configs: ['powerpc/config.powerpc64'] + +[('image', 's390')] +bootloaders: ['s390-tools'] + +[('image', 's390', None, 's390-tape')] +override-localversion: 's390' +type: 'plain-s390-tape' +initramfs: False + +[('image', 's390', None, 's390x-tape')] +override-localversion: 's390x' +type: 'plain-s390-tape' +initramfs: False + +[('image', 'sh4')] +suggests: 'fdutils' + +[('image', 'sh4', None, 'sh7785lcr')] +check-size: '4194304' +recommends: 'uboot-mkimage' + +[('image', 'sparc')] +suggests: 'silo, fdutils' + +[('image', 'sparc', None, 'sparc32')] +image-postproc: 'sparc32-image-postproc' + +[('image', 'sparc64')] +suggests: 'silo, fdutils' +configs: ['sparc/config'] + +[('image', 'sparc64', None, 'sparc64')] +configs: ['sparc/config.sparc64'] + +[('image', 'sparc64', None, 'sparc64-smp')] +configs: ['sparc/config.sparc64-smp'] + +[('image-dbg', 'amd64')] +enabled: True + +[('image-dbg', 'i386', None, '686-pae')] +enabled: True + +[('relations',)] +elilo: 'elilo (>= 3.12-3.1~)' +initramfs-tools: 'initramfs-tools (>= 0.99)' +initramfs-fallback: 'linux-initramfs-tool' +s390-tools: 's390-tools (>= 1.8.3-2~)' +lilo: 'lilo (>= 22.8-8.2~)' +gcc-4.5: 'gcc-4.5' +gcc-4.4: 'gcc-4.4' + +[('relations', 'hppa')] +gcc-4.4: 'gcc-4.4, binutils-hppa64, gcc-4.4-hppa64' + +[('version',)] +abiname: '' +source: '3.0.0~rc6-1~experimental.1' + +[('xen', 'amd64', None, 'amd64')] +flavours: ['amd64'] +dom0-support: True + +[('xen', 'i386', None, '686-pae')] +flavours: ['i386', 'amd64'] +dom0-support: True + +[('xen', 'i386', None, 'amd64')] +flavours: ['amd64'] +dom0-support: True + --- linux-2.6-3.0.0~rc6.orig/debian/control.md5sum +++ linux-2.6-3.0.0~rc6/debian/control.md5sum @@ -0,0 +1,35 @@ +334d766acdffe785fb9fd23f42019a3c debian/bin/gencontrol.py +f8b845a22bbe4e15f6edb6069b54c4fd debian/changelog +fa44fa435120c604ba57814566c0c8ab debian/templates/control.headers.arch.in +12ceda954a0cff12aca80df095dd1948 debian/templates/control.headers.featureset.in +d4f03b465a130590af9cf37d0cce265b debian/templates/control.headers.in +32d8d93a0b09cd50988bbe557c8d8afc debian/templates/control.image-dbg.in +d7c1ee06543850b3bfa16dc018a94ce2 debian/templates/control.image.type-modulesextra.in +dfed02fb3f661df115b916e10a640e69 debian/templates/control.image.type-plain.in +cf85c9756573d2fc2b6d97dc5c6b63ad debian/templates/control.image.type-standalone.in +59638221f8a5ecb9c3f0547c78ab5cd9 debian/templates/control.libc-dev.in +08d0438d35eebdcc94418c42ae911e2f debian/templates/control.main.in +a8e56268cc3816eb434375e9c7335df9 debian/templates/control.source.in +2529dae6d977c312290f9df5052c595f debian/templates/control.xen-linux-system.in +83a58c446d8027f8a660c39bdf4beab0 debian/templates/image-dbg.lintian-override.in +e78ef4f93e1efb9c4d89b6367d9c3a30 debian/templates/image.xen.postinst.in +1cb81b60bfe6b79fd6613ae102fe7217 debian/templates/image.xen.postrm.in +3ad85bca8ade992de90953d5c846c9e9 debian/templates/image.xen.prerm.in +4f29bdb791726248bea7e4127fa3cf9b debian/templates/patch.apply.in +0347c6718d062751a5ec60da993f58d7 debian/config/defines +dae5071be3e3eb696062e8dcc6244223 debian/config/alpha/defines +6182c436d7e02de7508a3a894bd86966 debian/config/amd64/defines +0c6c8d8eb0552e955fee2dd9c3a5d485 debian/config/armel/defines +c4db4b5e41ab22d3e2974737605e6788 debian/config/armhf/defines +7663688e373ff5b5857c15e69a7c1d3e debian/config/hppa/defines +3656f01e8d4d4408454e4cdfd7d525f1 debian/config/i386/defines +c09a67bf367bfa1120f274496667bfa2 debian/config/ia64/defines +c1831448c49e579a14d9c1b1ed9097ef debian/config/m68k/defines +7a4302200c744edabddb13806f96348d debian/config/mips/defines +868ce415d9aa9ad94327bd1170243101 debian/config/mipsel/defines +bb45d54589d72a396db94210bac6d021 debian/config/powerpc/defines +6d54fe2812efefe29d145a98dd6d9894 debian/config/ppc64/defines +74952c29fa964a1ccee61bde39cae5ef debian/config/s390/defines +4f654b0507024e4483289a749a17d8cb debian/config/sh4/defines +1c43428cadb9eab47cee4e1efec554ff debian/config/sparc64/defines +7d9b29bf50681e32b95fc148252f0520 debian/config/sparc/defines --- linux-2.6-3.0.0~rc6.orig/debian/rules.gen +++ linux-2.6-3.0.0~rc6/debian/rules.gen @@ -0,0 +1,869 @@ +.NOTPARALLEL: +binary-arch: binary-arch_alpha binary-arch_amd64 binary-arch_armel binary-arch_armhf binary-arch_hppa binary-arch_i386 binary-arch_ia64 binary-arch_m68k binary-arch_mips binary-arch_mipsel binary-arch_powerpc binary-arch_ppc64 binary-arch_s390 binary-arch_sh4 binary-arch_sparc binary-arch_sparc64 +binary-arch_alpha: binary-arch_alpha_none binary-arch_alpha_real +binary-arch_alpha_none: binary-arch_alpha_none_alpha-generic binary-arch_alpha_none_alpha-legacy binary-arch_alpha_none_alpha-smp binary-arch_alpha_none_real +binary-arch_alpha_none_alpha-generic: binary-arch_alpha_none_alpha-generic_real +binary-arch_alpha_none_alpha-generic_real:: + $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='' ARCH='alpha' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='alpha-generic' KCONFIG='debian/config/config debian/config/alpha/config debian/config/alpha/config.alpha-generic' KERNEL_ARCH='alpha' LOCALVERSION='-alpha-generic' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-alpha-generic' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_alpha_none_alpha-legacy: binary-arch_alpha_none_alpha-legacy_real +binary-arch_alpha_none_alpha-legacy_real:: + $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='' ARCH='alpha' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='alpha-legacy' KCONFIG='debian/config/config debian/config/alpha/config debian/config/alpha/config.alpha-legacy' KERNEL_ARCH='alpha' LOCALVERSION='-alpha-legacy' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-alpha-legacy' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_alpha_none_alpha-smp: binary-arch_alpha_none_alpha-smp_real +binary-arch_alpha_none_alpha-smp_real:: + $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='' ARCH='alpha' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='alpha-smp' KCONFIG='debian/config/config debian/config/alpha/config debian/config/alpha/config.alpha-smp' KERNEL_ARCH='alpha' LOCALVERSION='-alpha-smp' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-alpha-smp' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_alpha_none_real:: + $(MAKE) -f debian/rules.real binary-arch-featureset ABINAME='' ARCH='alpha' FEATURESET='none' KERNEL_ARCH='alpha' LOCALVERSION_HEADERS='' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_alpha_real:: + $(MAKE) -f debian/rules.real binary-arch-arch ABINAME='' ARCH='alpha' KERNEL_ARCH='alpha' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_amd64: binary-arch_amd64_none binary-arch_amd64_real +binary-arch_amd64_none: binary-arch_amd64_none_amd64 binary-arch_amd64_none_real +binary-arch_amd64_none_amd64: binary-arch_amd64_none_amd64_real +binary-arch_amd64_none_amd64_real:: + $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='' ARCH='amd64' COMPILER='gcc-4.4' DEBUG='True' FEATURESET='none' FLAVOUR='amd64' KCONFIG='debian/config/config debian/config/kernelarch-x86/config debian/config/kernelarch-x86/config-arch-64' KCONFIG_OPTIONS='-o DEBUG_INFO=y' KERNEL_ARCH='x86' LOCALVERSION='-amd64' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-amd64' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' + $(MAKE) -f debian/rules.real install-dummy DH_OPTIONS='-pxen-linux-system-3.0.0-rc6-amd64' ABINAME='' ARCH='amd64' COMPILER='gcc-4.4' DEBUG='True' FEATURESET='none' FLAVOUR='amd64' KCONFIG='debian/config/config debian/config/kernelarch-x86/config debian/config/kernelarch-x86/config-arch-64' KCONFIG_OPTIONS='-o DEBUG_INFO=y' KERNEL_ARCH='x86' LOCALVERSION='-amd64' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-amd64' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_amd64_none_real:: + $(MAKE) -f debian/rules.real binary-arch-featureset ABINAME='' ARCH='amd64' FEATURESET='none' KERNEL_ARCH='x86' LOCALVERSION_HEADERS='' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_amd64_real:: + $(MAKE) -f debian/rules.real binary-arch-arch ABINAME='' ARCH='amd64' KERNEL_ARCH='x86' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_armel: binary-arch_armel_none binary-arch_armel_real +binary-arch_armel_none: binary-arch_armel_none_iop32x binary-arch_armel_none_kirkwood binary-arch_armel_none_orion5x binary-arch_armel_none_real binary-arch_armel_none_versatile +binary-arch_armel_none_iop32x: binary-arch_armel_none_iop32x_real +binary-arch_armel_none_iop32x_real:: + $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='' ARCH='armel' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='iop32x' KCONFIG='debian/config/config debian/config/armel/config debian/config/armel/config.iop32x' KERNEL_ARCH='arm' LOCALVERSION='-iop32x' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-iop32x' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_armel_none_kirkwood: binary-arch_armel_none_kirkwood_real +binary-arch_armel_none_kirkwood_real:: + $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='' ARCH='armel' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='kirkwood' KCONFIG='debian/config/config debian/config/armel/config debian/config/armel/config.kirkwood' KERNEL_ARCH='arm' LOCALVERSION='-kirkwood' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-kirkwood' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_armel_none_orion5x: binary-arch_armel_none_orion5x_real +binary-arch_armel_none_orion5x_real:: + $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='' ARCH='armel' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='orion5x' KCONFIG='debian/config/config debian/config/armel/config debian/config/armel/config.orion5x' KERNEL_ARCH='arm' LOCALVERSION='-orion5x' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-orion5x' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_armel_none_real:: + $(MAKE) -f debian/rules.real binary-arch-featureset ABINAME='' ARCH='armel' FEATURESET='none' KERNEL_ARCH='arm' LOCALVERSION_HEADERS='' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_armel_none_versatile: binary-arch_armel_none_versatile_real +binary-arch_armel_none_versatile_real:: + $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='' ARCH='armel' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='versatile' KCONFIG='debian/config/config debian/config/armel/config debian/config/armel/config.versatile' KERNEL_ARCH='arm' LOCALVERSION='-versatile' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-versatile' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_armel_real:: + $(MAKE) -f debian/rules.real binary-arch-arch ABINAME='' ARCH='armel' KERNEL_ARCH='arm' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_armhf: binary-arch_armhf_none binary-arch_armhf_real +binary-arch_armhf_none: binary-arch_armhf_none_mx5 binary-arch_armhf_none_real +binary-arch_armhf_none_mx5: binary-arch_armhf_none_mx5_real +binary-arch_armhf_none_mx5_real:: + $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='' ARCH='armhf' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='mx5' KCONFIG='debian/config/config debian/config/armel/config debian/config/armhf/config debian/config/armhf/config.mx5' KERNEL_ARCH='arm' LOCALVERSION='-mx5' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-mx5' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_armhf_none_real:: + $(MAKE) -f debian/rules.real binary-arch-featureset ABINAME='' ARCH='armhf' FEATURESET='none' KERNEL_ARCH='arm' LOCALVERSION_HEADERS='' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_armhf_real:: + $(MAKE) -f debian/rules.real binary-arch-arch ABINAME='' ARCH='armhf' KERNEL_ARCH='arm' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_hppa: binary-arch_hppa_none binary-arch_hppa_real +binary-arch_hppa_none: binary-arch_hppa_none_parisc binary-arch_hppa_none_parisc-smp binary-arch_hppa_none_parisc64 binary-arch_hppa_none_parisc64-smp binary-arch_hppa_none_real +binary-arch_hppa_none_parisc: binary-arch_hppa_none_parisc_real +binary-arch_hppa_none_parisc-smp: binary-arch_hppa_none_parisc-smp_real +binary-arch_hppa_none_parisc-smp_real:: + $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='' ARCH='hppa' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='parisc-smp' KCONFIG='debian/config/config debian/config/hppa/config debian/config/hppa/config.parisc-smp' KERNEL_ARCH='parisc' LOCALVERSION='-parisc-smp' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-parisc-smp' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_hppa_none_parisc64: binary-arch_hppa_none_parisc64_real +binary-arch_hppa_none_parisc64-smp: binary-arch_hppa_none_parisc64-smp_real +binary-arch_hppa_none_parisc64-smp_real:: + $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='' ARCH='hppa' CFLAGS_KERNEL='-fno-cse-follow-jumps' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='parisc64-smp' KCONFIG='debian/config/config debian/config/hppa/config debian/config/hppa/config.parisc64-smp' KERNEL_ARCH='parisc' LOCALVERSION='-parisc64-smp' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-parisc64-smp' MODULES='True' OVERRIDE_HOST_TYPE='hppa64-linux-gnu' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_hppa_none_parisc64_real:: + $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='' ARCH='hppa' CFLAGS_KERNEL='-fno-cse-follow-jumps' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='parisc64' KCONFIG='debian/config/config debian/config/hppa/config debian/config/hppa/config.parisc64' KERNEL_ARCH='parisc' LOCALVERSION='-parisc64' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-parisc64' MODULES='True' OVERRIDE_HOST_TYPE='hppa64-linux-gnu' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_hppa_none_parisc_real:: + $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='' ARCH='hppa' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='parisc' KCONFIG='debian/config/config debian/config/hppa/config debian/config/hppa/config.parisc' KERNEL_ARCH='parisc' LOCALVERSION='-parisc' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-parisc' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_hppa_none_real:: + $(MAKE) -f debian/rules.real binary-arch-featureset ABINAME='' ARCH='hppa' FEATURESET='none' KERNEL_ARCH='parisc' LOCALVERSION_HEADERS='' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_hppa_real:: + $(MAKE) -f debian/rules.real binary-arch-arch ABINAME='' ARCH='hppa' KERNEL_ARCH='parisc' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_i386: binary-arch_i386_none binary-arch_i386_real +binary-arch_i386_none: binary-arch_i386_none_486 binary-arch_i386_none_686-pae binary-arch_i386_none_amd64 binary-arch_i386_none_real +binary-arch_i386_none_486: binary-arch_i386_none_486_real +binary-arch_i386_none_486_real:: + $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='' ARCH='i386' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='486' KCONFIG='debian/config/config debian/config/kernelarch-x86/config debian/config/kernelarch-x86/config-arch-32 debian/config/i386/none/config.486' KERNEL_ARCH='x86' LOCALVERSION='-486' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-486' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_i386_none_686-pae: binary-arch_i386_none_686-pae_real +binary-arch_i386_none_686-pae_real:: + $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='' ARCH='i386' COMPILER='gcc-4.4' DEBUG='True' FEATURESET='none' FLAVOUR='686-pae' KCONFIG='debian/config/config debian/config/kernelarch-x86/config debian/config/kernelarch-x86/config-arch-32 debian/config/i386/none/config.686-pae' KCONFIG_OPTIONS='-o DEBUG_INFO=y' KERNEL_ARCH='x86' LOCALVERSION='-686-pae' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-686-pae' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' + $(MAKE) -f debian/rules.real install-dummy DH_OPTIONS='-pxen-linux-system-3.0.0-rc6-686-pae' ABINAME='' ARCH='i386' COMPILER='gcc-4.4' DEBUG='True' FEATURESET='none' FLAVOUR='686-pae' KCONFIG='debian/config/config debian/config/kernelarch-x86/config debian/config/kernelarch-x86/config-arch-32 debian/config/i386/none/config.686-pae' KCONFIG_OPTIONS='-o DEBUG_INFO=y' KERNEL_ARCH='x86' LOCALVERSION='-686-pae' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-686-pae' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_i386_none_amd64: binary-arch_i386_none_amd64_real +binary-arch_i386_none_amd64_real:: + $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='' ARCH='i386' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='amd64' KCONFIG='debian/config/config debian/config/kernelarch-x86/config debian/config/kernelarch-x86/config-arch-64' KERNEL_ARCH='x86' LOCALVERSION='-amd64' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-amd64' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' + $(MAKE) -f debian/rules.real install-dummy DH_OPTIONS='-pxen-linux-system-3.0.0-rc6-amd64' ABINAME='' ARCH='i386' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='amd64' KCONFIG='debian/config/config debian/config/kernelarch-x86/config debian/config/kernelarch-x86/config-arch-64' KERNEL_ARCH='x86' LOCALVERSION='-amd64' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-amd64' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_i386_none_real:: + $(MAKE) -f debian/rules.real binary-arch-featureset ABINAME='' ARCH='i386' FEATURESET='none' KERNEL_ARCH='x86' LOCALVERSION_HEADERS='' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_i386_real:: + $(MAKE) -f debian/rules.real binary-arch-arch ABINAME='' ARCH='i386' KERNEL_ARCH='x86' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_ia64: binary-arch_ia64_none binary-arch_ia64_real +binary-arch_ia64_none: binary-arch_ia64_none_itanium binary-arch_ia64_none_mckinley binary-arch_ia64_none_real +binary-arch_ia64_none_itanium: binary-arch_ia64_none_itanium_real +binary-arch_ia64_none_itanium_real:: + $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='' ARCH='ia64' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='itanium' KCONFIG='debian/config/config debian/config/ia64/config debian/config/ia64/config.itanium' KERNEL_ARCH='ia64' LOCALVERSION='-itanium' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-itanium' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_ia64_none_mckinley: binary-arch_ia64_none_mckinley_real +binary-arch_ia64_none_mckinley_real:: + $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='' ARCH='ia64' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='mckinley' KCONFIG='debian/config/config debian/config/ia64/config debian/config/ia64/config.mckinley' KERNEL_ARCH='ia64' LOCALVERSION='-mckinley' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-mckinley' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_ia64_none_real:: + $(MAKE) -f debian/rules.real binary-arch-featureset ABINAME='' ARCH='ia64' FEATURESET='none' KERNEL_ARCH='ia64' LOCALVERSION_HEADERS='' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_ia64_real:: + $(MAKE) -f debian/rules.real binary-arch-arch ABINAME='' ARCH='ia64' KERNEL_ARCH='ia64' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_m68k: binary-arch_m68k_none binary-arch_m68k_real +binary-arch_m68k_none: binary-arch_m68k_none_amiga binary-arch_m68k_none_atari binary-arch_m68k_none_bvme6000 binary-arch_m68k_none_mac binary-arch_m68k_none_mvme147 binary-arch_m68k_none_mvme16x binary-arch_m68k_none_real +binary-arch_m68k_none_amiga: binary-arch_m68k_none_amiga_real +binary-arch_m68k_none_amiga_real:: + $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='' ARCH='m68k' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='amiga' INITRAMFS='False' KCONFIG='debian/config/config debian/config/m68k/config debian/config/m68k/config.amiga' KERNEL_ARCH='m68k' LOCALVERSION='-amiga' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-amiga' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_m68k_none_atari: binary-arch_m68k_none_atari_real +binary-arch_m68k_none_atari_real:: + $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='' ARCH='m68k' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='atari' INITRAMFS='False' KCONFIG='debian/config/config debian/config/m68k/config debian/config/m68k/config.atari' KERNEL_ARCH='m68k' LOCALVERSION='-atari' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-atari' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_m68k_none_bvme6000: binary-arch_m68k_none_bvme6000_real +binary-arch_m68k_none_bvme6000_real:: + $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='' ARCH='m68k' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='bvme6000' INITRAMFS='False' KCONFIG='debian/config/config debian/config/m68k/config debian/config/m68k/config.bvme6000' KERNEL_ARCH='m68k' LOCALVERSION='-bvme6000' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-bvme6000' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_m68k_none_mac: binary-arch_m68k_none_mac_real +binary-arch_m68k_none_mac_real:: + $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='' ARCH='m68k' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='mac' INITRAMFS='False' KCONFIG='debian/config/config debian/config/m68k/config debian/config/m68k/config.mac' KERNEL_ARCH='m68k' LOCALVERSION='-mac' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-mac' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_m68k_none_mvme147: binary-arch_m68k_none_mvme147_real +binary-arch_m68k_none_mvme147_real:: + $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='' ARCH='m68k' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='mvme147' INITRAMFS='False' KCONFIG='debian/config/config debian/config/m68k/config debian/config/m68k/config.mvme147' KERNEL_ARCH='m68k' LOCALVERSION='-mvme147' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-mvme147' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_m68k_none_mvme16x: binary-arch_m68k_none_mvme16x_real +binary-arch_m68k_none_mvme16x_real:: + $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='' ARCH='m68k' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='mvme16x' INITRAMFS='False' KCONFIG='debian/config/config debian/config/m68k/config debian/config/m68k/config.mvme16x' KERNEL_ARCH='m68k' LOCALVERSION='-mvme16x' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-mvme16x' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_m68k_none_real:: + $(MAKE) -f debian/rules.real binary-arch-featureset ABINAME='' ARCH='m68k' FEATURESET='none' KERNEL_ARCH='m68k' LOCALVERSION_HEADERS='' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_m68k_real:: + $(MAKE) -f debian/rules.real binary-arch-arch ABINAME='' ARCH='m68k' KERNEL_ARCH='m68k' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_mips: binary-arch_mips_none binary-arch_mips_real +binary-arch_mips_none: binary-arch_mips_none_4kc-malta binary-arch_mips_none_5kc-malta binary-arch_mips_none_octeon binary-arch_mips_none_r4k-ip22 binary-arch_mips_none_r5k-ip32 binary-arch_mips_none_real binary-arch_mips_none_sb1-bcm91250a binary-arch_mips_none_sb1a-bcm91480b +binary-arch_mips_none_4kc-malta: binary-arch_mips_none_4kc-malta_real +binary-arch_mips_none_4kc-malta_real:: + $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='' ARCH='mips' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='4kc-malta' INITRAMFS='False' KCONFIG='debian/config/config debian/config/mips/config debian/config/mips/config.4kc-malta' KERNEL_ARCH='mips' LOCALVERSION='-4kc-malta' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-4kc-malta' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_mips_none_5kc-malta: binary-arch_mips_none_5kc-malta_real +binary-arch_mips_none_5kc-malta_real:: + $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='' ARCH='mips' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='5kc-malta' INITRAMFS='False' KCONFIG='debian/config/config debian/config/mips/config debian/config/mips/config.5kc-malta' KERNEL_ARCH='mips' LOCALVERSION='-5kc-malta' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-5kc-malta' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_mips_none_octeon: binary-arch_mips_none_octeon_real +binary-arch_mips_none_octeon_real:: + $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='' ARCH='mips' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='octeon' INITRAMFS='False' KCONFIG='debian/config/config debian/config/mips/config debian/config/mips/config.octeon' KERNEL_ARCH='mips' LOCALVERSION='-octeon' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-octeon' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_mips_none_r4k-ip22: binary-arch_mips_none_r4k-ip22_real +binary-arch_mips_none_r4k-ip22_real:: + $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='' ARCH='mips' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='r4k-ip22' INITRAMFS='False' KCONFIG='debian/config/config debian/config/mips/config debian/config/mips/config.r4k-ip22' KERNEL_ARCH='mips' LOCALVERSION='-r4k-ip22' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-r4k-ip22' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_mips_none_r5k-ip32: binary-arch_mips_none_r5k-ip32_real +binary-arch_mips_none_r5k-ip32_real:: + $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='' ARCH='mips' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='r5k-ip32' INITRAMFS='False' KCONFIG='debian/config/config debian/config/mips/config debian/config/mips/config.r5k-ip32' KERNEL_ARCH='mips' LOCALVERSION='-r5k-ip32' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-r5k-ip32' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_mips_none_real:: + $(MAKE) -f debian/rules.real binary-arch-featureset ABINAME='' ARCH='mips' FEATURESET='none' KERNEL_ARCH='mips' LOCALVERSION_HEADERS='' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_mips_none_sb1-bcm91250a: binary-arch_mips_none_sb1-bcm91250a_real +binary-arch_mips_none_sb1-bcm91250a_real:: + $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='' ARCH='mips' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='sb1-bcm91250a' INITRAMFS='False' KCONFIG='debian/config/config debian/config/mips/config debian/config/mips/config.sb1-bcm91250a' KERNEL_ARCH='mips' LOCALVERSION='-sb1-bcm91250a' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-sb1-bcm91250a' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_mips_none_sb1a-bcm91480b: binary-arch_mips_none_sb1a-bcm91480b_real +binary-arch_mips_none_sb1a-bcm91480b_real:: + $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='' ARCH='mips' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='sb1a-bcm91480b' INITRAMFS='False' KCONFIG='debian/config/config debian/config/mips/config debian/config/mips/config.sb1a-bcm91480b' KERNEL_ARCH='mips' LOCALVERSION='-sb1a-bcm91480b' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-sb1a-bcm91480b' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_mips_real:: + $(MAKE) -f debian/rules.real binary-arch-arch ABINAME='' ARCH='mips' KERNEL_ARCH='mips' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_mipsel: binary-arch_mipsel_none binary-arch_mipsel_real +binary-arch_mipsel_none: binary-arch_mipsel_none_4kc-malta binary-arch_mipsel_none_5kc-malta binary-arch_mipsel_none_loongson-2f binary-arch_mipsel_none_r5k-cobalt binary-arch_mipsel_none_real binary-arch_mipsel_none_sb1-bcm91250a binary-arch_mipsel_none_sb1a-bcm91480b +binary-arch_mipsel_none_4kc-malta: binary-arch_mipsel_none_4kc-malta_real +binary-arch_mipsel_none_4kc-malta_real:: + $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='' ARCH='mipsel' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='4kc-malta' INITRAMFS='False' KCONFIG='debian/config/config debian/config/mipsel/config debian/config/mips/config.4kc-malta' KERNEL_ARCH='mips' LOCALVERSION='-4kc-malta' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-4kc-malta' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_mipsel_none_5kc-malta: binary-arch_mipsel_none_5kc-malta_real +binary-arch_mipsel_none_5kc-malta_real:: + $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='' ARCH='mipsel' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='5kc-malta' INITRAMFS='False' KCONFIG='debian/config/config debian/config/mipsel/config debian/config/mips/config.5kc-malta' KERNEL_ARCH='mips' LOCALVERSION='-5kc-malta' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-5kc-malta' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_mipsel_none_loongson-2f: binary-arch_mipsel_none_loongson-2f_real +binary-arch_mipsel_none_loongson-2f_real:: + $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='' ARCH='mipsel' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='loongson-2f' INITRAMFS='False' KCONFIG='debian/config/config debian/config/mipsel/config debian/config/mipsel/config.loongson-2f' KERNEL_ARCH='mips' LOCALVERSION='-loongson-2f' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-loongson-2f' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_mipsel_none_r5k-cobalt: binary-arch_mipsel_none_r5k-cobalt_real +binary-arch_mipsel_none_r5k-cobalt_real:: + $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='' ARCH='mipsel' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='r5k-cobalt' INITRAMFS='False' KCONFIG='debian/config/config debian/config/mipsel/config debian/config/mipsel/config.r5k-cobalt' KERNEL_ARCH='mips' LOCALVERSION='-r5k-cobalt' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-r5k-cobalt' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_mipsel_none_real:: + $(MAKE) -f debian/rules.real binary-arch-featureset ABINAME='' ARCH='mipsel' FEATURESET='none' KERNEL_ARCH='mips' LOCALVERSION_HEADERS='' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_mipsel_none_sb1-bcm91250a: binary-arch_mipsel_none_sb1-bcm91250a_real +binary-arch_mipsel_none_sb1-bcm91250a_real:: + $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='' ARCH='mipsel' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='sb1-bcm91250a' INITRAMFS='False' KCONFIG='debian/config/config debian/config/mipsel/config debian/config/mips/config.sb1-bcm91250a' KERNEL_ARCH='mips' LOCALVERSION='-sb1-bcm91250a' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-sb1-bcm91250a' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_mipsel_none_sb1a-bcm91480b: binary-arch_mipsel_none_sb1a-bcm91480b_real +binary-arch_mipsel_none_sb1a-bcm91480b_real:: + $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='' ARCH='mipsel' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='sb1a-bcm91480b' INITRAMFS='False' KCONFIG='debian/config/config debian/config/mipsel/config debian/config/mips/config.sb1a-bcm91480b' KERNEL_ARCH='mips' LOCALVERSION='-sb1a-bcm91480b' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-sb1a-bcm91480b' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_mipsel_real:: + $(MAKE) -f debian/rules.real binary-arch-arch ABINAME='' ARCH='mipsel' KERNEL_ARCH='mips' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_powerpc: binary-arch_powerpc_none binary-arch_powerpc_real +binary-arch_powerpc_none: binary-arch_powerpc_none_powerpc binary-arch_powerpc_none_powerpc-smp binary-arch_powerpc_none_powerpc64 binary-arch_powerpc_none_real +binary-arch_powerpc_none_powerpc: binary-arch_powerpc_none_powerpc_real +binary-arch_powerpc_none_powerpc-smp: binary-arch_powerpc_none_powerpc-smp_real +binary-arch_powerpc_none_powerpc-smp_real:: + $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='' ARCH='powerpc' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='powerpc-smp' KCONFIG='debian/config/config debian/config/powerpc/config debian/config/powerpc/config.powerpc debian/config/powerpc/config.powerpc-smp' KERNEL_ARCH='powerpc' LOCALVERSION='-powerpc-smp' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-powerpc-smp' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_powerpc_none_powerpc64: binary-arch_powerpc_none_powerpc64_real +binary-arch_powerpc_none_powerpc64_real:: + $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='' ARCH='powerpc' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='powerpc64' KCONFIG='debian/config/config debian/config/powerpc/config debian/config/powerpc/config.powerpc64' KERNEL_ARCH='powerpc' LOCALVERSION='-powerpc64' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-powerpc64' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_powerpc_none_powerpc_real:: + $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='' ARCH='powerpc' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='powerpc' KCONFIG='debian/config/config debian/config/powerpc/config debian/config/powerpc/config.powerpc' KERNEL_ARCH='powerpc' LOCALVERSION='-powerpc' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-powerpc' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_powerpc_none_real:: + $(MAKE) -f debian/rules.real binary-arch-featureset ABINAME='' ARCH='powerpc' FEATURESET='none' KERNEL_ARCH='powerpc' LOCALVERSION_HEADERS='' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_powerpc_real:: + $(MAKE) -f debian/rules.real binary-arch-arch ABINAME='' ARCH='powerpc' KERNEL_ARCH='powerpc' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_ppc64: binary-arch_ppc64_none binary-arch_ppc64_real +binary-arch_ppc64_none: binary-arch_ppc64_none_powerpc64 binary-arch_ppc64_none_real +binary-arch_ppc64_none_powerpc64: binary-arch_ppc64_none_powerpc64_real +binary-arch_ppc64_none_powerpc64_real:: + $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='' ARCH='ppc64' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='powerpc64' KCONFIG='debian/config/config debian/config/powerpc/config debian/config/powerpc/config.powerpc64' KERNEL_ARCH='powerpc' LOCALVERSION='-powerpc64' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-powerpc64' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_ppc64_none_real:: + $(MAKE) -f debian/rules.real binary-arch-featureset ABINAME='' ARCH='ppc64' FEATURESET='none' KERNEL_ARCH='powerpc' LOCALVERSION_HEADERS='' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_ppc64_real:: + $(MAKE) -f debian/rules.real binary-arch-arch ABINAME='' ARCH='ppc64' KERNEL_ARCH='powerpc' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_s390: binary-arch_s390_none binary-arch_s390_real +binary-arch_s390_none: binary-arch_s390_none_real binary-arch_s390_none_s390x binary-arch_s390_none_s390x-tape +binary-arch_s390_none_real:: + $(MAKE) -f debian/rules.real binary-arch-featureset ABINAME='' ARCH='s390' FEATURESET='none' KERNEL_ARCH='s390' LOCALVERSION_HEADERS='' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_s390_none_s390x: binary-arch_s390_none_s390x_real +binary-arch_s390_none_s390x-tape: binary-arch_s390_none_s390x-tape_real +binary-arch_s390_none_s390x-tape_real:: + $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='' ARCH='s390' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='s390x-tape' INITRAMFS='False' KCONFIG='debian/config/config debian/config/s390/config debian/config/s390/config.s390x-tape' KERNEL_ARCH='s390' LOCALVERSION='-s390x-tape' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-s390x' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain-s390-tape' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_s390_none_s390x_real:: + $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='' ARCH='s390' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='s390x' KCONFIG='debian/config/config debian/config/s390/config debian/config/s390/config.s390x' KERNEL_ARCH='s390' LOCALVERSION='-s390x' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-s390x' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_s390_real:: + $(MAKE) -f debian/rules.real binary-arch-arch ABINAME='' ARCH='s390' KERNEL_ARCH='s390' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_sh4: binary-arch_sh4_none binary-arch_sh4_real +binary-arch_sh4_none: binary-arch_sh4_none_real binary-arch_sh4_none_sh7751r binary-arch_sh4_none_sh7785lcr +binary-arch_sh4_none_real:: + $(MAKE) -f debian/rules.real binary-arch-featureset ABINAME='' ARCH='sh4' FEATURESET='none' KERNEL_ARCH='sh' LOCALVERSION_HEADERS='' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_sh4_none_sh7751r: binary-arch_sh4_none_sh7751r_real +binary-arch_sh4_none_sh7751r_real:: + $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='' ARCH='sh4' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='sh7751r' KCONFIG='debian/config/config debian/config/sh4/config debian/config/sh4/config.sh7751r' KERNEL_ARCH='sh' LOCALVERSION='-sh7751r' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-sh7751r' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_sh4_none_sh7785lcr: binary-arch_sh4_none_sh7785lcr_real +binary-arch_sh4_none_sh7785lcr_real:: + $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='' ARCH='sh4' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='sh7785lcr' KCONFIG='debian/config/config debian/config/sh4/config debian/config/sh4/config.sh7785lcr' KERNEL_ARCH='sh' LOCALVERSION='-sh7785lcr' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-sh7785lcr' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_sh4_real:: + $(MAKE) -f debian/rules.real binary-arch-arch ABINAME='' ARCH='sh4' KERNEL_ARCH='sh' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_sparc: binary-arch_sparc_none binary-arch_sparc_real +binary-arch_sparc64: binary-arch_sparc64_none binary-arch_sparc64_real +binary-arch_sparc64_none: binary-arch_sparc64_none_real binary-arch_sparc64_none_sparc64 binary-arch_sparc64_none_sparc64-smp +binary-arch_sparc64_none_real:: + $(MAKE) -f debian/rules.real binary-arch-featureset ABINAME='' ARCH='sparc64' FEATURESET='none' KERNEL_ARCH='sparc' LOCALVERSION_HEADERS='' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_sparc64_none_sparc64: binary-arch_sparc64_none_sparc64_real +binary-arch_sparc64_none_sparc64-smp: binary-arch_sparc64_none_sparc64-smp_real +binary-arch_sparc64_none_sparc64-smp_real:: + $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='' ARCH='sparc64' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='sparc64-smp' KCONFIG='debian/config/config debian/config/sparc/config debian/config/sparc/config.sparc64-smp' KERNEL_ARCH='sparc' LOCALVERSION='-sparc64-smp' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-sparc64-smp' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_sparc64_none_sparc64_real:: + $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='' ARCH='sparc64' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='sparc64' KCONFIG='debian/config/config debian/config/sparc/config debian/config/sparc/config.sparc64' KERNEL_ARCH='sparc' LOCALVERSION='-sparc64' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-sparc64' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_sparc64_real:: + $(MAKE) -f debian/rules.real binary-arch-arch ABINAME='' ARCH='sparc64' KERNEL_ARCH='sparc' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_sparc_none: binary-arch_sparc_none_real binary-arch_sparc_none_sparc64 binary-arch_sparc_none_sparc64-smp +binary-arch_sparc_none_real:: + $(MAKE) -f debian/rules.real binary-arch-featureset ABINAME='' ARCH='sparc' FEATURESET='none' KERNEL_ARCH='sparc' LOCALVERSION_HEADERS='' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_sparc_none_sparc64: binary-arch_sparc_none_sparc64_real +binary-arch_sparc_none_sparc64-smp: binary-arch_sparc_none_sparc64-smp_real +binary-arch_sparc_none_sparc64-smp_real:: + $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='' ARCH='sparc' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='sparc64-smp' KCONFIG='debian/config/config debian/config/sparc/config debian/config/sparc/config.sparc64-smp' KERNEL_ARCH='sparc' LOCALVERSION='-sparc64-smp' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-sparc64-smp' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_sparc_none_sparc64_real:: + $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='' ARCH='sparc' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='sparc64' KCONFIG='debian/config/config debian/config/sparc/config debian/config/sparc/config.sparc64' KERNEL_ARCH='sparc' LOCALVERSION='-sparc64' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-sparc64' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-arch_sparc_real:: + $(MAKE) -f debian/rules.real binary-arch-arch ABINAME='' ARCH='sparc' KERNEL_ARCH='sparc' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +binary-indep:: + $(MAKE) -f debian/rules.real binary-indep ABINAME='' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +build: build_alpha build_amd64 build_armel build_armhf build_hppa build_i386 build_ia64 build_m68k build_mips build_mipsel build_powerpc build_ppc64 build_s390 build_sh4 build_sparc build_sparc64 +build_alpha: build_alpha_none build_alpha_real +build_alpha_none: build_alpha_none_alpha-generic build_alpha_none_alpha-legacy build_alpha_none_alpha-smp build_alpha_none_real +build_alpha_none_alpha-generic: build_alpha_none_alpha-generic_real +build_alpha_none_alpha-generic_real:: + $(MAKE) -f debian/rules.real build ABINAME='' ARCH='alpha' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='alpha-generic' KCONFIG='debian/config/config debian/config/alpha/config debian/config/alpha/config.alpha-generic' KERNEL_ARCH='alpha' LOCALVERSION='-alpha-generic' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-alpha-generic' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +build_alpha_none_alpha-legacy: build_alpha_none_alpha-legacy_real +build_alpha_none_alpha-legacy_real:: + $(MAKE) -f debian/rules.real build ABINAME='' ARCH='alpha' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='alpha-legacy' KCONFIG='debian/config/config debian/config/alpha/config debian/config/alpha/config.alpha-legacy' KERNEL_ARCH='alpha' LOCALVERSION='-alpha-legacy' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-alpha-legacy' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +build_alpha_none_alpha-smp: build_alpha_none_alpha-smp_real +build_alpha_none_alpha-smp_real:: + $(MAKE) -f debian/rules.real build ABINAME='' ARCH='alpha' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='alpha-smp' KCONFIG='debian/config/config debian/config/alpha/config debian/config/alpha/config.alpha-smp' KERNEL_ARCH='alpha' LOCALVERSION='-alpha-smp' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-alpha-smp' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +build_alpha_none_real: +build_alpha_real: +build_amd64: build_amd64_none build_amd64_real +build_amd64_none: build_amd64_none_amd64 build_amd64_none_real +build_amd64_none_amd64: build_amd64_none_amd64_real +build_amd64_none_amd64_real:: + $(MAKE) -f debian/rules.real build ABINAME='' ARCH='amd64' COMPILER='gcc-4.4' DEBUG='True' FEATURESET='none' FLAVOUR='amd64' KCONFIG='debian/config/config debian/config/kernelarch-x86/config debian/config/kernelarch-x86/config-arch-64' KCONFIG_OPTIONS='-o DEBUG_INFO=y' KERNEL_ARCH='x86' LOCALVERSION='-amd64' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-amd64' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +build_amd64_none_real: +build_amd64_real: +build_armel: build_armel_none build_armel_real +build_armel_none: build_armel_none_iop32x build_armel_none_kirkwood build_armel_none_orion5x build_armel_none_real build_armel_none_versatile +build_armel_none_iop32x: build_armel_none_iop32x_real +build_armel_none_iop32x_real:: + $(MAKE) -f debian/rules.real build ABINAME='' ARCH='armel' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='iop32x' KCONFIG='debian/config/config debian/config/armel/config debian/config/armel/config.iop32x' KERNEL_ARCH='arm' LOCALVERSION='-iop32x' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-iop32x' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +build_armel_none_kirkwood: build_armel_none_kirkwood_real +build_armel_none_kirkwood_real:: + $(MAKE) -f debian/rules.real build ABINAME='' ARCH='armel' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='kirkwood' KCONFIG='debian/config/config debian/config/armel/config debian/config/armel/config.kirkwood' KERNEL_ARCH='arm' LOCALVERSION='-kirkwood' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-kirkwood' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +build_armel_none_orion5x: build_armel_none_orion5x_real +build_armel_none_orion5x_real:: + $(MAKE) -f debian/rules.real build ABINAME='' ARCH='armel' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='orion5x' KCONFIG='debian/config/config debian/config/armel/config debian/config/armel/config.orion5x' KERNEL_ARCH='arm' LOCALVERSION='-orion5x' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-orion5x' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +build_armel_none_real: +build_armel_none_versatile: build_armel_none_versatile_real +build_armel_none_versatile_real:: + $(MAKE) -f debian/rules.real build ABINAME='' ARCH='armel' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='versatile' KCONFIG='debian/config/config debian/config/armel/config debian/config/armel/config.versatile' KERNEL_ARCH='arm' LOCALVERSION='-versatile' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-versatile' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +build_armel_real: +build_armhf: build_armhf_none build_armhf_real +build_armhf_none: build_armhf_none_mx5 build_armhf_none_real +build_armhf_none_mx5: build_armhf_none_mx5_real +build_armhf_none_mx5_real:: + $(MAKE) -f debian/rules.real build ABINAME='' ARCH='armhf' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='mx5' KCONFIG='debian/config/config debian/config/armel/config debian/config/armhf/config debian/config/armhf/config.mx5' KERNEL_ARCH='arm' LOCALVERSION='-mx5' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-mx5' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +build_armhf_none_real: +build_armhf_real: +build_hppa: build_hppa_none build_hppa_real +build_hppa_none: build_hppa_none_parisc build_hppa_none_parisc-smp build_hppa_none_parisc64 build_hppa_none_parisc64-smp build_hppa_none_real +build_hppa_none_parisc: build_hppa_none_parisc_real +build_hppa_none_parisc-smp: build_hppa_none_parisc-smp_real +build_hppa_none_parisc-smp_real:: + $(MAKE) -f debian/rules.real build ABINAME='' ARCH='hppa' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='parisc-smp' KCONFIG='debian/config/config debian/config/hppa/config debian/config/hppa/config.parisc-smp' KERNEL_ARCH='parisc' LOCALVERSION='-parisc-smp' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-parisc-smp' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +build_hppa_none_parisc64: build_hppa_none_parisc64_real +build_hppa_none_parisc64-smp: build_hppa_none_parisc64-smp_real +build_hppa_none_parisc64-smp_real:: + $(MAKE) -f debian/rules.real build ABINAME='' ARCH='hppa' CFLAGS_KERNEL='-fno-cse-follow-jumps' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='parisc64-smp' KCONFIG='debian/config/config debian/config/hppa/config debian/config/hppa/config.parisc64-smp' KERNEL_ARCH='parisc' LOCALVERSION='-parisc64-smp' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-parisc64-smp' MODULES='True' OVERRIDE_HOST_TYPE='hppa64-linux-gnu' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +build_hppa_none_parisc64_real:: + $(MAKE) -f debian/rules.real build ABINAME='' ARCH='hppa' CFLAGS_KERNEL='-fno-cse-follow-jumps' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='parisc64' KCONFIG='debian/config/config debian/config/hppa/config debian/config/hppa/config.parisc64' KERNEL_ARCH='parisc' LOCALVERSION='-parisc64' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-parisc64' MODULES='True' OVERRIDE_HOST_TYPE='hppa64-linux-gnu' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +build_hppa_none_parisc_real:: + $(MAKE) -f debian/rules.real build ABINAME='' ARCH='hppa' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='parisc' KCONFIG='debian/config/config debian/config/hppa/config debian/config/hppa/config.parisc' KERNEL_ARCH='parisc' LOCALVERSION='-parisc' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-parisc' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +build_hppa_none_real: +build_hppa_real: +build_i386: build_i386_none build_i386_real +build_i386_none: build_i386_none_486 build_i386_none_686-pae build_i386_none_amd64 build_i386_none_real +build_i386_none_486: build_i386_none_486_real +build_i386_none_486_real:: + $(MAKE) -f debian/rules.real build ABINAME='' ARCH='i386' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='486' KCONFIG='debian/config/config debian/config/kernelarch-x86/config debian/config/kernelarch-x86/config-arch-32 debian/config/i386/none/config.486' KERNEL_ARCH='x86' LOCALVERSION='-486' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-486' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +build_i386_none_686-pae: build_i386_none_686-pae_real +build_i386_none_686-pae_real:: + $(MAKE) -f debian/rules.real build ABINAME='' ARCH='i386' COMPILER='gcc-4.4' DEBUG='True' FEATURESET='none' FLAVOUR='686-pae' KCONFIG='debian/config/config debian/config/kernelarch-x86/config debian/config/kernelarch-x86/config-arch-32 debian/config/i386/none/config.686-pae' KCONFIG_OPTIONS='-o DEBUG_INFO=y' KERNEL_ARCH='x86' LOCALVERSION='-686-pae' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-686-pae' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +build_i386_none_amd64: build_i386_none_amd64_real +build_i386_none_amd64_real:: + $(MAKE) -f debian/rules.real build ABINAME='' ARCH='i386' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='amd64' KCONFIG='debian/config/config debian/config/kernelarch-x86/config debian/config/kernelarch-x86/config-arch-64' KERNEL_ARCH='x86' LOCALVERSION='-amd64' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-amd64' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +build_i386_none_real: +build_i386_real: +build_ia64: build_ia64_none build_ia64_real +build_ia64_none: build_ia64_none_itanium build_ia64_none_mckinley build_ia64_none_real +build_ia64_none_itanium: build_ia64_none_itanium_real +build_ia64_none_itanium_real:: + $(MAKE) -f debian/rules.real build ABINAME='' ARCH='ia64' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='itanium' KCONFIG='debian/config/config debian/config/ia64/config debian/config/ia64/config.itanium' KERNEL_ARCH='ia64' LOCALVERSION='-itanium' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-itanium' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +build_ia64_none_mckinley: build_ia64_none_mckinley_real +build_ia64_none_mckinley_real:: + $(MAKE) -f debian/rules.real build ABINAME='' ARCH='ia64' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='mckinley' KCONFIG='debian/config/config debian/config/ia64/config debian/config/ia64/config.mckinley' KERNEL_ARCH='ia64' LOCALVERSION='-mckinley' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-mckinley' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +build_ia64_none_real: +build_ia64_real: +build_m68k: build_m68k_none build_m68k_real +build_m68k_none: build_m68k_none_amiga build_m68k_none_atari build_m68k_none_bvme6000 build_m68k_none_mac build_m68k_none_mvme147 build_m68k_none_mvme16x build_m68k_none_real +build_m68k_none_amiga: build_m68k_none_amiga_real +build_m68k_none_amiga_real:: + $(MAKE) -f debian/rules.real build ABINAME='' ARCH='m68k' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='amiga' INITRAMFS='False' KCONFIG='debian/config/config debian/config/m68k/config debian/config/m68k/config.amiga' KERNEL_ARCH='m68k' LOCALVERSION='-amiga' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-amiga' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +build_m68k_none_atari: build_m68k_none_atari_real +build_m68k_none_atari_real:: + $(MAKE) -f debian/rules.real build ABINAME='' ARCH='m68k' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='atari' INITRAMFS='False' KCONFIG='debian/config/config debian/config/m68k/config debian/config/m68k/config.atari' KERNEL_ARCH='m68k' LOCALVERSION='-atari' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-atari' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +build_m68k_none_bvme6000: build_m68k_none_bvme6000_real +build_m68k_none_bvme6000_real:: + $(MAKE) -f debian/rules.real build ABINAME='' ARCH='m68k' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='bvme6000' INITRAMFS='False' KCONFIG='debian/config/config debian/config/m68k/config debian/config/m68k/config.bvme6000' KERNEL_ARCH='m68k' LOCALVERSION='-bvme6000' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-bvme6000' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +build_m68k_none_mac: build_m68k_none_mac_real +build_m68k_none_mac_real:: + $(MAKE) -f debian/rules.real build ABINAME='' ARCH='m68k' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='mac' INITRAMFS='False' KCONFIG='debian/config/config debian/config/m68k/config debian/config/m68k/config.mac' KERNEL_ARCH='m68k' LOCALVERSION='-mac' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-mac' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +build_m68k_none_mvme147: build_m68k_none_mvme147_real +build_m68k_none_mvme147_real:: + $(MAKE) -f debian/rules.real build ABINAME='' ARCH='m68k' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='mvme147' INITRAMFS='False' KCONFIG='debian/config/config debian/config/m68k/config debian/config/m68k/config.mvme147' KERNEL_ARCH='m68k' LOCALVERSION='-mvme147' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-mvme147' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +build_m68k_none_mvme16x: build_m68k_none_mvme16x_real +build_m68k_none_mvme16x_real:: + $(MAKE) -f debian/rules.real build ABINAME='' ARCH='m68k' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='mvme16x' INITRAMFS='False' KCONFIG='debian/config/config debian/config/m68k/config debian/config/m68k/config.mvme16x' KERNEL_ARCH='m68k' LOCALVERSION='-mvme16x' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-mvme16x' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +build_m68k_none_real: +build_m68k_real: +build_mips: build_mips_none build_mips_real +build_mips_none: build_mips_none_4kc-malta build_mips_none_5kc-malta build_mips_none_octeon build_mips_none_r4k-ip22 build_mips_none_r5k-ip32 build_mips_none_real build_mips_none_sb1-bcm91250a build_mips_none_sb1a-bcm91480b +build_mips_none_4kc-malta: build_mips_none_4kc-malta_real +build_mips_none_4kc-malta_real:: + $(MAKE) -f debian/rules.real build ABINAME='' ARCH='mips' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='4kc-malta' INITRAMFS='False' KCONFIG='debian/config/config debian/config/mips/config debian/config/mips/config.4kc-malta' KERNEL_ARCH='mips' LOCALVERSION='-4kc-malta' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-4kc-malta' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +build_mips_none_5kc-malta: build_mips_none_5kc-malta_real +build_mips_none_5kc-malta_real:: + $(MAKE) -f debian/rules.real build ABINAME='' ARCH='mips' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='5kc-malta' INITRAMFS='False' KCONFIG='debian/config/config debian/config/mips/config debian/config/mips/config.5kc-malta' KERNEL_ARCH='mips' LOCALVERSION='-5kc-malta' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-5kc-malta' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +build_mips_none_octeon: build_mips_none_octeon_real +build_mips_none_octeon_real:: + $(MAKE) -f debian/rules.real build ABINAME='' ARCH='mips' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='octeon' INITRAMFS='False' KCONFIG='debian/config/config debian/config/mips/config debian/config/mips/config.octeon' KERNEL_ARCH='mips' LOCALVERSION='-octeon' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-octeon' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +build_mips_none_r4k-ip22: build_mips_none_r4k-ip22_real +build_mips_none_r4k-ip22_real:: + $(MAKE) -f debian/rules.real build ABINAME='' ARCH='mips' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='r4k-ip22' INITRAMFS='False' KCONFIG='debian/config/config debian/config/mips/config debian/config/mips/config.r4k-ip22' KERNEL_ARCH='mips' LOCALVERSION='-r4k-ip22' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-r4k-ip22' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +build_mips_none_r5k-ip32: build_mips_none_r5k-ip32_real +build_mips_none_r5k-ip32_real:: + $(MAKE) -f debian/rules.real build ABINAME='' ARCH='mips' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='r5k-ip32' INITRAMFS='False' KCONFIG='debian/config/config debian/config/mips/config debian/config/mips/config.r5k-ip32' KERNEL_ARCH='mips' LOCALVERSION='-r5k-ip32' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-r5k-ip32' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +build_mips_none_real: +build_mips_none_sb1-bcm91250a: build_mips_none_sb1-bcm91250a_real +build_mips_none_sb1-bcm91250a_real:: + $(MAKE) -f debian/rules.real build ABINAME='' ARCH='mips' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='sb1-bcm91250a' INITRAMFS='False' KCONFIG='debian/config/config debian/config/mips/config debian/config/mips/config.sb1-bcm91250a' KERNEL_ARCH='mips' LOCALVERSION='-sb1-bcm91250a' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-sb1-bcm91250a' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +build_mips_none_sb1a-bcm91480b: build_mips_none_sb1a-bcm91480b_real +build_mips_none_sb1a-bcm91480b_real:: + $(MAKE) -f debian/rules.real build ABINAME='' ARCH='mips' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='sb1a-bcm91480b' INITRAMFS='False' KCONFIG='debian/config/config debian/config/mips/config debian/config/mips/config.sb1a-bcm91480b' KERNEL_ARCH='mips' LOCALVERSION='-sb1a-bcm91480b' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-sb1a-bcm91480b' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +build_mips_real: +build_mipsel: build_mipsel_none build_mipsel_real +build_mipsel_none: build_mipsel_none_4kc-malta build_mipsel_none_5kc-malta build_mipsel_none_loongson-2f build_mipsel_none_r5k-cobalt build_mipsel_none_real build_mipsel_none_sb1-bcm91250a build_mipsel_none_sb1a-bcm91480b +build_mipsel_none_4kc-malta: build_mipsel_none_4kc-malta_real +build_mipsel_none_4kc-malta_real:: + $(MAKE) -f debian/rules.real build ABINAME='' ARCH='mipsel' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='4kc-malta' INITRAMFS='False' KCONFIG='debian/config/config debian/config/mipsel/config debian/config/mips/config.4kc-malta' KERNEL_ARCH='mips' LOCALVERSION='-4kc-malta' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-4kc-malta' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +build_mipsel_none_5kc-malta: build_mipsel_none_5kc-malta_real +build_mipsel_none_5kc-malta_real:: + $(MAKE) -f debian/rules.real build ABINAME='' ARCH='mipsel' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='5kc-malta' INITRAMFS='False' KCONFIG='debian/config/config debian/config/mipsel/config debian/config/mips/config.5kc-malta' KERNEL_ARCH='mips' LOCALVERSION='-5kc-malta' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-5kc-malta' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +build_mipsel_none_loongson-2f: build_mipsel_none_loongson-2f_real +build_mipsel_none_loongson-2f_real:: + $(MAKE) -f debian/rules.real build ABINAME='' ARCH='mipsel' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='loongson-2f' INITRAMFS='False' KCONFIG='debian/config/config debian/config/mipsel/config debian/config/mipsel/config.loongson-2f' KERNEL_ARCH='mips' LOCALVERSION='-loongson-2f' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-loongson-2f' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +build_mipsel_none_r5k-cobalt: build_mipsel_none_r5k-cobalt_real +build_mipsel_none_r5k-cobalt_real:: + $(MAKE) -f debian/rules.real build ABINAME='' ARCH='mipsel' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='r5k-cobalt' INITRAMFS='False' KCONFIG='debian/config/config debian/config/mipsel/config debian/config/mipsel/config.r5k-cobalt' KERNEL_ARCH='mips' LOCALVERSION='-r5k-cobalt' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-r5k-cobalt' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +build_mipsel_none_real: +build_mipsel_none_sb1-bcm91250a: build_mipsel_none_sb1-bcm91250a_real +build_mipsel_none_sb1-bcm91250a_real:: + $(MAKE) -f debian/rules.real build ABINAME='' ARCH='mipsel' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='sb1-bcm91250a' INITRAMFS='False' KCONFIG='debian/config/config debian/config/mipsel/config debian/config/mips/config.sb1-bcm91250a' KERNEL_ARCH='mips' LOCALVERSION='-sb1-bcm91250a' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-sb1-bcm91250a' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +build_mipsel_none_sb1a-bcm91480b: build_mipsel_none_sb1a-bcm91480b_real +build_mipsel_none_sb1a-bcm91480b_real:: + $(MAKE) -f debian/rules.real build ABINAME='' ARCH='mipsel' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='sb1a-bcm91480b' INITRAMFS='False' KCONFIG='debian/config/config debian/config/mipsel/config debian/config/mips/config.sb1a-bcm91480b' KERNEL_ARCH='mips' LOCALVERSION='-sb1a-bcm91480b' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-sb1a-bcm91480b' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +build_mipsel_real: +build_powerpc: build_powerpc_none build_powerpc_real +build_powerpc_none: build_powerpc_none_powerpc build_powerpc_none_powerpc-smp build_powerpc_none_powerpc64 build_powerpc_none_real +build_powerpc_none_powerpc: build_powerpc_none_powerpc_real +build_powerpc_none_powerpc-smp: build_powerpc_none_powerpc-smp_real +build_powerpc_none_powerpc-smp_real:: + $(MAKE) -f debian/rules.real build ABINAME='' ARCH='powerpc' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='powerpc-smp' KCONFIG='debian/config/config debian/config/powerpc/config debian/config/powerpc/config.powerpc debian/config/powerpc/config.powerpc-smp' KERNEL_ARCH='powerpc' LOCALVERSION='-powerpc-smp' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-powerpc-smp' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +build_powerpc_none_powerpc64: build_powerpc_none_powerpc64_real +build_powerpc_none_powerpc64_real:: + $(MAKE) -f debian/rules.real build ABINAME='' ARCH='powerpc' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='powerpc64' KCONFIG='debian/config/config debian/config/powerpc/config debian/config/powerpc/config.powerpc64' KERNEL_ARCH='powerpc' LOCALVERSION='-powerpc64' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-powerpc64' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +build_powerpc_none_powerpc_real:: + $(MAKE) -f debian/rules.real build ABINAME='' ARCH='powerpc' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='powerpc' KCONFIG='debian/config/config debian/config/powerpc/config debian/config/powerpc/config.powerpc' KERNEL_ARCH='powerpc' LOCALVERSION='-powerpc' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-powerpc' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +build_powerpc_none_real: +build_powerpc_real: +build_ppc64: build_ppc64_none build_ppc64_real +build_ppc64_none: build_ppc64_none_powerpc64 build_ppc64_none_real +build_ppc64_none_powerpc64: build_ppc64_none_powerpc64_real +build_ppc64_none_powerpc64_real:: + $(MAKE) -f debian/rules.real build ABINAME='' ARCH='ppc64' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='powerpc64' KCONFIG='debian/config/config debian/config/powerpc/config debian/config/powerpc/config.powerpc64' KERNEL_ARCH='powerpc' LOCALVERSION='-powerpc64' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-powerpc64' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +build_ppc64_none_real: +build_ppc64_real: +build_s390: build_s390_none build_s390_real +build_s390_none: build_s390_none_real build_s390_none_s390x build_s390_none_s390x-tape +build_s390_none_real: +build_s390_none_s390x: build_s390_none_s390x_real +build_s390_none_s390x-tape: build_s390_none_s390x-tape_real +build_s390_none_s390x-tape_real:: + $(MAKE) -f debian/rules.real build ABINAME='' ARCH='s390' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='s390x-tape' INITRAMFS='False' KCONFIG='debian/config/config debian/config/s390/config debian/config/s390/config.s390x-tape' KERNEL_ARCH='s390' LOCALVERSION='-s390x-tape' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-s390x' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain-s390-tape' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +build_s390_none_s390x_real:: + $(MAKE) -f debian/rules.real build ABINAME='' ARCH='s390' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='s390x' KCONFIG='debian/config/config debian/config/s390/config debian/config/s390/config.s390x' KERNEL_ARCH='s390' LOCALVERSION='-s390x' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-s390x' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +build_s390_real: +build_sh4: build_sh4_none build_sh4_real +build_sh4_none: build_sh4_none_real build_sh4_none_sh7751r build_sh4_none_sh7785lcr +build_sh4_none_real: +build_sh4_none_sh7751r: build_sh4_none_sh7751r_real +build_sh4_none_sh7751r_real:: + $(MAKE) -f debian/rules.real build ABINAME='' ARCH='sh4' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='sh7751r' KCONFIG='debian/config/config debian/config/sh4/config debian/config/sh4/config.sh7751r' KERNEL_ARCH='sh' LOCALVERSION='-sh7751r' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-sh7751r' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +build_sh4_none_sh7785lcr: build_sh4_none_sh7785lcr_real +build_sh4_none_sh7785lcr_real:: + $(MAKE) -f debian/rules.real build ABINAME='' ARCH='sh4' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='sh7785lcr' KCONFIG='debian/config/config debian/config/sh4/config debian/config/sh4/config.sh7785lcr' KERNEL_ARCH='sh' LOCALVERSION='-sh7785lcr' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-sh7785lcr' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +build_sh4_real: +build_sparc: build_sparc_none build_sparc_real +build_sparc64: build_sparc64_none build_sparc64_real +build_sparc64_none: build_sparc64_none_real build_sparc64_none_sparc64 build_sparc64_none_sparc64-smp +build_sparc64_none_real: +build_sparc64_none_sparc64: build_sparc64_none_sparc64_real +build_sparc64_none_sparc64-smp: build_sparc64_none_sparc64-smp_real +build_sparc64_none_sparc64-smp_real:: + $(MAKE) -f debian/rules.real build ABINAME='' ARCH='sparc64' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='sparc64-smp' KCONFIG='debian/config/config debian/config/sparc/config debian/config/sparc/config.sparc64-smp' KERNEL_ARCH='sparc' LOCALVERSION='-sparc64-smp' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-sparc64-smp' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +build_sparc64_none_sparc64_real:: + $(MAKE) -f debian/rules.real build ABINAME='' ARCH='sparc64' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='sparc64' KCONFIG='debian/config/config debian/config/sparc/config debian/config/sparc/config.sparc64' KERNEL_ARCH='sparc' LOCALVERSION='-sparc64' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-sparc64' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +build_sparc64_real: +build_sparc_none: build_sparc_none_real build_sparc_none_sparc64 build_sparc_none_sparc64-smp +build_sparc_none_real: +build_sparc_none_sparc64: build_sparc_none_sparc64_real +build_sparc_none_sparc64-smp: build_sparc_none_sparc64-smp_real +build_sparc_none_sparc64-smp_real:: + $(MAKE) -f debian/rules.real build ABINAME='' ARCH='sparc' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='sparc64-smp' KCONFIG='debian/config/config debian/config/sparc/config debian/config/sparc/config.sparc64-smp' KERNEL_ARCH='sparc' LOCALVERSION='-sparc64-smp' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-sparc64-smp' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +build_sparc_none_sparc64_real:: + $(MAKE) -f debian/rules.real build ABINAME='' ARCH='sparc' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='sparc64' KCONFIG='debian/config/config debian/config/sparc/config debian/config/sparc/config.sparc64' KERNEL_ARCH='sparc' LOCALVERSION='-sparc64' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-sparc64' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +build_sparc_real: +setup: setup_alpha setup_amd64 setup_armel setup_armhf setup_hppa setup_i386 setup_ia64 setup_m68k setup_mips setup_mipsel setup_powerpc setup_ppc64 setup_s390 setup_sh4 setup_sparc setup_sparc64 +setup_alpha: setup_alpha_none setup_alpha_real +setup_alpha_none: setup_alpha_none_alpha-generic setup_alpha_none_alpha-legacy setup_alpha_none_alpha-smp setup_alpha_none_real +setup_alpha_none_alpha-generic: setup_alpha_none_alpha-generic_real +setup_alpha_none_alpha-generic_real:: + $(MAKE) -f debian/rules.real setup-flavour ABINAME='' ARCH='alpha' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='alpha-generic' KCONFIG='debian/config/config debian/config/alpha/config debian/config/alpha/config.alpha-generic' KERNEL_ARCH='alpha' LOCALVERSION='-alpha-generic' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-alpha-generic' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +setup_alpha_none_alpha-legacy: setup_alpha_none_alpha-legacy_real +setup_alpha_none_alpha-legacy_real:: + $(MAKE) -f debian/rules.real setup-flavour ABINAME='' ARCH='alpha' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='alpha-legacy' KCONFIG='debian/config/config debian/config/alpha/config debian/config/alpha/config.alpha-legacy' KERNEL_ARCH='alpha' LOCALVERSION='-alpha-legacy' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-alpha-legacy' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +setup_alpha_none_alpha-smp: setup_alpha_none_alpha-smp_real +setup_alpha_none_alpha-smp_real:: + $(MAKE) -f debian/rules.real setup-flavour ABINAME='' ARCH='alpha' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='alpha-smp' KCONFIG='debian/config/config debian/config/alpha/config debian/config/alpha/config.alpha-smp' KERNEL_ARCH='alpha' LOCALVERSION='-alpha-smp' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-alpha-smp' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +setup_alpha_none_real: +setup_alpha_real: +setup_amd64: setup_amd64_none setup_amd64_real +setup_amd64_none: setup_amd64_none_amd64 setup_amd64_none_real +setup_amd64_none_amd64: setup_amd64_none_amd64_real +setup_amd64_none_amd64_real:: + $(MAKE) -f debian/rules.real setup-flavour ABINAME='' ARCH='amd64' COMPILER='gcc-4.4' DEBUG='True' FEATURESET='none' FLAVOUR='amd64' KCONFIG='debian/config/config debian/config/kernelarch-x86/config debian/config/kernelarch-x86/config-arch-64' KCONFIG_OPTIONS='-o DEBUG_INFO=y' KERNEL_ARCH='x86' LOCALVERSION='-amd64' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-amd64' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +setup_amd64_none_real: +setup_amd64_real: +setup_armel: setup_armel_none setup_armel_real +setup_armel_none: setup_armel_none_iop32x setup_armel_none_kirkwood setup_armel_none_orion5x setup_armel_none_real setup_armel_none_versatile +setup_armel_none_iop32x: setup_armel_none_iop32x_real +setup_armel_none_iop32x_real:: + $(MAKE) -f debian/rules.real setup-flavour ABINAME='' ARCH='armel' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='iop32x' KCONFIG='debian/config/config debian/config/armel/config debian/config/armel/config.iop32x' KERNEL_ARCH='arm' LOCALVERSION='-iop32x' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-iop32x' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +setup_armel_none_kirkwood: setup_armel_none_kirkwood_real +setup_armel_none_kirkwood_real:: + $(MAKE) -f debian/rules.real setup-flavour ABINAME='' ARCH='armel' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='kirkwood' KCONFIG='debian/config/config debian/config/armel/config debian/config/armel/config.kirkwood' KERNEL_ARCH='arm' LOCALVERSION='-kirkwood' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-kirkwood' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +setup_armel_none_orion5x: setup_armel_none_orion5x_real +setup_armel_none_orion5x_real:: + $(MAKE) -f debian/rules.real setup-flavour ABINAME='' ARCH='armel' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='orion5x' KCONFIG='debian/config/config debian/config/armel/config debian/config/armel/config.orion5x' KERNEL_ARCH='arm' LOCALVERSION='-orion5x' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-orion5x' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +setup_armel_none_real: +setup_armel_none_versatile: setup_armel_none_versatile_real +setup_armel_none_versatile_real:: + $(MAKE) -f debian/rules.real setup-flavour ABINAME='' ARCH='armel' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='versatile' KCONFIG='debian/config/config debian/config/armel/config debian/config/armel/config.versatile' KERNEL_ARCH='arm' LOCALVERSION='-versatile' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-versatile' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +setup_armel_real: +setup_armhf: setup_armhf_none setup_armhf_real +setup_armhf_none: setup_armhf_none_mx5 setup_armhf_none_real +setup_armhf_none_mx5: setup_armhf_none_mx5_real +setup_armhf_none_mx5_real:: + $(MAKE) -f debian/rules.real setup-flavour ABINAME='' ARCH='armhf' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='mx5' KCONFIG='debian/config/config debian/config/armel/config debian/config/armhf/config debian/config/armhf/config.mx5' KERNEL_ARCH='arm' LOCALVERSION='-mx5' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-mx5' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +setup_armhf_none_real: +setup_armhf_real: +setup_hppa: setup_hppa_none setup_hppa_real +setup_hppa_none: setup_hppa_none_parisc setup_hppa_none_parisc-smp setup_hppa_none_parisc64 setup_hppa_none_parisc64-smp setup_hppa_none_real +setup_hppa_none_parisc: setup_hppa_none_parisc_real +setup_hppa_none_parisc-smp: setup_hppa_none_parisc-smp_real +setup_hppa_none_parisc-smp_real:: + $(MAKE) -f debian/rules.real setup-flavour ABINAME='' ARCH='hppa' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='parisc-smp' KCONFIG='debian/config/config debian/config/hppa/config debian/config/hppa/config.parisc-smp' KERNEL_ARCH='parisc' LOCALVERSION='-parisc-smp' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-parisc-smp' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +setup_hppa_none_parisc64: setup_hppa_none_parisc64_real +setup_hppa_none_parisc64-smp: setup_hppa_none_parisc64-smp_real +setup_hppa_none_parisc64-smp_real:: + $(MAKE) -f debian/rules.real setup-flavour ABINAME='' ARCH='hppa' CFLAGS_KERNEL='-fno-cse-follow-jumps' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='parisc64-smp' KCONFIG='debian/config/config debian/config/hppa/config debian/config/hppa/config.parisc64-smp' KERNEL_ARCH='parisc' LOCALVERSION='-parisc64-smp' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-parisc64-smp' MODULES='True' OVERRIDE_HOST_TYPE='hppa64-linux-gnu' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +setup_hppa_none_parisc64_real:: + $(MAKE) -f debian/rules.real setup-flavour ABINAME='' ARCH='hppa' CFLAGS_KERNEL='-fno-cse-follow-jumps' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='parisc64' KCONFIG='debian/config/config debian/config/hppa/config debian/config/hppa/config.parisc64' KERNEL_ARCH='parisc' LOCALVERSION='-parisc64' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-parisc64' MODULES='True' OVERRIDE_HOST_TYPE='hppa64-linux-gnu' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +setup_hppa_none_parisc_real:: + $(MAKE) -f debian/rules.real setup-flavour ABINAME='' ARCH='hppa' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='parisc' KCONFIG='debian/config/config debian/config/hppa/config debian/config/hppa/config.parisc' KERNEL_ARCH='parisc' LOCALVERSION='-parisc' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-parisc' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +setup_hppa_none_real: +setup_hppa_real: +setup_i386: setup_i386_none setup_i386_real +setup_i386_none: setup_i386_none_486 setup_i386_none_686-pae setup_i386_none_amd64 setup_i386_none_real +setup_i386_none_486: setup_i386_none_486_real +setup_i386_none_486_real:: + $(MAKE) -f debian/rules.real setup-flavour ABINAME='' ARCH='i386' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='486' KCONFIG='debian/config/config debian/config/kernelarch-x86/config debian/config/kernelarch-x86/config-arch-32 debian/config/i386/none/config.486' KERNEL_ARCH='x86' LOCALVERSION='-486' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-486' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +setup_i386_none_686-pae: setup_i386_none_686-pae_real +setup_i386_none_686-pae_real:: + $(MAKE) -f debian/rules.real setup-flavour ABINAME='' ARCH='i386' COMPILER='gcc-4.4' DEBUG='True' FEATURESET='none' FLAVOUR='686-pae' KCONFIG='debian/config/config debian/config/kernelarch-x86/config debian/config/kernelarch-x86/config-arch-32 debian/config/i386/none/config.686-pae' KCONFIG_OPTIONS='-o DEBUG_INFO=y' KERNEL_ARCH='x86' LOCALVERSION='-686-pae' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-686-pae' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +setup_i386_none_amd64: setup_i386_none_amd64_real +setup_i386_none_amd64_real:: + $(MAKE) -f debian/rules.real setup-flavour ABINAME='' ARCH='i386' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='amd64' KCONFIG='debian/config/config debian/config/kernelarch-x86/config debian/config/kernelarch-x86/config-arch-64' KERNEL_ARCH='x86' LOCALVERSION='-amd64' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-amd64' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +setup_i386_none_real: +setup_i386_real: +setup_ia64: setup_ia64_none setup_ia64_real +setup_ia64_none: setup_ia64_none_itanium setup_ia64_none_mckinley setup_ia64_none_real +setup_ia64_none_itanium: setup_ia64_none_itanium_real +setup_ia64_none_itanium_real:: + $(MAKE) -f debian/rules.real setup-flavour ABINAME='' ARCH='ia64' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='itanium' KCONFIG='debian/config/config debian/config/ia64/config debian/config/ia64/config.itanium' KERNEL_ARCH='ia64' LOCALVERSION='-itanium' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-itanium' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +setup_ia64_none_mckinley: setup_ia64_none_mckinley_real +setup_ia64_none_mckinley_real:: + $(MAKE) -f debian/rules.real setup-flavour ABINAME='' ARCH='ia64' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='mckinley' KCONFIG='debian/config/config debian/config/ia64/config debian/config/ia64/config.mckinley' KERNEL_ARCH='ia64' LOCALVERSION='-mckinley' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-mckinley' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +setup_ia64_none_real: +setup_ia64_real: +setup_m68k: setup_m68k_none setup_m68k_real +setup_m68k_none: setup_m68k_none_amiga setup_m68k_none_atari setup_m68k_none_bvme6000 setup_m68k_none_mac setup_m68k_none_mvme147 setup_m68k_none_mvme16x setup_m68k_none_real +setup_m68k_none_amiga: setup_m68k_none_amiga_real +setup_m68k_none_amiga_real:: + $(MAKE) -f debian/rules.real setup-flavour ABINAME='' ARCH='m68k' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='amiga' INITRAMFS='False' KCONFIG='debian/config/config debian/config/m68k/config debian/config/m68k/config.amiga' KERNEL_ARCH='m68k' LOCALVERSION='-amiga' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-amiga' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +setup_m68k_none_atari: setup_m68k_none_atari_real +setup_m68k_none_atari_real:: + $(MAKE) -f debian/rules.real setup-flavour ABINAME='' ARCH='m68k' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='atari' INITRAMFS='False' KCONFIG='debian/config/config debian/config/m68k/config debian/config/m68k/config.atari' KERNEL_ARCH='m68k' LOCALVERSION='-atari' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-atari' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +setup_m68k_none_bvme6000: setup_m68k_none_bvme6000_real +setup_m68k_none_bvme6000_real:: + $(MAKE) -f debian/rules.real setup-flavour ABINAME='' ARCH='m68k' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='bvme6000' INITRAMFS='False' KCONFIG='debian/config/config debian/config/m68k/config debian/config/m68k/config.bvme6000' KERNEL_ARCH='m68k' LOCALVERSION='-bvme6000' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-bvme6000' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +setup_m68k_none_mac: setup_m68k_none_mac_real +setup_m68k_none_mac_real:: + $(MAKE) -f debian/rules.real setup-flavour ABINAME='' ARCH='m68k' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='mac' INITRAMFS='False' KCONFIG='debian/config/config debian/config/m68k/config debian/config/m68k/config.mac' KERNEL_ARCH='m68k' LOCALVERSION='-mac' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-mac' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +setup_m68k_none_mvme147: setup_m68k_none_mvme147_real +setup_m68k_none_mvme147_real:: + $(MAKE) -f debian/rules.real setup-flavour ABINAME='' ARCH='m68k' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='mvme147' INITRAMFS='False' KCONFIG='debian/config/config debian/config/m68k/config debian/config/m68k/config.mvme147' KERNEL_ARCH='m68k' LOCALVERSION='-mvme147' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-mvme147' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +setup_m68k_none_mvme16x: setup_m68k_none_mvme16x_real +setup_m68k_none_mvme16x_real:: + $(MAKE) -f debian/rules.real setup-flavour ABINAME='' ARCH='m68k' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='mvme16x' INITRAMFS='False' KCONFIG='debian/config/config debian/config/m68k/config debian/config/m68k/config.mvme16x' KERNEL_ARCH='m68k' LOCALVERSION='-mvme16x' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-mvme16x' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +setup_m68k_none_real: +setup_m68k_real: +setup_mips: setup_mips_none setup_mips_real +setup_mips_none: setup_mips_none_4kc-malta setup_mips_none_5kc-malta setup_mips_none_octeon setup_mips_none_r4k-ip22 setup_mips_none_r5k-ip32 setup_mips_none_real setup_mips_none_sb1-bcm91250a setup_mips_none_sb1a-bcm91480b +setup_mips_none_4kc-malta: setup_mips_none_4kc-malta_real +setup_mips_none_4kc-malta_real:: + $(MAKE) -f debian/rules.real setup-flavour ABINAME='' ARCH='mips' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='4kc-malta' INITRAMFS='False' KCONFIG='debian/config/config debian/config/mips/config debian/config/mips/config.4kc-malta' KERNEL_ARCH='mips' LOCALVERSION='-4kc-malta' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-4kc-malta' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +setup_mips_none_5kc-malta: setup_mips_none_5kc-malta_real +setup_mips_none_5kc-malta_real:: + $(MAKE) -f debian/rules.real setup-flavour ABINAME='' ARCH='mips' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='5kc-malta' INITRAMFS='False' KCONFIG='debian/config/config debian/config/mips/config debian/config/mips/config.5kc-malta' KERNEL_ARCH='mips' LOCALVERSION='-5kc-malta' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-5kc-malta' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +setup_mips_none_octeon: setup_mips_none_octeon_real +setup_mips_none_octeon_real:: + $(MAKE) -f debian/rules.real setup-flavour ABINAME='' ARCH='mips' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='octeon' INITRAMFS='False' KCONFIG='debian/config/config debian/config/mips/config debian/config/mips/config.octeon' KERNEL_ARCH='mips' LOCALVERSION='-octeon' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-octeon' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +setup_mips_none_r4k-ip22: setup_mips_none_r4k-ip22_real +setup_mips_none_r4k-ip22_real:: + $(MAKE) -f debian/rules.real setup-flavour ABINAME='' ARCH='mips' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='r4k-ip22' INITRAMFS='False' KCONFIG='debian/config/config debian/config/mips/config debian/config/mips/config.r4k-ip22' KERNEL_ARCH='mips' LOCALVERSION='-r4k-ip22' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-r4k-ip22' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +setup_mips_none_r5k-ip32: setup_mips_none_r5k-ip32_real +setup_mips_none_r5k-ip32_real:: + $(MAKE) -f debian/rules.real setup-flavour ABINAME='' ARCH='mips' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='r5k-ip32' INITRAMFS='False' KCONFIG='debian/config/config debian/config/mips/config debian/config/mips/config.r5k-ip32' KERNEL_ARCH='mips' LOCALVERSION='-r5k-ip32' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-r5k-ip32' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +setup_mips_none_real: +setup_mips_none_sb1-bcm91250a: setup_mips_none_sb1-bcm91250a_real +setup_mips_none_sb1-bcm91250a_real:: + $(MAKE) -f debian/rules.real setup-flavour ABINAME='' ARCH='mips' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='sb1-bcm91250a' INITRAMFS='False' KCONFIG='debian/config/config debian/config/mips/config debian/config/mips/config.sb1-bcm91250a' KERNEL_ARCH='mips' LOCALVERSION='-sb1-bcm91250a' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-sb1-bcm91250a' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +setup_mips_none_sb1a-bcm91480b: setup_mips_none_sb1a-bcm91480b_real +setup_mips_none_sb1a-bcm91480b_real:: + $(MAKE) -f debian/rules.real setup-flavour ABINAME='' ARCH='mips' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='sb1a-bcm91480b' INITRAMFS='False' KCONFIG='debian/config/config debian/config/mips/config debian/config/mips/config.sb1a-bcm91480b' KERNEL_ARCH='mips' LOCALVERSION='-sb1a-bcm91480b' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-sb1a-bcm91480b' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +setup_mips_real: +setup_mipsel: setup_mipsel_none setup_mipsel_real +setup_mipsel_none: setup_mipsel_none_4kc-malta setup_mipsel_none_5kc-malta setup_mipsel_none_loongson-2f setup_mipsel_none_r5k-cobalt setup_mipsel_none_real setup_mipsel_none_sb1-bcm91250a setup_mipsel_none_sb1a-bcm91480b +setup_mipsel_none_4kc-malta: setup_mipsel_none_4kc-malta_real +setup_mipsel_none_4kc-malta_real:: + $(MAKE) -f debian/rules.real setup-flavour ABINAME='' ARCH='mipsel' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='4kc-malta' INITRAMFS='False' KCONFIG='debian/config/config debian/config/mipsel/config debian/config/mips/config.4kc-malta' KERNEL_ARCH='mips' LOCALVERSION='-4kc-malta' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-4kc-malta' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +setup_mipsel_none_5kc-malta: setup_mipsel_none_5kc-malta_real +setup_mipsel_none_5kc-malta_real:: + $(MAKE) -f debian/rules.real setup-flavour ABINAME='' ARCH='mipsel' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='5kc-malta' INITRAMFS='False' KCONFIG='debian/config/config debian/config/mipsel/config debian/config/mips/config.5kc-malta' KERNEL_ARCH='mips' LOCALVERSION='-5kc-malta' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-5kc-malta' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +setup_mipsel_none_loongson-2f: setup_mipsel_none_loongson-2f_real +setup_mipsel_none_loongson-2f_real:: + $(MAKE) -f debian/rules.real setup-flavour ABINAME='' ARCH='mipsel' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='loongson-2f' INITRAMFS='False' KCONFIG='debian/config/config debian/config/mipsel/config debian/config/mipsel/config.loongson-2f' KERNEL_ARCH='mips' LOCALVERSION='-loongson-2f' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-loongson-2f' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +setup_mipsel_none_r5k-cobalt: setup_mipsel_none_r5k-cobalt_real +setup_mipsel_none_r5k-cobalt_real:: + $(MAKE) -f debian/rules.real setup-flavour ABINAME='' ARCH='mipsel' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='r5k-cobalt' INITRAMFS='False' KCONFIG='debian/config/config debian/config/mipsel/config debian/config/mipsel/config.r5k-cobalt' KERNEL_ARCH='mips' LOCALVERSION='-r5k-cobalt' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-r5k-cobalt' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +setup_mipsel_none_real: +setup_mipsel_none_sb1-bcm91250a: setup_mipsel_none_sb1-bcm91250a_real +setup_mipsel_none_sb1-bcm91250a_real:: + $(MAKE) -f debian/rules.real setup-flavour ABINAME='' ARCH='mipsel' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='sb1-bcm91250a' INITRAMFS='False' KCONFIG='debian/config/config debian/config/mipsel/config debian/config/mips/config.sb1-bcm91250a' KERNEL_ARCH='mips' LOCALVERSION='-sb1-bcm91250a' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-sb1-bcm91250a' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +setup_mipsel_none_sb1a-bcm91480b: setup_mipsel_none_sb1a-bcm91480b_real +setup_mipsel_none_sb1a-bcm91480b_real:: + $(MAKE) -f debian/rules.real setup-flavour ABINAME='' ARCH='mipsel' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='sb1a-bcm91480b' INITRAMFS='False' KCONFIG='debian/config/config debian/config/mipsel/config debian/config/mips/config.sb1a-bcm91480b' KERNEL_ARCH='mips' LOCALVERSION='-sb1a-bcm91480b' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-sb1a-bcm91480b' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +setup_mipsel_real: +setup_powerpc: setup_powerpc_none setup_powerpc_real +setup_powerpc_none: setup_powerpc_none_powerpc setup_powerpc_none_powerpc-smp setup_powerpc_none_powerpc64 setup_powerpc_none_real +setup_powerpc_none_powerpc: setup_powerpc_none_powerpc_real +setup_powerpc_none_powerpc-smp: setup_powerpc_none_powerpc-smp_real +setup_powerpc_none_powerpc-smp_real:: + $(MAKE) -f debian/rules.real setup-flavour ABINAME='' ARCH='powerpc' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='powerpc-smp' KCONFIG='debian/config/config debian/config/powerpc/config debian/config/powerpc/config.powerpc debian/config/powerpc/config.powerpc-smp' KERNEL_ARCH='powerpc' LOCALVERSION='-powerpc-smp' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-powerpc-smp' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +setup_powerpc_none_powerpc64: setup_powerpc_none_powerpc64_real +setup_powerpc_none_powerpc64_real:: + $(MAKE) -f debian/rules.real setup-flavour ABINAME='' ARCH='powerpc' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='powerpc64' KCONFIG='debian/config/config debian/config/powerpc/config debian/config/powerpc/config.powerpc64' KERNEL_ARCH='powerpc' LOCALVERSION='-powerpc64' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-powerpc64' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +setup_powerpc_none_powerpc_real:: + $(MAKE) -f debian/rules.real setup-flavour ABINAME='' ARCH='powerpc' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='powerpc' KCONFIG='debian/config/config debian/config/powerpc/config debian/config/powerpc/config.powerpc' KERNEL_ARCH='powerpc' LOCALVERSION='-powerpc' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-powerpc' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +setup_powerpc_none_real: +setup_powerpc_real: +setup_ppc64: setup_ppc64_none setup_ppc64_real +setup_ppc64_none: setup_ppc64_none_powerpc64 setup_ppc64_none_real +setup_ppc64_none_powerpc64: setup_ppc64_none_powerpc64_real +setup_ppc64_none_powerpc64_real:: + $(MAKE) -f debian/rules.real setup-flavour ABINAME='' ARCH='ppc64' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='powerpc64' KCONFIG='debian/config/config debian/config/powerpc/config debian/config/powerpc/config.powerpc64' KERNEL_ARCH='powerpc' LOCALVERSION='-powerpc64' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-powerpc64' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +setup_ppc64_none_real: +setup_ppc64_real: +setup_s390: setup_s390_none setup_s390_real +setup_s390_none: setup_s390_none_real setup_s390_none_s390x setup_s390_none_s390x-tape +setup_s390_none_real: +setup_s390_none_s390x: setup_s390_none_s390x_real +setup_s390_none_s390x-tape: setup_s390_none_s390x-tape_real +setup_s390_none_s390x-tape_real:: + $(MAKE) -f debian/rules.real setup-flavour ABINAME='' ARCH='s390' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='s390x-tape' INITRAMFS='False' KCONFIG='debian/config/config debian/config/s390/config debian/config/s390/config.s390x-tape' KERNEL_ARCH='s390' LOCALVERSION='-s390x-tape' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-s390x' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain-s390-tape' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +setup_s390_none_s390x_real:: + $(MAKE) -f debian/rules.real setup-flavour ABINAME='' ARCH='s390' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='s390x' KCONFIG='debian/config/config debian/config/s390/config debian/config/s390/config.s390x' KERNEL_ARCH='s390' LOCALVERSION='-s390x' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-s390x' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +setup_s390_real: +setup_sh4: setup_sh4_none setup_sh4_real +setup_sh4_none: setup_sh4_none_real setup_sh4_none_sh7751r setup_sh4_none_sh7785lcr +setup_sh4_none_real: +setup_sh4_none_sh7751r: setup_sh4_none_sh7751r_real +setup_sh4_none_sh7751r_real:: + $(MAKE) -f debian/rules.real setup-flavour ABINAME='' ARCH='sh4' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='sh7751r' KCONFIG='debian/config/config debian/config/sh4/config debian/config/sh4/config.sh7751r' KERNEL_ARCH='sh' LOCALVERSION='-sh7751r' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-sh7751r' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +setup_sh4_none_sh7785lcr: setup_sh4_none_sh7785lcr_real +setup_sh4_none_sh7785lcr_real:: + $(MAKE) -f debian/rules.real setup-flavour ABINAME='' ARCH='sh4' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='sh7785lcr' KCONFIG='debian/config/config debian/config/sh4/config debian/config/sh4/config.sh7785lcr' KERNEL_ARCH='sh' LOCALVERSION='-sh7785lcr' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-sh7785lcr' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +setup_sh4_real: +setup_sparc: setup_sparc_none setup_sparc_real +setup_sparc64: setup_sparc64_none setup_sparc64_real +setup_sparc64_none: setup_sparc64_none_real setup_sparc64_none_sparc64 setup_sparc64_none_sparc64-smp +setup_sparc64_none_real: +setup_sparc64_none_sparc64: setup_sparc64_none_sparc64_real +setup_sparc64_none_sparc64-smp: setup_sparc64_none_sparc64-smp_real +setup_sparc64_none_sparc64-smp_real:: + $(MAKE) -f debian/rules.real setup-flavour ABINAME='' ARCH='sparc64' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='sparc64-smp' KCONFIG='debian/config/config debian/config/sparc/config debian/config/sparc/config.sparc64-smp' KERNEL_ARCH='sparc' LOCALVERSION='-sparc64-smp' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-sparc64-smp' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +setup_sparc64_none_sparc64_real:: + $(MAKE) -f debian/rules.real setup-flavour ABINAME='' ARCH='sparc64' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='sparc64' KCONFIG='debian/config/config debian/config/sparc/config debian/config/sparc/config.sparc64' KERNEL_ARCH='sparc' LOCALVERSION='-sparc64' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-sparc64' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +setup_sparc64_real: +setup_sparc_none: setup_sparc_none_real setup_sparc_none_sparc64 setup_sparc_none_sparc64-smp +setup_sparc_none_real: +setup_sparc_none_sparc64: setup_sparc_none_sparc64_real +setup_sparc_none_sparc64-smp: setup_sparc_none_sparc64-smp_real +setup_sparc_none_sparc64-smp_real:: + $(MAKE) -f debian/rules.real setup-flavour ABINAME='' ARCH='sparc' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='sparc64-smp' KCONFIG='debian/config/config debian/config/sparc/config debian/config/sparc/config.sparc64-smp' KERNEL_ARCH='sparc' LOCALVERSION='-sparc64-smp' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-sparc64-smp' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +setup_sparc_none_sparc64_real:: + $(MAKE) -f debian/rules.real setup-flavour ABINAME='' ARCH='sparc' COMPILER='gcc-4.4' FEATURESET='none' FLAVOUR='sparc64' KCONFIG='debian/config/config debian/config/sparc/config debian/config/sparc/config.sparc64' KERNEL_ARCH='sparc' LOCALVERSION='-sparc64' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-sparc64' MODULES='True' SOURCEVERSION='3.0.0~rc6-1~experimental.1' TYPE='plain' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +setup_sparc_real: +source: source_alpha source_amd64 source_armel source_armhf source_hppa source_i386 source_ia64 source_m68k source_mips source_mipsel source_powerpc source_ppc64 source_s390 source_sh4 source_sparc source_sparc64 +source_alpha: source_alpha_none source_alpha_real +source_alpha_none: source_alpha_none_alpha-generic source_alpha_none_alpha-legacy source_alpha_none_alpha-smp source_alpha_none_real +source_alpha_none_alpha-generic: source_alpha_none_alpha-generic_real +source_alpha_none_alpha-generic_real: +source_alpha_none_alpha-legacy: source_alpha_none_alpha-legacy_real +source_alpha_none_alpha-legacy_real: +source_alpha_none_alpha-smp: source_alpha_none_alpha-smp_real +source_alpha_none_alpha-smp_real: +source_alpha_none_real:: + $(MAKE) -f debian/rules.real source-featureset ABINAME='' ARCH='alpha' FEATURESET='none' KERNEL_ARCH='alpha' LOCALVERSION_HEADERS='' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +source_alpha_real:: + $(MAKE) -f debian/rules.real source-arch ABINAME='' ARCH='alpha' KERNEL_ARCH='alpha' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +source_amd64: source_amd64_none source_amd64_real +source_amd64_none: source_amd64_none_amd64 source_amd64_none_real +source_amd64_none_amd64: source_amd64_none_amd64_real +source_amd64_none_amd64_real: +source_amd64_none_real:: + $(MAKE) -f debian/rules.real source-featureset ABINAME='' ARCH='amd64' FEATURESET='none' KERNEL_ARCH='x86' LOCALVERSION_HEADERS='' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +source_amd64_real:: + $(MAKE) -f debian/rules.real source-arch ABINAME='' ARCH='amd64' KERNEL_ARCH='x86' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +source_armel: source_armel_none source_armel_real +source_armel_none: source_armel_none_iop32x source_armel_none_kirkwood source_armel_none_orion5x source_armel_none_real source_armel_none_versatile +source_armel_none_iop32x: source_armel_none_iop32x_real +source_armel_none_iop32x_real: +source_armel_none_kirkwood: source_armel_none_kirkwood_real +source_armel_none_kirkwood_real: +source_armel_none_orion5x: source_armel_none_orion5x_real +source_armel_none_orion5x_real: +source_armel_none_real:: + $(MAKE) -f debian/rules.real source-featureset ABINAME='' ARCH='armel' FEATURESET='none' KERNEL_ARCH='arm' LOCALVERSION_HEADERS='' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +source_armel_none_versatile: source_armel_none_versatile_real +source_armel_none_versatile_real: +source_armel_real:: + $(MAKE) -f debian/rules.real source-arch ABINAME='' ARCH='armel' KERNEL_ARCH='arm' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +source_armhf: source_armhf_none source_armhf_real +source_armhf_none: source_armhf_none_mx5 source_armhf_none_real +source_armhf_none_mx5: source_armhf_none_mx5_real +source_armhf_none_mx5_real: +source_armhf_none_real:: + $(MAKE) -f debian/rules.real source-featureset ABINAME='' ARCH='armhf' FEATURESET='none' KERNEL_ARCH='arm' LOCALVERSION_HEADERS='' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +source_armhf_real:: + $(MAKE) -f debian/rules.real source-arch ABINAME='' ARCH='armhf' KERNEL_ARCH='arm' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +source_hppa: source_hppa_none source_hppa_real +source_hppa_none: source_hppa_none_parisc source_hppa_none_parisc-smp source_hppa_none_parisc64 source_hppa_none_parisc64-smp source_hppa_none_real +source_hppa_none_parisc: source_hppa_none_parisc_real +source_hppa_none_parisc-smp: source_hppa_none_parisc-smp_real +source_hppa_none_parisc-smp_real: +source_hppa_none_parisc64: source_hppa_none_parisc64_real +source_hppa_none_parisc64-smp: source_hppa_none_parisc64-smp_real +source_hppa_none_parisc64-smp_real: +source_hppa_none_parisc64_real: +source_hppa_none_parisc_real: +source_hppa_none_real:: + $(MAKE) -f debian/rules.real source-featureset ABINAME='' ARCH='hppa' FEATURESET='none' KERNEL_ARCH='parisc' LOCALVERSION_HEADERS='' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +source_hppa_real:: + $(MAKE) -f debian/rules.real source-arch ABINAME='' ARCH='hppa' KERNEL_ARCH='parisc' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +source_i386: source_i386_none source_i386_real +source_i386_none: source_i386_none_486 source_i386_none_686-pae source_i386_none_amd64 source_i386_none_real +source_i386_none_486: source_i386_none_486_real +source_i386_none_486_real: +source_i386_none_686-pae: source_i386_none_686-pae_real +source_i386_none_686-pae_real: +source_i386_none_amd64: source_i386_none_amd64_real +source_i386_none_amd64_real: +source_i386_none_real:: + $(MAKE) -f debian/rules.real source-featureset ABINAME='' ARCH='i386' FEATURESET='none' KERNEL_ARCH='x86' LOCALVERSION_HEADERS='' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +source_i386_real:: + $(MAKE) -f debian/rules.real source-arch ABINAME='' ARCH='i386' KERNEL_ARCH='x86' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +source_ia64: source_ia64_none source_ia64_real +source_ia64_none: source_ia64_none_itanium source_ia64_none_mckinley source_ia64_none_real +source_ia64_none_itanium: source_ia64_none_itanium_real +source_ia64_none_itanium_real: +source_ia64_none_mckinley: source_ia64_none_mckinley_real +source_ia64_none_mckinley_real: +source_ia64_none_real:: + $(MAKE) -f debian/rules.real source-featureset ABINAME='' ARCH='ia64' FEATURESET='none' KERNEL_ARCH='ia64' LOCALVERSION_HEADERS='' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +source_ia64_real:: + $(MAKE) -f debian/rules.real source-arch ABINAME='' ARCH='ia64' KERNEL_ARCH='ia64' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +source_m68k: source_m68k_none source_m68k_real +source_m68k_none: source_m68k_none_amiga source_m68k_none_atari source_m68k_none_bvme6000 source_m68k_none_mac source_m68k_none_mvme147 source_m68k_none_mvme16x source_m68k_none_real +source_m68k_none_amiga: source_m68k_none_amiga_real +source_m68k_none_amiga_real: +source_m68k_none_atari: source_m68k_none_atari_real +source_m68k_none_atari_real: +source_m68k_none_bvme6000: source_m68k_none_bvme6000_real +source_m68k_none_bvme6000_real: +source_m68k_none_mac: source_m68k_none_mac_real +source_m68k_none_mac_real: +source_m68k_none_mvme147: source_m68k_none_mvme147_real +source_m68k_none_mvme147_real: +source_m68k_none_mvme16x: source_m68k_none_mvme16x_real +source_m68k_none_mvme16x_real: +source_m68k_none_real:: + $(MAKE) -f debian/rules.real source-featureset ABINAME='' ARCH='m68k' FEATURESET='none' KERNEL_ARCH='m68k' LOCALVERSION_HEADERS='' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +source_m68k_real:: + $(MAKE) -f debian/rules.real source-arch ABINAME='' ARCH='m68k' KERNEL_ARCH='m68k' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +source_mips: source_mips_none source_mips_real +source_mips_none: source_mips_none_4kc-malta source_mips_none_5kc-malta source_mips_none_octeon source_mips_none_r4k-ip22 source_mips_none_r5k-ip32 source_mips_none_real source_mips_none_sb1-bcm91250a source_mips_none_sb1a-bcm91480b +source_mips_none_4kc-malta: source_mips_none_4kc-malta_real +source_mips_none_4kc-malta_real: +source_mips_none_5kc-malta: source_mips_none_5kc-malta_real +source_mips_none_5kc-malta_real: +source_mips_none_octeon: source_mips_none_octeon_real +source_mips_none_octeon_real: +source_mips_none_r4k-ip22: source_mips_none_r4k-ip22_real +source_mips_none_r4k-ip22_real: +source_mips_none_r5k-ip32: source_mips_none_r5k-ip32_real +source_mips_none_r5k-ip32_real: +source_mips_none_real:: + $(MAKE) -f debian/rules.real source-featureset ABINAME='' ARCH='mips' FEATURESET='none' KERNEL_ARCH='mips' LOCALVERSION_HEADERS='' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +source_mips_none_sb1-bcm91250a: source_mips_none_sb1-bcm91250a_real +source_mips_none_sb1-bcm91250a_real: +source_mips_none_sb1a-bcm91480b: source_mips_none_sb1a-bcm91480b_real +source_mips_none_sb1a-bcm91480b_real: +source_mips_real:: + $(MAKE) -f debian/rules.real source-arch ABINAME='' ARCH='mips' KERNEL_ARCH='mips' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +source_mipsel: source_mipsel_none source_mipsel_real +source_mipsel_none: source_mipsel_none_4kc-malta source_mipsel_none_5kc-malta source_mipsel_none_loongson-2f source_mipsel_none_r5k-cobalt source_mipsel_none_real source_mipsel_none_sb1-bcm91250a source_mipsel_none_sb1a-bcm91480b +source_mipsel_none_4kc-malta: source_mipsel_none_4kc-malta_real +source_mipsel_none_4kc-malta_real: +source_mipsel_none_5kc-malta: source_mipsel_none_5kc-malta_real +source_mipsel_none_5kc-malta_real: +source_mipsel_none_loongson-2f: source_mipsel_none_loongson-2f_real +source_mipsel_none_loongson-2f_real: +source_mipsel_none_r5k-cobalt: source_mipsel_none_r5k-cobalt_real +source_mipsel_none_r5k-cobalt_real: +source_mipsel_none_real:: + $(MAKE) -f debian/rules.real source-featureset ABINAME='' ARCH='mipsel' FEATURESET='none' KERNEL_ARCH='mips' LOCALVERSION_HEADERS='' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +source_mipsel_none_sb1-bcm91250a: source_mipsel_none_sb1-bcm91250a_real +source_mipsel_none_sb1-bcm91250a_real: +source_mipsel_none_sb1a-bcm91480b: source_mipsel_none_sb1a-bcm91480b_real +source_mipsel_none_sb1a-bcm91480b_real: +source_mipsel_real:: + $(MAKE) -f debian/rules.real source-arch ABINAME='' ARCH='mipsel' KERNEL_ARCH='mips' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +source_powerpc: source_powerpc_none source_powerpc_real +source_powerpc_none: source_powerpc_none_powerpc source_powerpc_none_powerpc-smp source_powerpc_none_powerpc64 source_powerpc_none_real +source_powerpc_none_powerpc: source_powerpc_none_powerpc_real +source_powerpc_none_powerpc-smp: source_powerpc_none_powerpc-smp_real +source_powerpc_none_powerpc-smp_real: +source_powerpc_none_powerpc64: source_powerpc_none_powerpc64_real +source_powerpc_none_powerpc64_real: +source_powerpc_none_powerpc_real: +source_powerpc_none_real:: + $(MAKE) -f debian/rules.real source-featureset ABINAME='' ARCH='powerpc' FEATURESET='none' KERNEL_ARCH='powerpc' LOCALVERSION_HEADERS='' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +source_powerpc_real:: + $(MAKE) -f debian/rules.real source-arch ABINAME='' ARCH='powerpc' KERNEL_ARCH='powerpc' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +source_ppc64: source_ppc64_none source_ppc64_real +source_ppc64_none: source_ppc64_none_powerpc64 source_ppc64_none_real +source_ppc64_none_powerpc64: source_ppc64_none_powerpc64_real +source_ppc64_none_powerpc64_real: +source_ppc64_none_real:: + $(MAKE) -f debian/rules.real source-featureset ABINAME='' ARCH='ppc64' FEATURESET='none' KERNEL_ARCH='powerpc' LOCALVERSION_HEADERS='' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +source_ppc64_real:: + $(MAKE) -f debian/rules.real source-arch ABINAME='' ARCH='ppc64' KERNEL_ARCH='powerpc' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +source_s390: source_s390_none source_s390_real +source_s390_none: source_s390_none_real source_s390_none_s390x source_s390_none_s390x-tape +source_s390_none_real:: + $(MAKE) -f debian/rules.real source-featureset ABINAME='' ARCH='s390' FEATURESET='none' KERNEL_ARCH='s390' LOCALVERSION_HEADERS='' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +source_s390_none_s390x: source_s390_none_s390x_real +source_s390_none_s390x-tape: source_s390_none_s390x-tape_real +source_s390_none_s390x-tape_real: +source_s390_none_s390x_real: +source_s390_real:: + $(MAKE) -f debian/rules.real source-arch ABINAME='' ARCH='s390' KERNEL_ARCH='s390' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +source_sh4: source_sh4_none source_sh4_real +source_sh4_none: source_sh4_none_real source_sh4_none_sh7751r source_sh4_none_sh7785lcr +source_sh4_none_real:: + $(MAKE) -f debian/rules.real source-featureset ABINAME='' ARCH='sh4' FEATURESET='none' KERNEL_ARCH='sh' LOCALVERSION_HEADERS='' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +source_sh4_none_sh7751r: source_sh4_none_sh7751r_real +source_sh4_none_sh7751r_real: +source_sh4_none_sh7785lcr: source_sh4_none_sh7785lcr_real +source_sh4_none_sh7785lcr_real: +source_sh4_real:: + $(MAKE) -f debian/rules.real source-arch ABINAME='' ARCH='sh4' KERNEL_ARCH='sh' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +source_sparc: source_sparc_none source_sparc_real +source_sparc64: source_sparc64_none source_sparc64_real +source_sparc64_none: source_sparc64_none_real source_sparc64_none_sparc64 source_sparc64_none_sparc64-smp +source_sparc64_none_real:: + $(MAKE) -f debian/rules.real source-featureset ABINAME='' ARCH='sparc64' FEATURESET='none' KERNEL_ARCH='sparc' LOCALVERSION_HEADERS='' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +source_sparc64_none_sparc64: source_sparc64_none_sparc64_real +source_sparc64_none_sparc64-smp: source_sparc64_none_sparc64-smp_real +source_sparc64_none_sparc64-smp_real: +source_sparc64_none_sparc64_real: +source_sparc64_real:: + $(MAKE) -f debian/rules.real source-arch ABINAME='' ARCH='sparc64' KERNEL_ARCH='sparc' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +source_sparc_none: source_sparc_none_real source_sparc_none_sparc64 source_sparc_none_sparc64-smp +source_sparc_none_real:: + $(MAKE) -f debian/rules.real source-featureset ABINAME='' ARCH='sparc' FEATURESET='none' KERNEL_ARCH='sparc' LOCALVERSION_HEADERS='' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' +source_sparc_none_sparc64: source_sparc_none_sparc64_real +source_sparc_none_sparc64-smp: source_sparc_none_sparc64-smp_real +source_sparc_none_sparc64-smp_real: +source_sparc_none_sparc64_real: +source_sparc_real:: + $(MAKE) -f debian/rules.real source-arch ABINAME='' ARCH='sparc' KERNEL_ARCH='sparc' SOURCEVERSION='3.0.0~rc6-1~experimental.1' UPSTREAMVERSION='3.0.0-rc6' VERSION='3.0.0' --- linux-2.6-3.0.0~rc6.orig/debian/rules +++ linux-2.6-3.0.0~rc6/debian/rules @@ -0,0 +1,97 @@ +#!/usr/bin/make -f + +SHELL := sh -e +DEB_HOST_ARCH := $(shell dpkg-architecture -qDEB_HOST_ARCH) +SOURCE := $(shell dpkg-parsechangelog | sed -ne 's,^Source: *\(.*\)$$,\1,p') +VERSION := $(shell dpkg-parsechangelog | sed -ne 's,^Version: *\(.*\)$$,\1,p') +VERSION_UPSTREAM := $(shell echo "$(VERSION)" | sed -e 's,-[^-]*$$,,') +VERSION_BINNMU := $(shell echo "$(VERSION)" | sed -ne 's,.*\+b\(.*\)$$,\1,p') + +include debian/rules.defs + +stamp = [ -d $(dir $@) ] || mkdir $(dir $@); touch $@ + +.NOTPARALLEL: + +source: debian/control $(STAMPS_DIR)/source-base +$(STAMPS_DIR)/source-base: + dh_testdir + $(MAKE) -f debian/rules.gen source_$(DEB_HOST_ARCH) + @$(stamp) + +source-all: debian/control + dh_testdir + $(MAKE) -f debian/rules.gen source + +setup: debian/control $(STAMPS_DIR)/setup-base +$(STAMPS_DIR)/setup-base: $(STAMPS_DIR)/source-base + dh_testdir + $(MAKE) -f debian/rules.gen setup_$(DEB_HOST_ARCH) + @$(stamp) + +build: debian/control $(STAMPS_DIR)/build-base +$(STAMPS_DIR)/build-base: $(STAMPS_DIR)/setup-base + dh_testdir + $(MAKE) -f debian/rules.gen build_$(DEB_HOST_ARCH) + @$(stamp) + +DIR_ORIG = ../orig/$(SOURCE)-$(VERSION_UPSTREAM) +TAR_ORIG_NAME = $(SOURCE)_$(VERSION_UPSTREAM).orig.tar.gz +TAR_ORIG = $(firstword $(wildcard ../$(TAR_ORIG_NAME)) $(wildcard ../orig/$(TAR_ORIG_NAME))) + +orig: $(DIR_ORIG) + rsync --delete --exclude debian --exclude .svk --exclude .svn --link-dest=$(DIR_ORIG)/ -a $(DIR_ORIG)/ . + +$(DIR_ORIG): +ifeq ($(TAR_ORIG),) + $(error Cannot find orig tarball $(TAR_ORIG_NAME)) +else + mkdir -p ../orig + tar -C ../orig -xzf $(TAR_ORIG) +endif + +maintainerclean: + rm -f debian/config.defines.dump debian/control debian/control.md5sum debian/rules.gen debian/bin/patch.* + rm -rf $(filter-out debian .svk .svn, $(wildcard * .[^.]*)) + +clean: debian/control + dh_testdir + rm -rf $(BUILD_DIR) $(STAMPS_DIR) debian/lib/python/debian_linux/*.pyc debian/linux-headers-* debian/linux-image-* debian/linux-tools-* debian/linux-support-* debian/linux-source-* debian/linux-doc-* debian/linux-manual-* debian/linux-patch-debian-* + dh_clean + +binary-indep: $(STAMPS_DIR)/source-base + dh_testdir + $(MAKE) -f debian/rules.gen binary-indep + +binary-arch: $(STAMPS_DIR)/build-base + dh_testdir + $(MAKE) -f debian/rules.gen binary-arch_$(DEB_HOST_ARCH) + +binary: binary-indep binary-arch + +CONTROL_FILES = debian/changelog $(wildcard debian/templates/*.in) +CONTROL_FILES += debian/config/defines $(wildcard debian/config/*/defines) $(wildcard debian/config/*/*/defines) +debian/control debian/rules.gen: debian/bin/gencontrol.py $(CONTROL_FILES) +ifeq ($(wildcard debian/control.md5sum),) + $(MAKE) -f debian/rules debian/control-real +else ifeq ($(VERSION_BINNMU),) + md5sum --check debian/control.md5sum --status || \ + $(MAKE) -f debian/rules debian/control-real +else + grep -v debian/changelog debian/control.md5sum | md5sum --check - --status || \ + $(MAKE) -f debian/rules debian/control-real +endif + +debian/control-real: debian/bin/gencontrol.py $(CONTROL_FILES) + chmod +x $< + $< + md5sum $^ > debian/control.md5sum + @echo + @echo This target is made to fail intentionally, to make sure + @echo that it is NEVER run during the automated build. Please + @echo ignore the following error, the debian/control file has + @echo been generated SUCCESSFULLY. + @echo + exit 1 + +.PHONY: clean build setup binary-indep binary-arch binary --- linux-2.6-3.0.0~rc6.orig/debian/README.source +++ linux-2.6-3.0.0~rc6/debian/README.source @@ -0,0 +1,107 @@ +Updating the upstream source +============================ + +1) You can use either: + a) a git repository of the kernel source + b) a kernel tarball from kernel.org (e.g. linux-2.6.25.tar.bz2) + and, optionally, a patch (e.g. patch-2.6.26-rc3.bz2). + +2) Run ./debian/bin/genorig.py + or ./debian/bin/genorig.py [patch] + This will produce ../orig/linux-2.6_.orig.tar.gz + (e.g. linux-2.6_2.6.26~rc3.orig.tar.gz). + + (genorig.py requires the python and unifdef packages to be + installed) + +3) Unpack linux-2.6-.orig.tar.gz, cd into the new directory, + and do a 'svn export' to get the debian/ subdirectory. + Alternatively unpack using "make -f debian/rules orig". + + (the orig target of the Makefiles requires rsync) + +Applying patches to the Debian kernel tree +========================================== + +The Debian kernel packaging uses a custom patching system: + +Patches are stored below debian/patches, loosely sorted in bugfix/, +features/ and debian/. Patches are in the standard kernel patch +format. + +The order and the selection of patches which are applied during build +time are specified in the series/ subdirectory. For each revision +there may be up to one file named REVISION specifying the patches +applied for the standard revision and one file named REVISION-extra +for addon flavours. If, e.g. the patches are specified for 2.6.26-12, +the patch order file is called debian/patches/series/12 for the +standard kernel images and debian/patches/series/12-extra for the +addon flavours. + +Let's look at the actual series file for 2.6.26-12: + ++ bugfix/all/net-unix-gc-fix-soft-lockups-oom-issues.patch ++ bugfix/all/inotify-watch-removal-umount-races.patch ++ bugfix/all/atm-duplicate-listen-on-socket-corrupts-the-vcc-table.patch ++ bugfix/all/ata-pata_marvell-vs-ahci.patch ++ features/sparc/video-sunxvr500-intergraph.patch + +The patches to be applied are specified relative to debian/patches. +"+" indicates that the patch should be added, "-" can be used to +drop a patch in later patch series (e.g. if the patch turned out to +be faulty). The series files may be arbitrarily documented with +comments starting with "#". + +Let's now have a look at the series file for the addon kernel flavours +of 2.6.26-12: + ++ features/all/xen/dom0-fix-processor-throttling-when-pr-id-is-minus-1.patch featureset=xen + +The same syntax applies for specifing the patches, but an additional +argument is needed which specifies the featureset the patch applies to. + + +If you want to generate a source tree with all patches applied, run +make -f debian/rules source-all + +The resulting source can be found below debian/build. + +Kernel config files +=================== +Configuration files are constructed dynamically from a number of config +files, as listed in debian/config//defines. + +Control file +============ +The master control file debian/control must be generated before +the package is uploaded. debian/rules contains the debian/control +target, which generates the control file by invoking the +debian/bin/gencontrol.py script, which combines the templates from +the templates directory and architecture-specific defines file to +produce the debian/control file. Note that this target is intentionally +made to fail with a non-zero exit code to make sure that it is never +run during an automatic build. The following variables are substituted +into the templates: + +@version@ Upstream kernel version, for example 2.6.11. +@arch@ The Debian arch name, such as powerpc or i386. +@flavour@ The build flavour, such as 686 or k7-smp. +@class@ The CPU/architecture class; displayed in synopsis. It should + be fairly short, as the synopsis is supposed to be <80 chars. + It should be in the form "foo class", and will show up in the + description as "foo class machines". +@longclass@ The CPU/architecture class; displayed in the extended + description. The same rules apply as in @class@. If + this is unset, it will default to @class@. +@desc@ (Potentially) multi-line verbiage that's appended to + -image descriptions. +@abiname@ Current abiname, a single digit. + +Normally, the arch-specific contents should be controlled by +adjusting the corresponding defines file. + +TODO: +- Patches applied to the upstream source +- How to define a flavour +- More detail on generation of debian/control and configs + --- linux-2.6-3.0.0~rc6.orig/debian/control +++ linux-2.6-3.0.0~rc6/debian/control @@ -0,0 +1,1236 @@ +Source: linux-2.6 +Section: kernel +Priority: optional +Maintainer: Debian Kernel Team +Uploaders: Bastian Blank , Frederik Schüler , maximilian attems , Ben Hutchings +Standards-Version: 3.9.2 +Build-Depends: debhelper (>> 7), cpio, module-init-tools, python, lzma [armel], libelf-dev, libdw-dev, binutils-dev, asciidoc, xmlto, libperl-dev, python-dev, libnewt-dev, python-support, gcc-4.4 [alpha amd64 armel armhf hppa i386 ia64 m68k mips mipsel powerpc ppc64 s390 sh4 sparc sparc64], binutils-hppa64 [hppa], gcc-4.4-hppa64 [hppa] +Build-Depends-Indep: bzip2 +Vcs-Svn: svn://svn.debian.org/svn/kernel/dists/sid/linux-2.6/ +Vcs-Browser: http://svn.debian.org/wsvn/kernel/dists/sid/linux-2.6/?op=log + +Package: linux-tools-3.0.0 +Architecture: alpha amd64 armel armhf hppa i386 powerpc ppc64 s390 sh4 sparc sparc64 +Depends: ${shlibs:Depends}, ${misc:Depends}, ${perl:Depends}, ${python:Depends} +Recommends: linux-base (>= 2.6.32-16) +Suggests: linux-doc-3.0.0 +Description: Performance analysis tools for Linux 3.0.0-rc6 + This package contains the 'perf' performance analysis tools for Linux + kernel version 3.0.0-rc6. + . + The linux-base package contains a 'perf' command which will invoke the + appropriate version for the running kernel. + +Package: linux-source-3.0.0 +Architecture: all +Section: kernel +Provides: linux-source +Depends: binutils, bzip2, ${misc:Depends} +Recommends: libc6-dev | libc-dev, gcc, make +Suggests: libncurses-dev | ncurses-dev, kernel-package, libqt3-mt-dev +Description: Linux kernel source for version 3.0.0 with Debian patches + This package provides source code for the Linux kernel version 3.0.0. This + source closely tracks official Linux kernel releases. Debian's + modifications to that source consist of security fixes, bug fixes, and + features that have already been (or are believed to be) accepted by the + upstream maintainers. + +Package: linux-doc-3.0.0 +Architecture: all +Section: doc +Depends: ${misc:Depends} +Description: Linux kernel specific documentation for version 3.0.0 + This package provides the various README files and HTML documentation for + the Linux kernel version 3.0.0. Plenty of information, including the + descriptions of various kernel subsystems, filesystems, driver-specific + notes and the like. Consult the file + /usr/share/doc/linux-doc-3.0.0/Documentation/00-INDEX for the detailed + description of the contents. + +Package: linux-manual-3.0.0 +Architecture: all +Section: doc +Provides: linux-manual +Depends: ${misc:Depends} +Replaces: linux-manual +Conflicts: linux-manual +Description: Linux kernel API manual pages for version 3.0.0 + This package provides the Kernel Hacker's Guide in the form of manual + pages, describing the kernel API functions. They are installed into + section 9 of the manual. + . + As the files containing manual pages for different kernel versions are + installed in the same location, only one linux-manual package may be + installed at a time. The linux-doc package containing the documentation + in other formats is free from such restriction. + +Package: linux-patch-debian-3.0.0 +Architecture: all +Depends: bzip2, linux-support-3.0.0-rc6, python, ${misc:Depends} +Suggests: linux-source-3.0.0 +Description: Debian patches to version 3.0.0 of the Linux kernel + This package includes the patches used to produce the prepackaged + linux-source-3.0.0 package, as well as architecture-specific patches. + . + Note that these patches do NOT apply against a pristine Linux 3.0.0 kernel + but only against the kernel tarball linux-2.6_3.0.0~rc6.orig.tar.gz from + the Debian archive. + +Package: linux-support-3.0.0-rc6 +Architecture: all +Section: devel +Depends: ${python:Depends}, ${misc:Depends} +Description: Support files for Linux 3.0.0-rc6 + This package provides support files for the Linux kernel build, e.g. + scripts to handle ABI information and for generation of build system meta + data. + +Package: linux-libc-dev +Architecture: alpha amd64 armel armhf hppa i386 ia64 m68k mips mipsel powerpc ppc64 s390 sh4 sparc sparc64 +Section: devel +Provides: linux-kernel-headers +Depends: ${misc:Depends} +Replaces: linux-kernel-headers +Conflicts: linux-kernel-headers +Description: Linux support headers for userspace development + This package provides userspaces headers from the Linux kernel. These + headers are used by the installed headers for GNU glibc and other system + libraries. + +Package: linux-headers-3.0.0-rc6-all +Architecture: alpha amd64 armel armhf hppa i386 ia64 m68k mips mipsel powerpc ppc64 s390 sh4 sparc sparc64 +Depends: linux-headers-3.0.0-rc6-all-${kernel:Arch} (= ${binary:Version}), ${misc:Depends} +Description: All header files for Linux 3.0.0 (meta-package) + This package depends against all architecture-specific kernel header files + for Linux kernel version 3.0.0-rc6, generally used for building + out-of-tree kernel modules. + +Package: linux-headers-3.0.0-rc6-all-alpha +Architecture: alpha +Depends: ${misc:Depends}, linux-headers-3.0.0-rc6-alpha-generic (= ${binary:Version}), linux-headers-3.0.0-rc6-alpha-smp (= ${binary:Version}), linux-headers-3.0.0-rc6-alpha-legacy (= ${binary:Version}) +Description: All header files for Linux 3.0.0 (meta-package) + This package depends against all architecture-specific kernel header files + for Linux kernel version 3.0.0-rc6, generally used for building + out-of-tree kernel modules. + +Package: linux-headers-3.0.0-rc6-common +Architecture: alpha amd64 armel armhf hppa i386 ia64 m68k mips mipsel powerpc ppc64 s390 sh4 sparc sparc64 +Depends: ${misc:Depends} +Description: Common header files for Linux 3.0.0-rc6 + This package provides the architecture-specific common kernel header files + for Linux kernel version 3.0.0-rc6, generally used for building + out-of-tree kernel modules. To obtain a complete set of headers you also + need to install the linux-headers-3.0.0-rc6-(flavour) package, matching + the flavour of the kernel you intend the build for. + +Package: linux-image-3.0.0-rc6-alpha-generic +Architecture: alpha +Provides: linux-image, linux-modules-3.0.0-rc6-alpha-generic +Pre-Depends: debconf | debconf-2.0 +Depends: module-init-tools, linux-base (>= 3~), ${shlibs:Depends}, ${misc:Depends}, initramfs-tools (>= 0.99) [alpha] | linux-initramfs-tool [alpha] +Recommends: firmware-linux-free (>= 3~) +Suggests: linux-doc-3.0.0, aboot [alpha], fdutils [alpha] +Breaks: initramfs-tools (<< 0.99) +Description: Linux 3.0.0-rc6 for Alpha + The Linux kernel 3.0.0-rc6 and modules for use on DEC Alpha systems with + extended kernel start address (Wildfire, Titan, Marvel). + +Package: linux-headers-3.0.0-rc6-alpha-generic +Architecture: alpha +Provides: linux-headers +Depends: linux-headers-3.0.0-rc6-common (= ${binary:Version}), linux-kbuild-3.0.0, ${misc:Depends}, gcc-4.4 +Description: Header files for Linux 3.0.0-rc6-alpha-generic + This package provides the architecture-specific kernel header files for + Linux kernel 3.0.0-rc6-alpha-generic, generally used for building + out-of-tree kernel modules. These files are going to be installed into + /usr/src/linux-headers-3.0.0-rc6-alpha-generic, and can be used for + building modules that load into the kernel provided by the + linux-image-3.0.0-rc6-alpha-generic package. + +Package: linux-image-3.0.0-rc6-alpha-smp +Architecture: alpha +Provides: linux-image, linux-modules-3.0.0-rc6-alpha-smp +Pre-Depends: debconf | debconf-2.0 +Depends: module-init-tools, linux-base (>= 3~), ${shlibs:Depends}, ${misc:Depends}, initramfs-tools (>= 0.99) [alpha] | linux-initramfs-tool [alpha] +Recommends: firmware-linux-free (>= 3~) +Suggests: linux-doc-3.0.0, aboot [alpha], fdutils [alpha] +Breaks: initramfs-tools (<< 0.99) +Description: Linux 3.0.0-rc6 for Alpha SMP + The Linux kernel 3.0.0-rc6 and modules for use on DEC Alpha SMP systems + with extended kernel start address (Wildfire, Titan, Marvel). + +Package: linux-headers-3.0.0-rc6-alpha-smp +Architecture: alpha +Provides: linux-headers +Depends: linux-headers-3.0.0-rc6-common (= ${binary:Version}), linux-kbuild-3.0.0, ${misc:Depends}, gcc-4.4 +Description: Header files for Linux 3.0.0-rc6-alpha-smp + This package provides the architecture-specific kernel header files for + Linux kernel 3.0.0-rc6-alpha-smp, generally used for building out-of-tree + kernel modules. These files are going to be installed into + /usr/src/linux-headers-3.0.0-rc6-alpha-smp, and can be used for building + modules that load into the kernel provided by the + linux-image-3.0.0-rc6-alpha-smp package. + +Package: linux-image-3.0.0-rc6-alpha-legacy +Architecture: alpha +Provides: linux-image, linux-modules-3.0.0-rc6-alpha-legacy +Pre-Depends: debconf | debconf-2.0 +Depends: module-init-tools, linux-base (>= 3~), ${shlibs:Depends}, ${misc:Depends}, initramfs-tools (>= 0.99) [alpha] | linux-initramfs-tool [alpha] +Recommends: firmware-linux-free (>= 3~) +Suggests: linux-doc-3.0.0, aboot [alpha], fdutils [alpha] +Breaks: initramfs-tools (<< 0.99) +Description: Linux 3.0.0-rc6 for Alpha Legacy + The Linux kernel 3.0.0-rc6 and modules for use on DEC Alpha systems with + legacy kernel start address. + +Package: linux-headers-3.0.0-rc6-alpha-legacy +Architecture: alpha +Provides: linux-headers +Depends: linux-headers-3.0.0-rc6-common (= ${binary:Version}), linux-kbuild-3.0.0, ${misc:Depends}, gcc-4.4 +Description: Header files for Linux 3.0.0-rc6-alpha-legacy + This package provides the architecture-specific kernel header files for + Linux kernel 3.0.0-rc6-alpha-legacy, generally used for building + out-of-tree kernel modules. These files are going to be installed into + /usr/src/linux-headers-3.0.0-rc6-alpha-legacy, and can be used for + building modules that load into the kernel provided by the + linux-image-3.0.0-rc6-alpha-legacy package. + +Package: linux-headers-3.0.0-rc6-all-amd64 +Architecture: amd64 +Depends: ${misc:Depends}, linux-headers-3.0.0-rc6-amd64 (= ${binary:Version}) +Description: All header files for Linux 3.0.0 (meta-package) + This package depends against all architecture-specific kernel header files + for Linux kernel version 3.0.0-rc6, generally used for building + out-of-tree kernel modules. + +Package: linux-image-3.0.0-rc6-amd64 +Architecture: amd64 i386 +Provides: linux-image, linux-modules-3.0.0-rc6-amd64 +Pre-Depends: debconf | debconf-2.0 +Depends: module-init-tools, linux-base (>= 3~), ${shlibs:Depends}, ${misc:Depends}, initramfs-tools (>= 0.99) [amd64 i386] | linux-initramfs-tool [amd64 i386] +Recommends: firmware-linux-free (>= 3~), libc6-i686 [i386] +Suggests: linux-doc-3.0.0, grub-pc [amd64 i386] | extlinux [amd64 i386] | lilo (>= 22.8-8.2~) [amd64 i386] +Breaks: initramfs-tools (<< 0.99), lilo (<< 22.8-8.2~) +Description: Linux 3.0.0-rc6 for 64-bit PCs + The Linux kernel 3.0.0-rc6 and modules for use on PCs with AMD64 or Intel + 64 processors. + . + This kernel also runs on a Xen hypervisor. It supports both privileged + (dom0) and unprivileged (domU) operation. + +Package: linux-headers-3.0.0-rc6-amd64 +Architecture: amd64 i386 +Provides: linux-headers +Depends: linux-headers-3.0.0-rc6-common (= ${binary:Version}), linux-kbuild-3.0.0, ${misc:Depends}, gcc-4.4 +Description: Header files for Linux 3.0.0-rc6-amd64 + This package provides the architecture-specific kernel header files for + Linux kernel 3.0.0-rc6-amd64, generally used for building out-of-tree + kernel modules. These files are going to be installed into + /usr/src/linux-headers-3.0.0-rc6-amd64, and can be used for building + modules that load into the kernel provided by the + linux-image-3.0.0-rc6-amd64 package. + +Package: linux-image-3.0.0-rc6-amd64-dbg +Architecture: amd64 +Section: debug +Priority: extra +Depends: linux-image-3.0.0-rc6-amd64, ${misc:Depends} +Description: Debugging infos for Linux 3.0.0-rc6-amd64 + This package provides the binary debug image and pre-built debug loadable + modules for Linux kernel 3.0.0-rc6 on PCs with AMD64 or Intel 64 + processors machines. + +Package: xen-linux-system-3.0.0-rc6-amd64 +Architecture: amd64 i386 +Depends: linux-image-3.0.0-rc6-amd64 (= ${binary:Version}), ${misc:Depends}, xen-hypervisor-amd64 +Description: Xen system with Linux 3.0.0-rc6 on 64-bit PCs (meta-package) + This package depends on the binary Linux image and hypervisors. + +Package: linux-headers-3.0.0-rc6-all-armel +Architecture: armel +Depends: ${misc:Depends}, linux-headers-3.0.0-rc6-iop32x (= ${binary:Version}), linux-headers-3.0.0-rc6-kirkwood (= ${binary:Version}), linux-headers-3.0.0-rc6-orion5x (= ${binary:Version}), linux-headers-3.0.0-rc6-versatile (= ${binary:Version}) +Description: All header files for Linux 3.0.0 (meta-package) + This package depends against all architecture-specific kernel header files + for Linux kernel version 3.0.0-rc6, generally used for building + out-of-tree kernel modules. + +Package: linux-image-3.0.0-rc6-iop32x +Architecture: armel +Provides: linux-image, linux-modules-3.0.0-rc6-iop32x +Pre-Depends: debconf | debconf-2.0 +Depends: module-init-tools, linux-base (>= 3~), ${shlibs:Depends}, ${misc:Depends}, initramfs-tools (>= 0.99) [armel] | linux-initramfs-tool [armel] +Recommends: firmware-linux-free (>= 3~) +Suggests: linux-doc-3.0.0, fdutils [armel] +Breaks: initramfs-tools (<< 0.99) +Description: Linux 3.0.0-rc6 for IOP32x + The Linux kernel 3.0.0-rc6 and modules for use on IOP32x based systems + (Thecus N2100, etc). + +Package: linux-headers-3.0.0-rc6-iop32x +Architecture: armel +Provides: linux-headers +Depends: linux-headers-3.0.0-rc6-common (= ${binary:Version}), linux-kbuild-3.0.0, ${misc:Depends}, gcc-4.4 +Description: Header files for Linux 3.0.0-rc6-iop32x + This package provides the architecture-specific kernel header files for + Linux kernel 3.0.0-rc6-iop32x, generally used for building out-of-tree + kernel modules. These files are going to be installed into + /usr/src/linux-headers-3.0.0-rc6-iop32x, and can be used for building + modules that load into the kernel provided by the + linux-image-3.0.0-rc6-iop32x package. + +Package: linux-image-3.0.0-rc6-kirkwood +Architecture: armel +Provides: linux-image, linux-modules-3.0.0-rc6-kirkwood +Pre-Depends: debconf | debconf-2.0 +Depends: module-init-tools, linux-base (>= 3~), ${shlibs:Depends}, ${misc:Depends}, initramfs-tools (>= 0.99) [armel] | linux-initramfs-tool [armel] +Recommends: firmware-linux-free (>= 3~), uboot-mkimage [armel] +Suggests: linux-doc-3.0.0, fdutils [armel] +Breaks: initramfs-tools (<< 0.99) +Description: Linux 3.0.0-rc6 for Marvell Kirkwood + The Linux kernel 3.0.0-rc6 and modules for use on Marvell Kirkwood based + systems (SheevaPlug, QNAP TS-119/TS-219, etc). + +Package: linux-headers-3.0.0-rc6-kirkwood +Architecture: armel +Provides: linux-headers +Depends: linux-headers-3.0.0-rc6-common (= ${binary:Version}), linux-kbuild-3.0.0, ${misc:Depends}, gcc-4.4 +Description: Header files for Linux 3.0.0-rc6-kirkwood + This package provides the architecture-specific kernel header files for + Linux kernel 3.0.0-rc6-kirkwood, generally used for building out-of-tree + kernel modules. These files are going to be installed into + /usr/src/linux-headers-3.0.0-rc6-kirkwood, and can be used for building + modules that load into the kernel provided by the + linux-image-3.0.0-rc6-kirkwood package. + +Package: linux-image-3.0.0-rc6-orion5x +Architecture: armel +Provides: linux-image, linux-modules-3.0.0-rc6-orion5x +Pre-Depends: debconf | debconf-2.0 +Depends: module-init-tools, linux-base (>= 3~), ${shlibs:Depends}, ${misc:Depends}, initramfs-tools (>= 0.99) [armel] | linux-initramfs-tool [armel] +Recommends: firmware-linux-free (>= 3~), uboot-mkimage [armel] +Suggests: linux-doc-3.0.0, fdutils [armel] +Breaks: initramfs-tools (<< 0.99) +Description: Linux 3.0.0-rc6 for Marvell Orion + The Linux kernel 3.0.0-rc6 and modules for use on Marvell Orion 5181, 5182 + and 5281 based systems (QNAP TS-109/TS-209, etc). + +Package: linux-headers-3.0.0-rc6-orion5x +Architecture: armel +Provides: linux-headers +Depends: linux-headers-3.0.0-rc6-common (= ${binary:Version}), linux-kbuild-3.0.0, ${misc:Depends}, gcc-4.4 +Description: Header files for Linux 3.0.0-rc6-orion5x + This package provides the architecture-specific kernel header files for + Linux kernel 3.0.0-rc6-orion5x, generally used for building out-of-tree + kernel modules. These files are going to be installed into + /usr/src/linux-headers-3.0.0-rc6-orion5x, and can be used for building + modules that load into the kernel provided by the + linux-image-3.0.0-rc6-orion5x package. + +Package: linux-image-3.0.0-rc6-versatile +Architecture: armel +Provides: linux-image, linux-modules-3.0.0-rc6-versatile +Pre-Depends: debconf | debconf-2.0 +Depends: module-init-tools, linux-base (>= 3~), ${shlibs:Depends}, ${misc:Depends}, initramfs-tools (>= 0.99) [armel] | linux-initramfs-tool [armel] +Recommends: firmware-linux-free (>= 3~) +Suggests: linux-doc-3.0.0, fdutils [armel] +Breaks: initramfs-tools (<< 0.99) +Description: Linux 3.0.0-rc6 for Versatile + The Linux kernel 3.0.0-rc6 and modules for use on Versatile systems (PB, + AB, Qemu). + +Package: linux-headers-3.0.0-rc6-versatile +Architecture: armel +Provides: linux-headers +Depends: linux-headers-3.0.0-rc6-common (= ${binary:Version}), linux-kbuild-3.0.0, ${misc:Depends}, gcc-4.4 +Description: Header files for Linux 3.0.0-rc6-versatile + This package provides the architecture-specific kernel header files for + Linux kernel 3.0.0-rc6-versatile, generally used for building out-of-tree + kernel modules. These files are going to be installed into + /usr/src/linux-headers-3.0.0-rc6-versatile, and can be used for building + modules that load into the kernel provided by the + linux-image-3.0.0-rc6-versatile package. + +Package: linux-headers-3.0.0-rc6-all-armhf +Architecture: armhf +Depends: ${misc:Depends}, linux-headers-3.0.0-rc6-mx5 (= ${binary:Version}) +Description: All header files for Linux 3.0.0 (meta-package) + This package depends against all architecture-specific kernel header files + for Linux kernel version 3.0.0-rc6, generally used for building + out-of-tree kernel modules. + +Package: linux-image-3.0.0-rc6-mx5 +Architecture: armhf +Provides: linux-image, linux-modules-3.0.0-rc6-mx5 +Pre-Depends: debconf | debconf-2.0 +Depends: module-init-tools, linux-base (>= 3~), ${shlibs:Depends}, ${misc:Depends}, initramfs-tools (>= 0.99) [armhf] | linux-initramfs-tool [armhf] +Recommends: firmware-linux-free (>= 3~) +Suggests: linux-doc-3.0.0, fdutils [armhf] +Breaks: initramfs-tools (<< 0.99) +Description: Linux 3.0.0-rc6 for Freescale MXC/iMX-based + The Linux kernel 3.0.0-rc6 and modules for use on Support for Freescale + MXC/iMX-based family of processors. + +Package: linux-headers-3.0.0-rc6-mx5 +Architecture: armhf +Provides: linux-headers +Depends: linux-headers-3.0.0-rc6-common (= ${binary:Version}), linux-kbuild-3.0.0, ${misc:Depends}, gcc-4.4 +Description: Header files for Linux 3.0.0-rc6-mx5 + This package provides the architecture-specific kernel header files for + Linux kernel 3.0.0-rc6-mx5, generally used for building out-of-tree kernel + modules. These files are going to be installed into + /usr/src/linux-headers-3.0.0-rc6-mx5, and can be used for building modules + that load into the kernel provided by the linux-image-3.0.0-rc6-mx5 + package. + +Package: linux-headers-3.0.0-rc6-all-hppa +Architecture: hppa +Depends: ${misc:Depends}, linux-headers-3.0.0-rc6-parisc (= ${binary:Version}), linux-headers-3.0.0-rc6-parisc-smp (= ${binary:Version}), linux-headers-3.0.0-rc6-parisc64 (= ${binary:Version}), linux-headers-3.0.0-rc6-parisc64-smp (= ${binary:Version}) +Description: All header files for Linux 3.0.0 (meta-package) + This package depends against all architecture-specific kernel header files + for Linux kernel version 3.0.0-rc6, generally used for building + out-of-tree kernel modules. + +Package: linux-image-3.0.0-rc6-parisc +Architecture: hppa +Provides: linux-image, linux-modules-3.0.0-rc6-parisc +Pre-Depends: debconf | debconf-2.0 +Depends: module-init-tools, linux-base (>= 3~), ${shlibs:Depends}, ${misc:Depends}, initramfs-tools (>= 0.99) [hppa] | linux-initramfs-tool [hppa] +Recommends: firmware-linux-free (>= 3~) +Suggests: linux-doc-3.0.0, palo [hppa] +Breaks: initramfs-tools (<< 0.99) +Description: Linux 3.0.0-rc6 for 32-bit PA-RISC + The Linux kernel 3.0.0-rc6 and modules for use on 32-bit PA-RISC. + +Package: linux-headers-3.0.0-rc6-parisc +Architecture: hppa +Provides: linux-headers +Depends: linux-headers-3.0.0-rc6-common (= ${binary:Version}), linux-kbuild-3.0.0, ${misc:Depends}, gcc-4.4, binutils-hppa64, gcc-4.4-hppa64 +Description: Header files for Linux 3.0.0-rc6-parisc + This package provides the architecture-specific kernel header files for + Linux kernel 3.0.0-rc6-parisc, generally used for building out-of-tree + kernel modules. These files are going to be installed into + /usr/src/linux-headers-3.0.0-rc6-parisc, and can be used for building + modules that load into the kernel provided by the + linux-image-3.0.0-rc6-parisc package. + +Package: linux-image-3.0.0-rc6-parisc-smp +Architecture: hppa +Provides: linux-image, linux-modules-3.0.0-rc6-parisc-smp +Pre-Depends: debconf | debconf-2.0 +Depends: module-init-tools, linux-base (>= 3~), ${shlibs:Depends}, ${misc:Depends}, initramfs-tools (>= 0.99) [hppa] | linux-initramfs-tool [hppa] +Recommends: firmware-linux-free (>= 3~) +Suggests: linux-doc-3.0.0, palo [hppa] +Breaks: initramfs-tools (<< 0.99) +Description: Linux 3.0.0-rc6 for multiprocessor 32-bit PA-RISC + The Linux kernel 3.0.0-rc6 and modules for use on multiprocessor 32-bit + PA-RISC. + +Package: linux-headers-3.0.0-rc6-parisc-smp +Architecture: hppa +Provides: linux-headers +Depends: linux-headers-3.0.0-rc6-common (= ${binary:Version}), linux-kbuild-3.0.0, ${misc:Depends}, gcc-4.4, binutils-hppa64, gcc-4.4-hppa64 +Description: Header files for Linux 3.0.0-rc6-parisc-smp + This package provides the architecture-specific kernel header files for + Linux kernel 3.0.0-rc6-parisc-smp, generally used for building out-of-tree + kernel modules. These files are going to be installed into + /usr/src/linux-headers-3.0.0-rc6-parisc-smp, and can be used for building + modules that load into the kernel provided by the + linux-image-3.0.0-rc6-parisc-smp package. + +Package: linux-image-3.0.0-rc6-parisc64 +Architecture: hppa +Provides: linux-image, linux-modules-3.0.0-rc6-parisc64 +Pre-Depends: debconf | debconf-2.0 +Depends: module-init-tools, linux-base (>= 3~), ${shlibs:Depends}, ${misc:Depends}, initramfs-tools (>= 0.99) [hppa] | linux-initramfs-tool [hppa] +Recommends: firmware-linux-free (>= 3~) +Suggests: linux-doc-3.0.0, palo [hppa] +Breaks: initramfs-tools (<< 0.99) +Description: Linux 3.0.0-rc6 for 64-bit PA-RISC + The Linux kernel 3.0.0-rc6 and modules for use on 64-bit PA-RISC. + +Package: linux-headers-3.0.0-rc6-parisc64 +Architecture: hppa +Provides: linux-headers +Depends: linux-headers-3.0.0-rc6-common (= ${binary:Version}), linux-kbuild-3.0.0, ${misc:Depends}, gcc-4.4, binutils-hppa64, gcc-4.4-hppa64 +Description: Header files for Linux 3.0.0-rc6-parisc64 + This package provides the architecture-specific kernel header files for + Linux kernel 3.0.0-rc6-parisc64, generally used for building out-of-tree + kernel modules. These files are going to be installed into + /usr/src/linux-headers-3.0.0-rc6-parisc64, and can be used for building + modules that load into the kernel provided by the + linux-image-3.0.0-rc6-parisc64 package. + +Package: linux-image-3.0.0-rc6-parisc64-smp +Architecture: hppa +Provides: linux-image, linux-modules-3.0.0-rc6-parisc64-smp +Pre-Depends: debconf | debconf-2.0 +Depends: module-init-tools, linux-base (>= 3~), ${shlibs:Depends}, ${misc:Depends}, initramfs-tools (>= 0.99) [hppa] | linux-initramfs-tool [hppa] +Recommends: firmware-linux-free (>= 3~) +Suggests: linux-doc-3.0.0, palo [hppa] +Breaks: initramfs-tools (<< 0.99) +Description: Linux 3.0.0-rc6 for multiprocessor 64-bit PA-RISC + The Linux kernel 3.0.0-rc6 and modules for use on multiprocessor 64-bit + PA-RISC. + +Package: linux-headers-3.0.0-rc6-parisc64-smp +Architecture: hppa +Provides: linux-headers +Depends: linux-headers-3.0.0-rc6-common (= ${binary:Version}), linux-kbuild-3.0.0, ${misc:Depends}, gcc-4.4, binutils-hppa64, gcc-4.4-hppa64 +Description: Header files for Linux 3.0.0-rc6-parisc64-smp + This package provides the architecture-specific kernel header files for + Linux kernel 3.0.0-rc6-parisc64-smp, generally used for building + out-of-tree kernel modules. These files are going to be installed into + /usr/src/linux-headers-3.0.0-rc6-parisc64-smp, and can be used for + building modules that load into the kernel provided by the + linux-image-3.0.0-rc6-parisc64-smp package. + +Package: linux-headers-3.0.0-rc6-all-i386 +Architecture: i386 +Depends: ${misc:Depends}, linux-headers-3.0.0-rc6-486 (= ${binary:Version}), linux-headers-3.0.0-rc6-686-pae (= ${binary:Version}), linux-headers-3.0.0-rc6-amd64 (= ${binary:Version}) +Description: All header files for Linux 3.0.0 (meta-package) + This package depends against all architecture-specific kernel header files + for Linux kernel version 3.0.0-rc6, generally used for building + out-of-tree kernel modules. + +Package: linux-image-3.0.0-rc6-486 +Architecture: i386 +Provides: linux-image, linux-modules-3.0.0-rc6-486 +Pre-Depends: debconf | debconf-2.0 +Depends: module-init-tools, linux-base (>= 3~), ${shlibs:Depends}, ${misc:Depends}, initramfs-tools (>= 0.99) [i386] | linux-initramfs-tool [i386] +Recommends: firmware-linux-free (>= 3~) +Suggests: linux-doc-3.0.0, grub-pc [i386] | extlinux [i386] | lilo (>= 22.8-8.2~) [i386] +Breaks: initramfs-tools (<< 0.99), lilo (<< 22.8-8.2~) +Description: Linux 3.0.0-rc6 for older PCs + The Linux kernel 3.0.0-rc6 and modules for use on PCs with a single + processor not supporting PAE. + . + This kernel is not suitable for SMP (multi-processor, multi-core or + hyper-threaded) systems. + +Package: linux-headers-3.0.0-rc6-486 +Architecture: i386 +Provides: linux-headers +Depends: linux-headers-3.0.0-rc6-common (= ${binary:Version}), linux-kbuild-3.0.0, ${misc:Depends}, gcc-4.4 +Description: Header files for Linux 3.0.0-rc6-486 + This package provides the architecture-specific kernel header files for + Linux kernel 3.0.0-rc6-486, generally used for building out-of-tree kernel + modules. These files are going to be installed into + /usr/src/linux-headers-3.0.0-rc6-486, and can be used for building modules + that load into the kernel provided by the linux-image-3.0.0-rc6-486 + package. + +Package: linux-image-3.0.0-rc6-686-pae +Architecture: i386 +Provides: linux-image, linux-modules-3.0.0-rc6-686-pae +Pre-Depends: debconf | debconf-2.0 +Depends: module-init-tools, linux-base (>= 3~), ${shlibs:Depends}, ${misc:Depends}, initramfs-tools (>= 0.99) [i386] | linux-initramfs-tool [i386] +Recommends: firmware-linux-free (>= 3~), libc6-i686 [i386] +Suggests: linux-doc-3.0.0, grub-pc [i386] | extlinux [i386] | lilo (>= 22.8-8.2~) [i386] +Breaks: initramfs-tools (<< 0.99), lilo (<< 22.8-8.2~) +Description: Linux 3.0.0-rc6 for modern PCs + The Linux kernel 3.0.0-rc6 and modules for use on PCs with one or more + processors supporting PAE. + . + This kernel requires PAE (Physical Address Extension). This feature is + supported by the Intel Pentium Pro/II/III/4/4M/D, Xeon, Celeron, Core and + Atom; AMD Geode NX, Athlon (K7), Duron, Opteron, Sempron, Turion or + Phenom; Transmeta Efficeon; and VIA C7. + . + This kernel also runs on a Xen hypervisor. It supports both privileged + (dom0) and unprivileged (domU) operation. + +Package: linux-headers-3.0.0-rc6-686-pae +Architecture: i386 +Provides: linux-headers +Depends: linux-headers-3.0.0-rc6-common (= ${binary:Version}), linux-kbuild-3.0.0, ${misc:Depends}, gcc-4.4 +Description: Header files for Linux 3.0.0-rc6-686-pae + This package provides the architecture-specific kernel header files for + Linux kernel 3.0.0-rc6-686-pae, generally used for building out-of-tree + kernel modules. These files are going to be installed into + /usr/src/linux-headers-3.0.0-rc6-686-pae, and can be used for building + modules that load into the kernel provided by the + linux-image-3.0.0-rc6-686-pae package. + +Package: linux-image-3.0.0-rc6-686-pae-dbg +Architecture: i386 +Section: debug +Priority: extra +Depends: linux-image-3.0.0-rc6-686-pae, ${misc:Depends} +Description: Debugging infos for Linux 3.0.0-rc6-686-pae + This package provides the binary debug image and pre-built debug loadable + modules for Linux kernel 3.0.0-rc6 on PCs with one or more processors + supporting PAE machines. + +Package: xen-linux-system-3.0.0-rc6-686-pae +Architecture: i386 +Depends: linux-image-3.0.0-rc6-686-pae (= ${binary:Version}), ${misc:Depends}, xen-hypervisor-i386 | xen-hypervisor-amd64 +Description: Xen system with Linux 3.0.0-rc6 on modern PCs (meta-package) + This package depends on the binary Linux image and hypervisors. + +Package: linux-headers-3.0.0-rc6-all-ia64 +Architecture: ia64 +Depends: ${misc:Depends}, linux-headers-3.0.0-rc6-itanium (= ${binary:Version}), linux-headers-3.0.0-rc6-mckinley (= ${binary:Version}) +Description: All header files for Linux 3.0.0 (meta-package) + This package depends against all architecture-specific kernel header files + for Linux kernel version 3.0.0-rc6, generally used for building + out-of-tree kernel modules. + +Package: linux-image-3.0.0-rc6-itanium +Architecture: ia64 +Provides: linux-image, linux-modules-3.0.0-rc6-itanium +Pre-Depends: debconf | debconf-2.0 +Depends: module-init-tools, linux-base (>= 3~), ${shlibs:Depends}, ${misc:Depends}, initramfs-tools (>= 0.99) [ia64] | linux-initramfs-tool [ia64] +Recommends: firmware-linux-free (>= 3~) +Suggests: linux-doc-3.0.0, fdutils [ia64], elilo (>= 3.12-3.1~) [ia64] +Breaks: initramfs-tools (<< 0.99), elilo (<< 3.12-3.1~) +Description: Linux 3.0.0-rc6 for Itanium + The Linux kernel 3.0.0-rc6 and modules for use on Itanium. + +Package: linux-headers-3.0.0-rc6-itanium +Architecture: ia64 +Provides: linux-headers +Depends: linux-headers-3.0.0-rc6-common (= ${binary:Version}), linux-kbuild-3.0.0, ${misc:Depends}, gcc-4.4 +Description: Header files for Linux 3.0.0-rc6-itanium + This package provides the architecture-specific kernel header files for + Linux kernel 3.0.0-rc6-itanium, generally used for building out-of-tree + kernel modules. These files are going to be installed into + /usr/src/linux-headers-3.0.0-rc6-itanium, and can be used for building + modules that load into the kernel provided by the + linux-image-3.0.0-rc6-itanium package. + +Package: linux-image-3.0.0-rc6-mckinley +Architecture: ia64 +Provides: linux-image, linux-modules-3.0.0-rc6-mckinley +Pre-Depends: debconf | debconf-2.0 +Depends: module-init-tools, linux-base (>= 3~), ${shlibs:Depends}, ${misc:Depends}, initramfs-tools (>= 0.99) [ia64] | linux-initramfs-tool [ia64] +Recommends: firmware-linux-free (>= 3~) +Suggests: linux-doc-3.0.0, fdutils [ia64], elilo (>= 3.12-3.1~) [ia64] +Breaks: initramfs-tools (<< 0.99), elilo (<< 3.12-3.1~) +Description: Linux 3.0.0-rc6 for Itanium II + The Linux kernel 3.0.0-rc6 and modules for use on Itanium II. + +Package: linux-headers-3.0.0-rc6-mckinley +Architecture: ia64 +Provides: linux-headers +Depends: linux-headers-3.0.0-rc6-common (= ${binary:Version}), linux-kbuild-3.0.0, ${misc:Depends}, gcc-4.4 +Description: Header files for Linux 3.0.0-rc6-mckinley + This package provides the architecture-specific kernel header files for + Linux kernel 3.0.0-rc6-mckinley, generally used for building out-of-tree + kernel modules. These files are going to be installed into + /usr/src/linux-headers-3.0.0-rc6-mckinley, and can be used for building + modules that load into the kernel provided by the + linux-image-3.0.0-rc6-mckinley package. + +Package: linux-headers-3.0.0-rc6-all-m68k +Architecture: m68k +Depends: ${misc:Depends}, linux-headers-3.0.0-rc6-amiga (= ${binary:Version}), linux-headers-3.0.0-rc6-atari (= ${binary:Version}), linux-headers-3.0.0-rc6-bvme6000 (= ${binary:Version}), linux-headers-3.0.0-rc6-mac (= ${binary:Version}), linux-headers-3.0.0-rc6-mvme147 (= ${binary:Version}), linux-headers-3.0.0-rc6-mvme16x (= ${binary:Version}) +Description: All header files for Linux 3.0.0 (meta-package) + This package depends against all architecture-specific kernel header files + for Linux kernel version 3.0.0-rc6, generally used for building + out-of-tree kernel modules. + +Package: linux-image-3.0.0-rc6-amiga +Architecture: m68k +Provides: linux-image, linux-modules-3.0.0-rc6-amiga +Pre-Depends: debconf | debconf-2.0 +Depends: module-init-tools, linux-base (>= 3~), ${shlibs:Depends}, ${misc:Depends} +Recommends: firmware-linux-free (>= 3~) +Suggests: linux-doc-3.0.0, vmelilo [m68k], fdutils [m68k] +Description: Linux 3.0.0-rc6 for Amiga + The Linux kernel 3.0.0-rc6 and modules for use on Amiga. + +Package: linux-headers-3.0.0-rc6-amiga +Architecture: m68k +Provides: linux-headers +Depends: linux-headers-3.0.0-rc6-common (= ${binary:Version}), linux-kbuild-3.0.0, ${misc:Depends}, gcc-4.4 +Description: Header files for Linux 3.0.0-rc6-amiga + This package provides the architecture-specific kernel header files for + Linux kernel 3.0.0-rc6-amiga, generally used for building out-of-tree + kernel modules. These files are going to be installed into + /usr/src/linux-headers-3.0.0-rc6-amiga, and can be used for building + modules that load into the kernel provided by the + linux-image-3.0.0-rc6-amiga package. + +Package: linux-image-3.0.0-rc6-atari +Architecture: m68k +Provides: linux-image, linux-modules-3.0.0-rc6-atari +Pre-Depends: debconf | debconf-2.0 +Depends: module-init-tools, linux-base (>= 3~), ${shlibs:Depends}, ${misc:Depends} +Recommends: firmware-linux-free (>= 3~) +Suggests: linux-doc-3.0.0, vmelilo [m68k], fdutils [m68k] +Description: Linux 3.0.0-rc6 for Atari + The Linux kernel 3.0.0-rc6 and modules for use on Atari. + +Package: linux-headers-3.0.0-rc6-atari +Architecture: m68k +Provides: linux-headers +Depends: linux-headers-3.0.0-rc6-common (= ${binary:Version}), linux-kbuild-3.0.0, ${misc:Depends}, gcc-4.4 +Description: Header files for Linux 3.0.0-rc6-atari + This package provides the architecture-specific kernel header files for + Linux kernel 3.0.0-rc6-atari, generally used for building out-of-tree + kernel modules. These files are going to be installed into + /usr/src/linux-headers-3.0.0-rc6-atari, and can be used for building + modules that load into the kernel provided by the + linux-image-3.0.0-rc6-atari package. + +Package: linux-image-3.0.0-rc6-bvme6000 +Architecture: m68k +Provides: linux-image, linux-modules-3.0.0-rc6-bvme6000 +Pre-Depends: debconf | debconf-2.0 +Depends: module-init-tools, linux-base (>= 3~), ${shlibs:Depends}, ${misc:Depends} +Recommends: firmware-linux-free (>= 3~) +Suggests: linux-doc-3.0.0, vmelilo [m68k], fdutils [m68k] +Description: Linux 3.0.0-rc6 for BVM BVME4000 and BVME6000 + The Linux kernel 3.0.0-rc6 and modules for use on BVM BVME4000 and + BVME6000. + +Package: linux-headers-3.0.0-rc6-bvme6000 +Architecture: m68k +Provides: linux-headers +Depends: linux-headers-3.0.0-rc6-common (= ${binary:Version}), linux-kbuild-3.0.0, ${misc:Depends}, gcc-4.4 +Description: Header files for Linux 3.0.0-rc6-bvme6000 + This package provides the architecture-specific kernel header files for + Linux kernel 3.0.0-rc6-bvme6000, generally used for building out-of-tree + kernel modules. These files are going to be installed into + /usr/src/linux-headers-3.0.0-rc6-bvme6000, and can be used for building + modules that load into the kernel provided by the + linux-image-3.0.0-rc6-bvme6000 package. + +Package: linux-image-3.0.0-rc6-mac +Architecture: m68k +Provides: linux-image, linux-modules-3.0.0-rc6-mac +Pre-Depends: debconf | debconf-2.0 +Depends: module-init-tools, linux-base (>= 3~), ${shlibs:Depends}, ${misc:Depends} +Recommends: firmware-linux-free (>= 3~) +Suggests: linux-doc-3.0.0, vmelilo [m68k], fdutils [m68k] +Description: Linux 3.0.0-rc6 for Macintosh + The Linux kernel 3.0.0-rc6 and modules for use on Macintosh. + +Package: linux-headers-3.0.0-rc6-mac +Architecture: m68k +Provides: linux-headers +Depends: linux-headers-3.0.0-rc6-common (= ${binary:Version}), linux-kbuild-3.0.0, ${misc:Depends}, gcc-4.4 +Description: Header files for Linux 3.0.0-rc6-mac + This package provides the architecture-specific kernel header files for + Linux kernel 3.0.0-rc6-mac, generally used for building out-of-tree kernel + modules. These files are going to be installed into + /usr/src/linux-headers-3.0.0-rc6-mac, and can be used for building modules + that load into the kernel provided by the linux-image-3.0.0-rc6-mac + package. + +Package: linux-image-3.0.0-rc6-mvme147 +Architecture: m68k +Provides: linux-image, linux-modules-3.0.0-rc6-mvme147 +Pre-Depends: debconf | debconf-2.0 +Depends: module-init-tools, linux-base (>= 3~), ${shlibs:Depends}, ${misc:Depends} +Recommends: firmware-linux-free (>= 3~) +Suggests: linux-doc-3.0.0, vmelilo [m68k], fdutils [m68k] +Description: Linux 3.0.0-rc6 for Motorola MVME147 + The Linux kernel 3.0.0-rc6 and modules for use on Motorola MVME147. + +Package: linux-headers-3.0.0-rc6-mvme147 +Architecture: m68k +Provides: linux-headers +Depends: linux-headers-3.0.0-rc6-common (= ${binary:Version}), linux-kbuild-3.0.0, ${misc:Depends}, gcc-4.4 +Description: Header files for Linux 3.0.0-rc6-mvme147 + This package provides the architecture-specific kernel header files for + Linux kernel 3.0.0-rc6-mvme147, generally used for building out-of-tree + kernel modules. These files are going to be installed into + /usr/src/linux-headers-3.0.0-rc6-mvme147, and can be used for building + modules that load into the kernel provided by the + linux-image-3.0.0-rc6-mvme147 package. + +Package: linux-image-3.0.0-rc6-mvme16x +Architecture: m68k +Provides: linux-image, linux-modules-3.0.0-rc6-mvme16x +Pre-Depends: debconf | debconf-2.0 +Depends: module-init-tools, linux-base (>= 3~), ${shlibs:Depends}, ${misc:Depends} +Recommends: firmware-linux-free (>= 3~) +Suggests: linux-doc-3.0.0, vmelilo [m68k], fdutils [m68k] +Description: Linux 3.0.0-rc6 for Motorola MVME162/6/7, MVME172/7 + The Linux kernel 3.0.0-rc6 and modules for use on Motorola MVME162/6/7, + MVME172/7. + +Package: linux-headers-3.0.0-rc6-mvme16x +Architecture: m68k +Provides: linux-headers +Depends: linux-headers-3.0.0-rc6-common (= ${binary:Version}), linux-kbuild-3.0.0, ${misc:Depends}, gcc-4.4 +Description: Header files for Linux 3.0.0-rc6-mvme16x + This package provides the architecture-specific kernel header files for + Linux kernel 3.0.0-rc6-mvme16x, generally used for building out-of-tree + kernel modules. These files are going to be installed into + /usr/src/linux-headers-3.0.0-rc6-mvme16x, and can be used for building + modules that load into the kernel provided by the + linux-image-3.0.0-rc6-mvme16x package. + +Package: linux-headers-3.0.0-rc6-all-mips +Architecture: mips +Depends: ${misc:Depends}, linux-headers-3.0.0-rc6-r4k-ip22 (= ${binary:Version}), linux-headers-3.0.0-rc6-r5k-ip32 (= ${binary:Version}), linux-headers-3.0.0-rc6-sb1-bcm91250a (= ${binary:Version}), linux-headers-3.0.0-rc6-sb1a-bcm91480b (= ${binary:Version}), linux-headers-3.0.0-rc6-4kc-malta (= ${binary:Version}), linux-headers-3.0.0-rc6-5kc-malta (= ${binary:Version}), linux-headers-3.0.0-rc6-octeon (= ${binary:Version}) +Description: All header files for Linux 3.0.0 (meta-package) + This package depends against all architecture-specific kernel header files + for Linux kernel version 3.0.0-rc6, generally used for building + out-of-tree kernel modules. + +Package: linux-image-3.0.0-rc6-r4k-ip22 +Architecture: mips +Provides: linux-image, linux-modules-3.0.0-rc6-r4k-ip22 +Pre-Depends: debconf | debconf-2.0 +Depends: module-init-tools, linux-base (>= 3~), ${shlibs:Depends}, ${misc:Depends} +Recommends: firmware-linux-free (>= 3~) +Suggests: linux-doc-3.0.0 +Description: Linux 3.0.0-rc6 for SGI IP22 + The Linux kernel 3.0.0-rc6 and modules for use on SGI IP22 systems (Indy, + Indigo2). + +Package: linux-headers-3.0.0-rc6-r4k-ip22 +Architecture: mips +Provides: linux-headers +Depends: linux-headers-3.0.0-rc6-common (= ${binary:Version}), linux-kbuild-3.0.0, ${misc:Depends}, gcc-4.4 +Description: Header files for Linux 3.0.0-rc6-r4k-ip22 + This package provides the architecture-specific kernel header files for + Linux kernel 3.0.0-rc6-r4k-ip22, generally used for building out-of-tree + kernel modules. These files are going to be installed into + /usr/src/linux-headers-3.0.0-rc6-r4k-ip22, and can be used for building + modules that load into the kernel provided by the + linux-image-3.0.0-rc6-r4k-ip22 package. + +Package: linux-image-3.0.0-rc6-r5k-ip32 +Architecture: mips +Provides: linux-image, linux-modules-3.0.0-rc6-r5k-ip32 +Pre-Depends: debconf | debconf-2.0 +Depends: module-init-tools, linux-base (>= 3~), ${shlibs:Depends}, ${misc:Depends} +Recommends: firmware-linux-free (>= 3~) +Suggests: linux-doc-3.0.0 +Description: Linux 3.0.0-rc6 for SGI IP32 + The Linux kernel 3.0.0-rc6 and modules for use on SGI IP32 systems (O2). + +Package: linux-headers-3.0.0-rc6-r5k-ip32 +Architecture: mips +Provides: linux-headers +Depends: linux-headers-3.0.0-rc6-common (= ${binary:Version}), linux-kbuild-3.0.0, ${misc:Depends}, gcc-4.4 +Description: Header files for Linux 3.0.0-rc6-r5k-ip32 + This package provides the architecture-specific kernel header files for + Linux kernel 3.0.0-rc6-r5k-ip32, generally used for building out-of-tree + kernel modules. These files are going to be installed into + /usr/src/linux-headers-3.0.0-rc6-r5k-ip32, and can be used for building + modules that load into the kernel provided by the + linux-image-3.0.0-rc6-r5k-ip32 package. + +Package: linux-image-3.0.0-rc6-sb1-bcm91250a +Architecture: mips mipsel +Provides: linux-image, linux-modules-3.0.0-rc6-sb1-bcm91250a +Pre-Depends: debconf | debconf-2.0 +Depends: module-init-tools, linux-base (>= 3~), ${shlibs:Depends}, ${misc:Depends} +Recommends: firmware-linux-free (>= 3~) +Suggests: linux-doc-3.0.0 +Description: Linux 3.0.0-rc6 for BCM91250A + The Linux kernel 3.0.0-rc6 and modules for use on Broadcom BCM91250A + systems (aka SWARM). + +Package: linux-headers-3.0.0-rc6-sb1-bcm91250a +Architecture: mips mipsel +Provides: linux-headers +Depends: linux-headers-3.0.0-rc6-common (= ${binary:Version}), linux-kbuild-3.0.0, ${misc:Depends}, gcc-4.4 +Description: Header files for Linux 3.0.0-rc6-sb1-bcm91250a + This package provides the architecture-specific kernel header files for + Linux kernel 3.0.0-rc6-sb1-bcm91250a, generally used for building + out-of-tree kernel modules. These files are going to be installed into + /usr/src/linux-headers-3.0.0-rc6-sb1-bcm91250a, and can be used for + building modules that load into the kernel provided by the + linux-image-3.0.0-rc6-sb1-bcm91250a package. + +Package: linux-image-3.0.0-rc6-sb1a-bcm91480b +Architecture: mips mipsel +Provides: linux-image, linux-modules-3.0.0-rc6-sb1a-bcm91480b +Pre-Depends: debconf | debconf-2.0 +Depends: module-init-tools, linux-base (>= 3~), ${shlibs:Depends}, ${misc:Depends} +Recommends: firmware-linux-free (>= 3~) +Suggests: linux-doc-3.0.0 +Description: Linux 3.0.0-rc6 for BCM91480B + The Linux kernel 3.0.0-rc6 and modules for use on Broadcom BCM91480B + systems (aka BigSur). + +Package: linux-headers-3.0.0-rc6-sb1a-bcm91480b +Architecture: mips mipsel +Provides: linux-headers +Depends: linux-headers-3.0.0-rc6-common (= ${binary:Version}), linux-kbuild-3.0.0, ${misc:Depends}, gcc-4.4 +Description: Header files for Linux 3.0.0-rc6-sb1a-bcm91480b + This package provides the architecture-specific kernel header files for + Linux kernel 3.0.0-rc6-sb1a-bcm91480b, generally used for building + out-of-tree kernel modules. These files are going to be installed into + /usr/src/linux-headers-3.0.0-rc6-sb1a-bcm91480b, and can be used for + building modules that load into the kernel provided by the + linux-image-3.0.0-rc6-sb1a-bcm91480b package. + +Package: linux-image-3.0.0-rc6-4kc-malta +Architecture: mips mipsel +Provides: linux-image, linux-modules-3.0.0-rc6-4kc-malta +Pre-Depends: debconf | debconf-2.0 +Depends: module-init-tools, linux-base (>= 3~), ${shlibs:Depends}, ${misc:Depends} +Recommends: firmware-linux-free (>= 3~) +Suggests: linux-doc-3.0.0 +Description: Linux 3.0.0-rc6 for MIPS Malta + The Linux kernel 3.0.0-rc6 and modules for use on MIPS Malta boards. + +Package: linux-headers-3.0.0-rc6-4kc-malta +Architecture: mips mipsel +Provides: linux-headers +Depends: linux-headers-3.0.0-rc6-common (= ${binary:Version}), linux-kbuild-3.0.0, ${misc:Depends}, gcc-4.4 +Description: Header files for Linux 3.0.0-rc6-4kc-malta + This package provides the architecture-specific kernel header files for + Linux kernel 3.0.0-rc6-4kc-malta, generally used for building out-of-tree + kernel modules. These files are going to be installed into + /usr/src/linux-headers-3.0.0-rc6-4kc-malta, and can be used for building + modules that load into the kernel provided by the + linux-image-3.0.0-rc6-4kc-malta package. + +Package: linux-image-3.0.0-rc6-5kc-malta +Architecture: mips mipsel +Provides: linux-image, linux-modules-3.0.0-rc6-5kc-malta +Pre-Depends: debconf | debconf-2.0 +Depends: module-init-tools, linux-base (>= 3~), ${shlibs:Depends}, ${misc:Depends} +Recommends: firmware-linux-free (>= 3~) +Suggests: linux-doc-3.0.0 +Description: Linux 3.0.0-rc6 for MIPS Malta (64-bit) + The Linux kernel 3.0.0-rc6 and modules for use on MIPS Malta boards + (64-bit). + +Package: linux-headers-3.0.0-rc6-5kc-malta +Architecture: mips mipsel +Provides: linux-headers +Depends: linux-headers-3.0.0-rc6-common (= ${binary:Version}), linux-kbuild-3.0.0, ${misc:Depends}, gcc-4.4 +Description: Header files for Linux 3.0.0-rc6-5kc-malta + This package provides the architecture-specific kernel header files for + Linux kernel 3.0.0-rc6-5kc-malta, generally used for building out-of-tree + kernel modules. These files are going to be installed into + /usr/src/linux-headers-3.0.0-rc6-5kc-malta, and can be used for building + modules that load into the kernel provided by the + linux-image-3.0.0-rc6-5kc-malta package. + +Package: linux-image-3.0.0-rc6-octeon +Architecture: mips +Provides: linux-image, linux-modules-3.0.0-rc6-octeon +Pre-Depends: debconf | debconf-2.0 +Depends: module-init-tools, linux-base (>= 3~), ${shlibs:Depends}, ${misc:Depends} +Recommends: firmware-linux-free (>= 3~) +Suggests: linux-doc-3.0.0 +Description: Linux 3.0.0-rc6 for Octeon + The Linux kernel 3.0.0-rc6 and modules for use on Cavium Networks Octeon. + +Package: linux-headers-3.0.0-rc6-octeon +Architecture: mips +Provides: linux-headers +Depends: linux-headers-3.0.0-rc6-common (= ${binary:Version}), linux-kbuild-3.0.0, ${misc:Depends}, gcc-4.4 +Description: Header files for Linux 3.0.0-rc6-octeon + This package provides the architecture-specific kernel header files for + Linux kernel 3.0.0-rc6-octeon, generally used for building out-of-tree + kernel modules. These files are going to be installed into + /usr/src/linux-headers-3.0.0-rc6-octeon, and can be used for building + modules that load into the kernel provided by the + linux-image-3.0.0-rc6-octeon package. + +Package: linux-headers-3.0.0-rc6-all-mipsel +Architecture: mipsel +Depends: ${misc:Depends}, linux-headers-3.0.0-rc6-r5k-cobalt (= ${binary:Version}), linux-headers-3.0.0-rc6-sb1-bcm91250a (= ${binary:Version}), linux-headers-3.0.0-rc6-sb1a-bcm91480b (= ${binary:Version}), linux-headers-3.0.0-rc6-4kc-malta (= ${binary:Version}), linux-headers-3.0.0-rc6-5kc-malta (= ${binary:Version}), linux-headers-3.0.0-rc6-loongson-2f (= ${binary:Version}) +Description: All header files for Linux 3.0.0 (meta-package) + This package depends against all architecture-specific kernel header files + for Linux kernel version 3.0.0-rc6, generally used for building + out-of-tree kernel modules. + +Package: linux-image-3.0.0-rc6-r5k-cobalt +Architecture: mipsel +Provides: linux-image, linux-modules-3.0.0-rc6-r5k-cobalt +Pre-Depends: debconf | debconf-2.0 +Depends: module-init-tools, linux-base (>= 3~), ${shlibs:Depends}, ${misc:Depends} +Recommends: firmware-linux-free (>= 3~) +Suggests: linux-doc-3.0.0 +Description: Linux 3.0.0-rc6 for Cobalt + The Linux kernel 3.0.0-rc6 and modules for use on Cobalt systems (Qube, + RaQ, Qube2, RaQ2). + +Package: linux-headers-3.0.0-rc6-r5k-cobalt +Architecture: mipsel +Provides: linux-headers +Depends: linux-headers-3.0.0-rc6-common (= ${binary:Version}), linux-kbuild-3.0.0, ${misc:Depends}, gcc-4.4 +Description: Header files for Linux 3.0.0-rc6-r5k-cobalt + This package provides the architecture-specific kernel header files for + Linux kernel 3.0.0-rc6-r5k-cobalt, generally used for building out-of-tree + kernel modules. These files are going to be installed into + /usr/src/linux-headers-3.0.0-rc6-r5k-cobalt, and can be used for building + modules that load into the kernel provided by the + linux-image-3.0.0-rc6-r5k-cobalt package. + +Package: linux-image-3.0.0-rc6-loongson-2f +Architecture: mipsel +Provides: linux-image, linux-modules-3.0.0-rc6-loongson-2f +Pre-Depends: debconf | debconf-2.0 +Depends: module-init-tools, linux-base (>= 3~), ${shlibs:Depends}, ${misc:Depends} +Recommends: firmware-linux-free (>= 3~) +Suggests: linux-doc-3.0.0 +Description: Linux 3.0.0-rc6 for Loongson 2F + The Linux kernel 3.0.0-rc6 and modules for use on Lemote Loongson 2F + systems. + +Package: linux-headers-3.0.0-rc6-loongson-2f +Architecture: mipsel +Provides: linux-headers +Depends: linux-headers-3.0.0-rc6-common (= ${binary:Version}), linux-kbuild-3.0.0, ${misc:Depends}, gcc-4.4 +Description: Header files for Linux 3.0.0-rc6-loongson-2f + This package provides the architecture-specific kernel header files for + Linux kernel 3.0.0-rc6-loongson-2f, generally used for building + out-of-tree kernel modules. These files are going to be installed into + /usr/src/linux-headers-3.0.0-rc6-loongson-2f, and can be used for building + modules that load into the kernel provided by the + linux-image-3.0.0-rc6-loongson-2f package. + +Package: linux-headers-3.0.0-rc6-all-powerpc +Architecture: powerpc +Depends: ${misc:Depends}, linux-headers-3.0.0-rc6-powerpc (= ${binary:Version}), linux-headers-3.0.0-rc6-powerpc-smp (= ${binary:Version}), linux-headers-3.0.0-rc6-powerpc64 (= ${binary:Version}) +Description: All header files for Linux 3.0.0 (meta-package) + This package depends against all architecture-specific kernel header files + for Linux kernel version 3.0.0-rc6, generally used for building + out-of-tree kernel modules. + +Package: linux-image-3.0.0-rc6-powerpc +Architecture: powerpc +Provides: linux-image, linux-modules-3.0.0-rc6-powerpc +Pre-Depends: debconf | debconf-2.0 +Depends: module-init-tools, linux-base (>= 3~), ${shlibs:Depends}, ${misc:Depends}, initramfs-tools (>= 0.99) [powerpc] | linux-initramfs-tool [powerpc] +Recommends: firmware-linux-free (>= 3~) +Suggests: linux-doc-3.0.0, mkvmlinuz [powerpc] +Breaks: initramfs-tools (<< 0.99) +Description: Linux 3.0.0-rc6 for uniprocessor 32-bit PowerPC + The Linux kernel 3.0.0-rc6 and modules for use on uniprocessor 32-bit + PowerPC. + +Package: linux-headers-3.0.0-rc6-powerpc +Architecture: powerpc +Provides: linux-headers +Depends: linux-headers-3.0.0-rc6-common (= ${binary:Version}), linux-kbuild-3.0.0, ${misc:Depends}, gcc-4.4 +Description: Header files for Linux 3.0.0-rc6-powerpc + This package provides the architecture-specific kernel header files for + Linux kernel 3.0.0-rc6-powerpc, generally used for building out-of-tree + kernel modules. These files are going to be installed into + /usr/src/linux-headers-3.0.0-rc6-powerpc, and can be used for building + modules that load into the kernel provided by the + linux-image-3.0.0-rc6-powerpc package. + +Package: linux-image-3.0.0-rc6-powerpc-smp +Architecture: powerpc +Provides: linux-image, linux-modules-3.0.0-rc6-powerpc-smp +Pre-Depends: debconf | debconf-2.0 +Depends: module-init-tools, linux-base (>= 3~), ${shlibs:Depends}, ${misc:Depends}, initramfs-tools (>= 0.99) [powerpc] | linux-initramfs-tool [powerpc] +Recommends: firmware-linux-free (>= 3~) +Suggests: linux-doc-3.0.0, mkvmlinuz [powerpc] +Breaks: initramfs-tools (<< 0.99) +Description: Linux 3.0.0-rc6 for multiprocessor 32-bit PowerPC + The Linux kernel 3.0.0-rc6 and modules for use on multiprocessor 32-bit + PowerPC. + +Package: linux-headers-3.0.0-rc6-powerpc-smp +Architecture: powerpc +Provides: linux-headers +Depends: linux-headers-3.0.0-rc6-common (= ${binary:Version}), linux-kbuild-3.0.0, ${misc:Depends}, gcc-4.4 +Description: Header files for Linux 3.0.0-rc6-powerpc-smp + This package provides the architecture-specific kernel header files for + Linux kernel 3.0.0-rc6-powerpc-smp, generally used for building + out-of-tree kernel modules. These files are going to be installed into + /usr/src/linux-headers-3.0.0-rc6-powerpc-smp, and can be used for building + modules that load into the kernel provided by the + linux-image-3.0.0-rc6-powerpc-smp package. + +Package: linux-image-3.0.0-rc6-powerpc64 +Architecture: powerpc ppc64 +Provides: linux-image, linux-modules-3.0.0-rc6-powerpc64 +Pre-Depends: debconf | debconf-2.0 +Depends: module-init-tools, linux-base (>= 3~), ${shlibs:Depends}, ${misc:Depends}, initramfs-tools (>= 0.99) [powerpc ppc64] | linux-initramfs-tool [powerpc ppc64] +Recommends: firmware-linux-free (>= 3~) +Suggests: linux-doc-3.0.0, mkvmlinuz [powerpc ppc64] +Breaks: initramfs-tools (<< 0.99) +Description: Linux 3.0.0-rc6 for 64-bit PowerPC + The Linux kernel 3.0.0-rc6 and modules for use on 64-bit PowerPC. + +Package: linux-headers-3.0.0-rc6-powerpc64 +Architecture: powerpc ppc64 +Provides: linux-headers +Depends: linux-headers-3.0.0-rc6-common (= ${binary:Version}), linux-kbuild-3.0.0, ${misc:Depends}, gcc-4.4 +Description: Header files for Linux 3.0.0-rc6-powerpc64 + This package provides the architecture-specific kernel header files for + Linux kernel 3.0.0-rc6-powerpc64, generally used for building out-of-tree + kernel modules. These files are going to be installed into + /usr/src/linux-headers-3.0.0-rc6-powerpc64, and can be used for building + modules that load into the kernel provided by the + linux-image-3.0.0-rc6-powerpc64 package. + +Package: linux-headers-3.0.0-rc6-all-ppc64 +Architecture: ppc64 +Depends: ${misc:Depends}, linux-headers-3.0.0-rc6-powerpc64 (= ${binary:Version}) +Description: All header files for Linux 3.0.0 (meta-package) + This package depends against all architecture-specific kernel header files + for Linux kernel version 3.0.0-rc6, generally used for building + out-of-tree kernel modules. + +Package: linux-headers-3.0.0-rc6-all-s390 +Architecture: s390 +Depends: ${misc:Depends}, linux-headers-3.0.0-rc6-s390x (= ${binary:Version}) +Description: All header files for Linux 3.0.0 (meta-package) + This package depends against all architecture-specific kernel header files + for Linux kernel version 3.0.0-rc6, generally used for building + out-of-tree kernel modules. + +Package: linux-image-3.0.0-rc6-s390x +Architecture: s390 +Provides: linux-image, linux-modules-3.0.0-rc6-s390x +Pre-Depends: debconf | debconf-2.0 +Depends: module-init-tools, linux-base (>= 3~), ${shlibs:Depends}, ${misc:Depends}, initramfs-tools (>= 0.99) [s390] | linux-initramfs-tool [s390] +Recommends: firmware-linux-free (>= 3~) +Suggests: linux-doc-3.0.0, s390-tools (>= 1.8.3-2~) [s390] +Breaks: initramfs-tools (<< 0.99), s390-tools (<< 1.8.3-2~) +Description: Linux 3.0.0-rc6 for IBM zSeries + The Linux kernel 3.0.0-rc6 and modules for use on IBM zSeries. + . + This kernel has support to IPL (boot) from a VM reader or DASD device. + +Package: linux-headers-3.0.0-rc6-s390x +Architecture: s390 +Provides: linux-headers +Depends: linux-headers-3.0.0-rc6-common (= ${binary:Version}), linux-kbuild-3.0.0, ${misc:Depends}, gcc-4.4 +Description: Header files for Linux 3.0.0-rc6-s390x + This package provides the architecture-specific kernel header files for + Linux kernel 3.0.0-rc6-s390x, generally used for building out-of-tree + kernel modules. These files are going to be installed into + /usr/src/linux-headers-3.0.0-rc6-s390x, and can be used for building + modules that load into the kernel provided by the + linux-image-3.0.0-rc6-s390x package. + +Package: linux-image-3.0.0-rc6-s390x-tape +Architecture: s390 +Provides: linux-image +Depends: ${shlibs:Depends}, ${misc:Depends} +Suggests: linux-doc-3.0.0, s390-tools (>= 1.8.3-2~) [s390] +Breaks: s390-tools (<< 1.8.3-2~) +Description: Linux 3.0.0-rc6 for IBM zSeries, IPL from tape + The Linux kernel 3.0.0-rc6 for use on IBM zSeries. + . + This kernel has support to IPL (boot) from a tape. + +Package: linux-headers-3.0.0-rc6-all-sh4 +Architecture: sh4 +Depends: ${misc:Depends}, linux-headers-3.0.0-rc6-sh7751r (= ${binary:Version}), linux-headers-3.0.0-rc6-sh7785lcr (= ${binary:Version}) +Description: All header files for Linux 3.0.0 (meta-package) + This package depends against all architecture-specific kernel header files + for Linux kernel version 3.0.0-rc6, generally used for building + out-of-tree kernel modules. + +Package: linux-image-3.0.0-rc6-sh7751r +Architecture: sh4 +Provides: linux-image, linux-modules-3.0.0-rc6-sh7751r +Pre-Depends: debconf | debconf-2.0 +Depends: module-init-tools, linux-base (>= 3~), ${shlibs:Depends}, ${misc:Depends}, initramfs-tools (>= 0.99) [sh4] | linux-initramfs-tool [sh4] +Recommends: firmware-linux-free (>= 3~) +Suggests: linux-doc-3.0.0, fdutils [sh4] +Breaks: initramfs-tools (<< 0.99) +Description: Linux 3.0.0-rc6 for sh7751r + The Linux kernel 3.0.0-rc6 and modules for use on Renesas SH7751R R2D plus + board. + +Package: linux-headers-3.0.0-rc6-sh7751r +Architecture: sh4 +Provides: linux-headers +Depends: linux-headers-3.0.0-rc6-common (= ${binary:Version}), linux-kbuild-3.0.0, ${misc:Depends}, gcc-4.4 +Description: Header files for Linux 3.0.0-rc6-sh7751r + This package provides the architecture-specific kernel header files for + Linux kernel 3.0.0-rc6-sh7751r, generally used for building out-of-tree + kernel modules. These files are going to be installed into + /usr/src/linux-headers-3.0.0-rc6-sh7751r, and can be used for building + modules that load into the kernel provided by the + linux-image-3.0.0-rc6-sh7751r package. + +Package: linux-image-3.0.0-rc6-sh7785lcr +Architecture: sh4 +Provides: linux-image, linux-modules-3.0.0-rc6-sh7785lcr +Pre-Depends: debconf | debconf-2.0 +Depends: module-init-tools, linux-base (>= 3~), ${shlibs:Depends}, ${misc:Depends}, initramfs-tools (>= 0.99) [sh4] | linux-initramfs-tool [sh4] +Recommends: firmware-linux-free (>= 3~), uboot-mkimage [sh4] +Suggests: linux-doc-3.0.0, fdutils [sh4] +Breaks: initramfs-tools (<< 0.99) +Description: Linux 3.0.0-rc6 for sh7785lcr + The Linux kernel 3.0.0-rc6 and modules for use on Renesas SH7785 reference + board. + +Package: linux-headers-3.0.0-rc6-sh7785lcr +Architecture: sh4 +Provides: linux-headers +Depends: linux-headers-3.0.0-rc6-common (= ${binary:Version}), linux-kbuild-3.0.0, ${misc:Depends}, gcc-4.4 +Description: Header files for Linux 3.0.0-rc6-sh7785lcr + This package provides the architecture-specific kernel header files for + Linux kernel 3.0.0-rc6-sh7785lcr, generally used for building out-of-tree + kernel modules. These files are going to be installed into + /usr/src/linux-headers-3.0.0-rc6-sh7785lcr, and can be used for building + modules that load into the kernel provided by the + linux-image-3.0.0-rc6-sh7785lcr package. + +Package: linux-headers-3.0.0-rc6-all-sparc +Architecture: sparc +Depends: ${misc:Depends}, linux-headers-3.0.0-rc6-sparc64 (= ${binary:Version}), linux-headers-3.0.0-rc6-sparc64-smp (= ${binary:Version}) +Description: All header files for Linux 3.0.0 (meta-package) + This package depends against all architecture-specific kernel header files + for Linux kernel version 3.0.0-rc6, generally used for building + out-of-tree kernel modules. + +Package: linux-image-3.0.0-rc6-sparc64 +Architecture: sparc sparc64 +Provides: linux-image, linux-modules-3.0.0-rc6-sparc64 +Pre-Depends: debconf | debconf-2.0 +Depends: module-init-tools, linux-base (>= 3~), ${shlibs:Depends}, ${misc:Depends}, initramfs-tools (>= 0.99) [sparc sparc64] | linux-initramfs-tool [sparc sparc64] +Recommends: firmware-linux-free (>= 3~) +Suggests: linux-doc-3.0.0, silo [sparc sparc64], fdutils [sparc sparc64] +Breaks: initramfs-tools (<< 0.99) +Description: Linux 3.0.0-rc6 for uniprocessor 64-bit UltraSPARC + The Linux kernel 3.0.0-rc6 and modules for use on uniprocessor 64-bit + UltraSPARC. + +Package: linux-headers-3.0.0-rc6-sparc64 +Architecture: sparc sparc64 +Provides: linux-headers +Depends: linux-headers-3.0.0-rc6-common (= ${binary:Version}), linux-kbuild-3.0.0, ${misc:Depends}, gcc-4.4 +Description: Header files for Linux 3.0.0-rc6-sparc64 + This package provides the architecture-specific kernel header files for + Linux kernel 3.0.0-rc6-sparc64, generally used for building out-of-tree + kernel modules. These files are going to be installed into + /usr/src/linux-headers-3.0.0-rc6-sparc64, and can be used for building + modules that load into the kernel provided by the + linux-image-3.0.0-rc6-sparc64 package. + +Package: linux-image-3.0.0-rc6-sparc64-smp +Architecture: sparc sparc64 +Provides: linux-image, linux-modules-3.0.0-rc6-sparc64-smp +Pre-Depends: debconf | debconf-2.0 +Depends: module-init-tools, linux-base (>= 3~), ${shlibs:Depends}, ${misc:Depends}, initramfs-tools (>= 0.99) [sparc sparc64] | linux-initramfs-tool [sparc sparc64] +Recommends: firmware-linux-free (>= 3~) +Suggests: linux-doc-3.0.0, silo [sparc sparc64], fdutils [sparc sparc64] +Breaks: initramfs-tools (<< 0.99) +Description: Linux 3.0.0-rc6 for multiprocessor 64-bit UltraSPARC + The Linux kernel 3.0.0-rc6 and modules for use on multiprocessor 64-bit + UltraSPARC. + +Package: linux-headers-3.0.0-rc6-sparc64-smp +Architecture: sparc sparc64 +Provides: linux-headers +Depends: linux-headers-3.0.0-rc6-common (= ${binary:Version}), linux-kbuild-3.0.0, ${misc:Depends}, gcc-4.4 +Description: Header files for Linux 3.0.0-rc6-sparc64-smp + This package provides the architecture-specific kernel header files for + Linux kernel 3.0.0-rc6-sparc64-smp, generally used for building + out-of-tree kernel modules. These files are going to be installed into + /usr/src/linux-headers-3.0.0-rc6-sparc64-smp, and can be used for building + modules that load into the kernel provided by the + linux-image-3.0.0-rc6-sparc64-smp package. + +Package: linux-headers-3.0.0-rc6-all-sparc64 +Architecture: sparc64 +Depends: ${misc:Depends}, linux-headers-3.0.0-rc6-sparc64 (= ${binary:Version}), linux-headers-3.0.0-rc6-sparc64-smp (= ${binary:Version}) +Description: All header files for Linux 3.0.0 (meta-package) + This package depends against all architecture-specific kernel header files + for Linux kernel version 3.0.0-rc6, generally used for building + out-of-tree kernel modules. + --- linux-2.6-3.0.0~rc6.orig/debian/rules.real +++ linux-2.6-3.0.0~rc6/debian/rules.real @@ -0,0 +1,533 @@ +# +# This Makefile executes the unpack/build/binary targets for a single +# subarch, which is passed in the subarch variable. Empty subarch +# variable means that we are building for an arch without the subarch. +# Additionally, variables version, abiname and ltver are +# expected to be available (need to be exported from the parent process). +# +SHELL := bash -e +DEB_HOST_ARCH := $(shell dpkg-architecture -a'$(ARCH)' -qDEB_HOST_ARCH) +DEB_HOST_GNU_TYPE := $(shell dpkg-architecture -a'$(ARCH)' -qDEB_HOST_GNU_TYPE) +DEB_BUILD_ARCH := $(shell dpkg-architecture -a'$(ARCH)' -qDEB_BUILD_ARCH) +UPLOADER := $(shell dpkg-parsechangelog | sed -ne 's,^Maintainer: .[^<]*<\([^>]*\)>,\1,p') + +export PYTHONPATH = $(CURDIR)/debian/lib/python +export DH_OPTIONS +export DEB_HOST_ARCH DEB_HOST_GNU_TYPE DEB_BUILD_ARCH + +include debian/rules.defs + +stamp = [ -d $(dir $@) ] || mkdir $(dir $@); touch $@ + +ifneq (,$(filter parallel=%,$(DEB_BUILD_OPTIONS))) + DEBIAN_KERNEL_JOBS := $(subst parallel=,,$(filter parallel=%,$(DEB_BUILD_OPTIONS))) +endif +ifdef DEBIAN_KERNEL_JOBS + JOBS_ARG = -j$(DEBIAN_KERNEL_JOBS) +endif + +setup_env := env -u ABINAME -u ARCH -u FEATURESET -u FLAVOUR -u VERSION -u LOCALVERSION +setup_env += DISTRIBUTION_OFFICIAL_BUILD=1 DISTRIBUTION_UPLOADER=$(UPLOADER) DISTRIBUTION_VERSION="$(SOURCEVERSION)" + +MAKE_CLEAN = $(setup_env) $(MAKE) +MAKE_SELF := $(MAKE) -f debian/rules.real $(MAKEOVERRIDES) +MAKEOVERRIDES = +MAKE_PERF_VARS = prefix=/usr perfexecdir=share/perf_$(VERSION)-core NO_PERL=1 V=2 HAVE_CPLUS_DEMANGLE=1 ARCH=$(DEB_BUILD_ARCH) EXTRA_WARNINGS=-Wno-error + +# +# Targets +# +binary-arch-arch: install-headers_$(ARCH) +binary-arch-arch: install-libc-dev_$(ARCH) +ifneq ($(filter alpha amd64 armel armhf hppa i386 powerpc ppc64 s390 sh4 sparc sparc64,$(ARCH)),) + binary-arch-arch: install-tools_$(ARCH) +endif +binary-arch-featureset: install-headers_$(ARCH)_$(FEATURESET) +binary-arch-flavour: install-image_$(ARCH)_$(FEATURESET)_$(FLAVOUR)_$(TYPE) +ifeq ($(DEBUG),True) + binary-arch-flavour: install-image-dbg_$(ARCH)_$(FEATURESET)_$(FLAVOUR) +endif +ifeq ($(MODULES),True) + binary-arch-flavour: install-headers_$(ARCH)_$(FEATURESET)_$(FLAVOUR) +endif + +binary-indep: install-doc +binary-indep: install-manual +binary-indep: install-patch +binary-indep: install-source +binary-indep: install-support + +build: $(STAMPS_DIR)/build_$(ARCH)_$(FEATURESET)_$(FLAVOUR)_$(TYPE) + +setup-flavour: $(STAMPS_DIR)/setup_$(ARCH)_$(FEATURESET)_$(FLAVOUR) + +source-arch: $(STAMPS_DIR)/source +source-featureset: $(STAMPS_DIR)/source_$(ARCH)_$(FEATURESET) + +$(BUILD_DIR)/config.$(ARCH)_$(FEATURESET)_$(FLAVOUR): $(KCONFIG) + python debian/bin/kconfig.py '$@' $(KCONFIG) $(KCONFIG_OPTIONS) + +$(BUILD_DIR)/linux-source-$(UPSTREAMVERSION).tar.bz2: SOURCE_DIR=$(BUILD_DIR)/source +$(BUILD_DIR)/linux-source-$(UPSTREAMVERSION).tar.bz2: DIR = $(BUILD_DIR)/linux-source-$(UPSTREAMVERSION) +$(BUILD_DIR)/linux-source-$(UPSTREAMVERSION).tar.bz2: $(STAMPS_DIR)/source + rm -rf '$@' '$(DIR)' + cp -al '$(SOURCE_DIR)' '$(DIR)' + chmod -R u+rw,go=rX '$(DIR)' + cd '$(BUILD_DIR)'; tar -cjf 'linux-source-$(UPSTREAMVERSION).tar.bz2' 'linux-source-$(UPSTREAMVERSION)' + rm -rf '$(DIR)' + +define patch_cmd +cd '$(DIR)'; python '$(CURDIR)/debian/bin/patch.apply' --overwrite-home='$(CURDIR)/debian/patches' +endef + +$(STAMPS_DIR)/source: SOURCE_FILES = $(filter-out debian, $(wildcard * .[^.]*)) +$(STAMPS_DIR)/source: DIR = $(BUILD_DIR)/source +$(STAMPS_DIR)/source: + rm -rf '$(DIR)' + mkdir -p '$(DIR)' + cp -al $(SOURCE_FILES) '$(DIR)' + $(patch_cmd) + # Suppress trailing '+' in utsrelease + touch '$(DIR)/.scmversion' + @$(stamp) + +$(STAMPS_DIR)/source_$(ARCH)_$(FEATURESET): SOURCE_DIR=$(BUILD_DIR)/source +$(STAMPS_DIR)/source_$(ARCH)_$(FEATURESET): DIR=$(BUILD_DIR)/source_$(ARCH)_$(FEATURESET) +$(STAMPS_DIR)/source_$(ARCH)_$(FEATURESET): $(STAMPS_DIR)/source + rm -rf '$(DIR)' + cp -al '$(SOURCE_DIR)' '$(DIR)' + $(patch_cmd) -a $(ARCH) -f $(FEATURESET) + @$(stamp) + +$(STAMPS_DIR)/setup_$(ARCH)_$(FEATURESET)_$(FLAVOUR): CONFIG=$(BUILD_DIR)/config.$(ARCH)_$(FEATURESET)_$(FLAVOUR) +$(STAMPS_DIR)/setup_$(ARCH)_$(FEATURESET)_$(FLAVOUR): SOURCE_DIR=$(BUILD_DIR)/source_$(ARCH)_$(FEATURESET) +$(STAMPS_DIR)/setup_$(ARCH)_$(FEATURESET)_$(FLAVOUR): DIR=$(BUILD_DIR)/build_$(ARCH)_$(FEATURESET)_$(FLAVOUR) +$(STAMPS_DIR)/setup_$(ARCH)_$(FEATURESET)_$(FLAVOUR): $(STAMPS_DIR)/source_$(ARCH)_$(FEATURESET) $(BUILD_DIR)/config.$(ARCH)_$(FEATURESET)_$(FLAVOUR) + rm -rf '$(DIR)' + mkdir '$(DIR)' + cp '$(CONFIG)' '$(DIR)/.config' + echo '$(ABINAME)$(LOCALVERSION_IMAGE)' > '$(DIR)/localversion' + echo 'override ARCH = $(KERNEL_ARCH)' >> '$(DIR)/.kernelvariables' + echo 'CCACHE = ccache' >> '$(DIR)/.kernelvariables' + echo 'CC = $$(if $$(DEBIAN_KERNEL_USE_CCACHE),$$(CCACHE)) $$(CROSS_COMPILE)$(COMPILER)' >> '$(DIR)/.kernelvariables' +# TODO: Should we set CROSS_COMPILE always? +ifdef OVERRIDE_HOST_TYPE + echo 'override CROSS_COMPILE = $(OVERRIDE_HOST_TYPE)-' >> '$(DIR)/.kernelvariables' +else + echo 'ifneq ($$(DEB_BUILD_ARCH),$$(DEB_HOST_ARCH))' >> '$(DIR)/.kernelvariables' + echo 'override CROSS_COMPILE = $$(DEB_HOST_GNU_TYPE)-' >> '$(DIR)/.kernelvariables' + echo 'endif' >> '$(DIR)/.kernelvariables' +endif +ifdef CFLAGS_KERNEL + echo 'CFLAGS += $(CFLAGS_KERNEL)' >> '$(DIR)/.kernelvariables' +endif + +$(MAKE_CLEAN) -C '$(SOURCE_DIR)' O='$(CURDIR)/$(DIR)' V=1 listnewconfig + +yes "" | $(MAKE_CLEAN) -C '$(SOURCE_DIR)' O='$(CURDIR)/$(DIR)' oldconfig >/dev/null + +$(MAKE_CLEAN) -C '$(SOURCE_DIR)' O='$(CURDIR)/$(DIR)' $(JOBS_ARG) prepare + @$(stamp) + +$(STAMPS_DIR)/build_$(ARCH)_$(FEATURESET)_$(FLAVOUR)_$(TYPE): DIR=$(BUILD_DIR)/build_$(ARCH)_$(FEATURESET)_$(FLAVOUR) +$(STAMPS_DIR)/build_$(ARCH)_$(FEATURESET)_$(FLAVOUR)_$(TYPE): $(STAMPS_DIR)/setup_$(ARCH)_$(FEATURESET)_$(FLAVOUR) + +$(STAMPS_DIR)/build_$(ARCH)_$(FEATURESET)_$(FLAVOUR)_plain-s390-tape: BUILD_TARGET = image + +$(STAMPS_DIR)/build_$(ARCH)_$(FEATURESET)_$(FLAVOUR)_plain \ +$(STAMPS_DIR)/build_$(ARCH)_$(FEATURESET)_$(FLAVOUR)_plain-s390-tape \ +$(STAMPS_DIR)/build_$(ARCH)_$(FEATURESET)_$(FLAVOUR)_plain-xen: + +$(MAKE_CLEAN) -C '$(DIR)' $(JOBS_ARG) $(BUILD_TARGET) + python debian/bin/buildcheck.py $(DIR) $(ARCH) $(FEATURESET) $(FLAVOUR) + @$(stamp) + +$(STAMPS_DIR)/build-tools_$(ARCH): SOURCE_DIR=$(BUILD_DIR)/source +$(STAMPS_DIR)/build-tools_$(ARCH): DIR=$(BUILD_DIR)/build-tools_$(ARCH) +$(STAMPS_DIR)/build-tools_$(ARCH): $(STAMPS_DIR)/source + rm -rf $(DIR) + cp -al $(SOURCE_DIR) $(DIR) + +$(MAKE_CLEAN) -C '$(DIR)/tools/perf' $(JOBS_ARG) $(MAKE_PERF_VARS) all man + @$(stamp) + +$(STAMPS_DIR)/build-doc: SOURCE_DIR=$(BUILD_DIR)/source +$(STAMPS_DIR)/build-doc: DIR=$(BUILD_DIR)/build-doc +$(STAMPS_DIR)/build-doc: $(STAMPS_DIR)/source + rm -rf $(DIR) + mkdir $(DIR) + +$(MAKE_CLEAN) -C $(SOURCE_DIR) O='$(CURDIR)/$(DIR)' $(JOBS_ARG) xmldocs + +$(MAKE_CLEAN) -C $(SOURCE_DIR) O='$(CURDIR)/$(DIR)' $(JOBS_ARG) htmldocs mandocs + @$(stamp) + +install-base: + dh_installchangelogs + dh_installdocs + dh_strip + dh_compress + dh_fixperms + dh_installdeb + dh_shlibdeps + dh_gencontrol -- $(GENCONTROL_ARGS) + dh_md5sums + dh_builddeb -- $(BUILDDEB_ARGS) + +install-dummy: + dh_testdir + dh_testroot + dh_prep + +$(MAKE_SELF) install-base + +install-doc: PACKAGE_NAME = linux-doc-$(VERSION) +install-doc: DIR = $(BUILD_DIR)/build-doc +install-doc: SOURCE_DIR = $(BUILD_DIR)/source +install-doc: PACKAGE_DIR = debian/$(PACKAGE_NAME) +install-doc: OUT_DIR = $(PACKAGE_DIR)/usr/share/doc/$(PACKAGE_NAME) +install-doc: DH_OPTIONS = -p$(PACKAGE_NAME) +install-doc: $(STAMPS_DIR)/build-doc + dh_prep + mkdir -p $(OUT_DIR) + cp -a $(addprefix $(SOURCE_DIR)/, CREDITS MAINTAINERS README REPORTING-BUGS Documentation) $(OUT_DIR) + rm -rf $(OUT_DIR)/Documentation/DocBook + cd $(DIR)/Documentation/DocBook; \ + find * -name '*.html' -print \ + | \ + cpio -pd --preserve-modification-time '$(CURDIR)/$(OUT_DIR)/html' + gzip -9qfr $(OUT_DIR)/Documentation + +$(MAKE_SELF) install-base + +install-manual: PACKAGE_NAME = linux-manual-$(VERSION) +install-manual: DIR=$(BUILD_DIR)/build-doc +install-manual: DH_OPTIONS = -p$(PACKAGE_NAME) +install-manual: $(STAMPS_DIR)/build-doc + dh_prep + find $(DIR)/Documentation/DocBook/man/ -name '*.9' | xargs dh_installman + +$(MAKE_SELF) install-base + +install-headers_$(ARCH): PACKAGE_NAMES = linux-headers-$(UPSTREAMVERSION)$(ABINAME)-all linux-headers-$(UPSTREAMVERSION)$(ABINAME)-all-$(ARCH) +install-headers_$(ARCH): DH_OPTIONS = $(foreach p, $(PACKAGE_NAMES), -p$(p)) +install-headers_$(ARCH): + dh_testdir + dh_testroot + +$(MAKE_SELF) install-base GENCONTROL_ARGS='-Vkernel:Arch=$(ARCH)' + +install-headers_$(ARCH)_$(FEATURESET): PACKAGE_NAME = linux-headers-$(UPSTREAMVERSION)$(ABINAME)-common$(LOCALVERSION_HEADERS) +install-headers_$(ARCH)_$(FEATURESET): PACKAGE_NAME_KBUILD = linux-kbuild-$(VERSION) +install-headers_$(ARCH)_$(FEATURESET): DH_OPTIONS = -p$(PACKAGE_NAME) +install-headers_$(ARCH)_$(FEATURESET): BASE_DIR = /usr/src/$(PACKAGE_NAME) +install-headers_$(ARCH)_$(FEATURESET): SOURCE_DIR = $(BUILD_DIR)/source_$(ARCH)_$(FEATURESET) +install-headers_$(ARCH)_$(FEATURESET): DIR = debian/$(PACKAGE_NAME)/$(BASE_DIR) +install-headers_$(ARCH)_$(FEATURESET): $(STAMPS_DIR)/source_$(ARCH)_$(FEATURESET) + dh_testdir + dh_testroot + dh_prep + + cd $(SOURCE_DIR); \ + ( \ + echo Makefile; \ + find arch/$(KERNEL_ARCH) -maxdepth 1 -name 'Makefile*' -print; \ + find arch/$(KERNEL_ARCH) -name 'module.lds' -print; \ + find $$(find arch/$(KERNEL_ARCH) \( -name include -o -name scripts \) -type d -print) -print; \ + find include -name 'asm*' -prune -o -print; \ + find include/asm-generic -print; \ + ) \ + | \ + cpio -pd --preserve-modification-time '$(CURDIR)/$(DIR)' + + dh_link \ + /usr/lib/$(PACKAGE_NAME_KBUILD)/Kbuild $(BASE_DIR)/Kbuild \ + /usr/lib/$(PACKAGE_NAME_KBUILD)/scripts $(BASE_DIR)/scripts + + +$(MAKE_SELF) install-base + +install-headers_$(ARCH)_$(FEATURESET)_$(FLAVOUR): REAL_VERSION = $(UPSTREAMVERSION)$(ABINAME)$(LOCALVERSION) +install-headers_$(ARCH)_$(FEATURESET)_$(FLAVOUR): PACKAGE_NAME = linux-headers-$(REAL_VERSION) +install-headers_$(ARCH)_$(FEATURESET)_$(FLAVOUR): PACKAGE_NAME_COMMON = linux-headers-$(UPSTREAMVERSION)$(ABINAME)-common$(LOCALVERSION_HEADERS) +install-headers_$(ARCH)_$(FEATURESET)_$(FLAVOUR): PACKAGE_NAME_KBUILD = linux-kbuild-$(VERSION) +install-headers_$(ARCH)_$(FEATURESET)_$(FLAVOUR): DH_OPTIONS = -p$(PACKAGE_NAME) +install-headers_$(ARCH)_$(FEATURESET)_$(FLAVOUR): BASE_DIR = /usr/src/$(PACKAGE_NAME) +install-headers_$(ARCH)_$(FEATURESET)_$(FLAVOUR): BASE_DIR_COMMON = /usr/src/$(PACKAGE_NAME_COMMON) +install-headers_$(ARCH)_$(FEATURESET)_$(FLAVOUR): SOURCE_DIR = $(BUILD_DIR)/build_$(ARCH)_$(FEATURESET)_$(FLAVOUR) +install-headers_$(ARCH)_$(FEATURESET)_$(FLAVOUR): REF_DIR = $(BUILD_DIR)/source_$(ARCH)_$(FEATURESET) +install-headers_$(ARCH)_$(FEATURESET)_$(FLAVOUR): PACKAGE_DIR = debian/$(PACKAGE_NAME) +install-headers_$(ARCH)_$(FEATURESET)_$(FLAVOUR): DIR = $(PACKAGE_DIR)/$(BASE_DIR) +install-headers_$(ARCH)_$(FEATURESET)_$(FLAVOUR): $(STAMPS_DIR)/build_$(ARCH)_$(FEATURESET)_$(FLAVOUR)_$(TYPE) + dh_testdir + dh_testroot + dh_prep + + mkdir -p $(DIR)/arch/$(KERNEL_ARCH)/kernel + cp -a $(SOURCE_DIR)/{.config,.kernel*,Module.symvers,include} $(DIR) + cp -a $(SOURCE_DIR)/arch/$(KERNEL_ARCH)/kernel/asm-offsets.s $(DIR)/arch/$(KERNEL_ARCH)/kernel + +ifneq ($(filter powerpc ppc64,$(ARCH)),) + if [ -f $(SOURCE_DIR)/arch/$(KERNEL_ARCH)/lib/crtsavres.o ]; then \ + mkdir $(DIR)/arch/$(KERNEL_ARCH)/lib; \ + cp -a $(SOURCE_DIR)/arch/$(KERNEL_ARCH)/lib/crtsavres.o $(DIR)/arch/$(KERNEL_ARCH)/lib; \ + fi +endif + + @echo 'VERSION = 2' > $(DIR)/Makefile + @echo 'PATCHLEVEL = 6' >> $(DIR)/Makefile + + @echo 'MAKEARGS := -C $(BASE_DIR_COMMON) O=$(BASE_DIR)' >> $(DIR)/Makefile + @echo 'MAKEFLAGS += --no-print-directory' >> $(DIR)/Makefile + + @echo '.PHONY: all $$(MAKECMDGOALS)' >> $(DIR)/Makefile + @echo 'cmd := $$(filter-out all Makefile,$$(MAKECMDGOALS))' >> $(DIR)/Makefile + @echo 'all:' >> $(DIR)/Makefile + @echo ' @$$(MAKE) $$(MAKEARGS) $$(cmd)' >> $(DIR)/Makefile + @echo 'Makefile:;' >> $(DIR)/Makefile + @echo '$$(cmd) %/: all' >> $(DIR)/Makefile + @echo ' @:' >> $(DIR)/Makefile + + dh_link /usr/lib/$(PACKAGE_NAME_KBUILD)/scripts $(BASE_DIR)/scripts + + mkdir -p $(PACKAGE_DIR)/lib/modules/$(REAL_VERSION) + ln -s /usr/src/$(PACKAGE_NAME) $(PACKAGE_DIR)/lib/modules/$(REAL_VERSION)/build + ln -s /usr/src/$(PACKAGE_NAME_COMMON) $(PACKAGE_DIR)/lib/modules/$(REAL_VERSION)/source + + install -d $(PACKAGE_DIR)/DEBIAN + sed -e 's/=V/$(REAL_VERSION)/g' \ + debian/templates/temp.headers.plain/postinst \ + > $(PACKAGE_DIR)/DEBIAN/postinst + chmod 755 $(PACKAGE_DIR)/DEBIAN/postinst + + +$(MAKE_SELF) install-base + +install-libc-dev_$(ARCH): PACKAGE_NAME = linux-libc-dev +install-libc-dev_$(ARCH): DH_OPTIONS = -p$(PACKAGE_NAME) +install-libc-dev_$(ARCH): SOURCE_DIR = $(BUILD_DIR)/source +install-libc-dev_$(ARCH): DIR = $(BUILD_DIR)/build-libc-dev +install-libc-dev_$(ARCH): OUT_DIR = debian/$(PACKAGE_NAME)/usr +install-libc-dev_$(ARCH): + dh_testdir + dh_testroot + dh_prep + rm -rf '$(DIR)' + mkdir $(DIR) + +$(MAKE_CLEAN) -C $(SOURCE_DIR) O='$(CURDIR)/$(DIR)' headers_check ARCH=$(KERNEL_ARCH) + +$(MAKE_CLEAN) -C $(SOURCE_DIR) O='$(CURDIR)/$(DIR)' headers_install ARCH=$(KERNEL_ARCH) INSTALL_HDR_PATH='$(CURDIR)'/$(OUT_DIR) + + rm -rf $(OUT_DIR)/include/drm $(OUT_DIR)/include/scsi + find $(OUT_DIR)/include \( -name .install -o -name ..install.cmd \) -execdir rm {} + + + +$(MAKE_SELF) install-base + +install-support: PACKAGE_NAME = linux-support-$(UPSTREAMVERSION)$(ABINAME) +install-support: DH_OPTIONS = -p$(PACKAGE_NAME) +install-support: PACKAGE_DIR = debian/$(PACKAGE_NAME) +install-support: PACKAGE_ROOT = /usr/share/$(PACKAGE_NAME) +install-support: + dh_testdir + dh_testroot + dh_prep + dh_installdirs $(PACKAGE_ROOT)/lib/python/debian_linux $(PACKAGE_ROOT)/modules + cp debian/config.defines.dump $(PACKAGE_DIR)$(PACKAGE_ROOT) + cp debian/lib/python/debian_linux/*.py $(PACKAGE_DIR)$(PACKAGE_ROOT)/lib/python/debian_linux + cp debian/modules/* $(PACKAGE_DIR)$(PACKAGE_ROOT)/modules + chmod a+x $(PACKAGE_DIR)$(PACKAGE_ROOT)/modules/gencontrol.py + dh_pysupport + dh_link $(PACKAGE_ROOT) /usr/src/$(PACKAGE_NAME) + +$(MAKE_SELF) install-base + +install-image_$(ARCH)_$(FEATURESET)_$(FLAVOUR)_$(TYPE): REAL_VERSION = $(UPSTREAMVERSION)$(ABINAME)$(LOCALVERSION) +install-image_$(ARCH)_$(FEATURESET)_$(FLAVOUR)_$(TYPE): PACKAGE_NAME = linux-image-$(REAL_VERSION) +install-image_$(ARCH)_$(FEATURESET)_$(FLAVOUR)_$(TYPE): PACKAGE_DIR = debian/$(PACKAGE_NAME) +install-image_$(ARCH)_$(FEATURESET)_$(FLAVOUR)_$(TYPE): INSTALL_DIR = $(PACKAGE_DIR)/boot +install-image_$(ARCH)_$(FEATURESET)_$(FLAVOUR)_$(TYPE): DIR = $(BUILD_DIR)/build_$(ARCH)_$(FEATURESET)_$(FLAVOUR) +install-image_$(ARCH)_$(FEATURESET)_$(FLAVOUR)_$(TYPE): DH_OPTIONS = -p$(PACKAGE_NAME) +install-image_$(ARCH)_$(FEATURESET)_$(FLAVOUR)_$(TYPE): $(STAMPS_DIR)/build_$(ARCH)_$(FEATURESET)_$(FLAVOUR)_$(TYPE) + +install-image_$(ARCH)_$(FEATURESET)_$(FLAVOUR)_plain: + dh_testdir + dh_testroot + dh_prep + dh_installdirs 'boot' + +$(MAKE_SELF) \ + install-image_$(ARCH)_$(FEATURESET)_$(FLAVOUR)_plain_image \ + DIR='$(DIR)' PACKAGE_DIR='$(PACKAGE_DIR)' INSTALL_DIR='$(INSTALL_DIR)' REAL_VERSION='$(REAL_VERSION)' +ifeq ($(MODULES),True) + +$(MAKE_CLEAN) -C $(DIR) modules_install INSTALL_MOD_PATH='$(CURDIR)'/$(PACKAGE_DIR) INSTALL_MOD_STRIP=1 +ifeq ($(DEBUG),True) + find $(PACKAGE_DIR) -name '*.ko' | sed 's|$(PACKAGE_DIR)/lib/modules/$(REAL_VERSION)/kernel/||' | while read module ; do \ + objcopy --add-gnu-debuglink=$(DIR)/$$module $(PACKAGE_DIR)/lib/modules/$(REAL_VERSION)/kernel/$$module || exit; \ + done +endif + cp $(DIR)/.config $(PACKAGE_DIR)/boot/config-$(REAL_VERSION) + cp $(DIR)/System.map $(PACKAGE_DIR)/boot/System.map-$(REAL_VERSION) + find $(PACKAGE_DIR)/lib/modules/$(REAL_VERSION)/ -mindepth 1 -maxdepth 1 \! -name kernel \! -name modules.order -exec rm {} \+ + rm $(PACKAGE_DIR)/lib/firmware -rf +endif + +$(MAKE_SELF) \ + install-image_$(ARCH)_$(FEATURESET)_$(FLAVOUR)_plain_templates \ + PACKAGE_NAME='$(PACKAGE_NAME)' PACKAGE_DIR='$(PACKAGE_DIR)' REAL_VERSION='$(REAL_VERSION)' + +$(MAKE_SELF) \ + install-image_$(ARCH)_$(FEATURESET)_$(FLAVOUR)_plain_bug \ + PACKAGE_DIR='$(PACKAGE_DIR)' PACKAGE_NAME='$(PACKAGE_NAME)' REAL_VERSION='$(REAL_VERSION)' + +$(MAKE_SELF) install-base + +install-image_armel_$(FEATURESET)_$(FLAVOUR)_plain_image \ +install-image_armhf_$(FEATURESET)_$(FLAVOUR)_plain_image \ +install-image_sparc_$(FEATURESET)_$(FLAVOUR)_plain_image \ +install-image_sparc64_$(FEATURESET)_$(FLAVOUR)_plain_image \ +install-image_sh4_$(FEATURESET)_$(FLAVOUR)_plain_image: + install -m644 '$(DIR)/arch/$(KERNEL_ARCH)/boot/zImage' $(INSTALL_DIR)/vmlinuz-$(REAL_VERSION) + +install-image_amd64_$(FEATURESET)_$(FLAVOUR)_plain_image \ +install-image_i386_$(FEATURESET)_$(FLAVOUR)_plain_image: + install -m644 '$(DIR)/arch/$(KERNEL_ARCH)/boot/bzImage' $(INSTALL_DIR)/vmlinuz-$(REAL_VERSION) + +install-image_alpha_$(FEATURESET)_$(FLAVOUR)_plain_image: + install -m644 '$(DIR)/arch/$(KERNEL_ARCH)/boot/vmlinux.gz' $(INSTALL_DIR)/vmlinuz-$(REAL_VERSION) + +install-image_ia64_$(FEATURESET)_$(FLAVOUR)_plain_image \ +install-image_m68k_$(FEATURESET)_$(FLAVOUR)_plain_image: + install -m644 '$(DIR)/vmlinux.gz' $(INSTALL_DIR)/vmlinuz-$(REAL_VERSION) + +install-image_hppa_$(FEATURESET)_$(FLAVOUR)_plain_image \ +install-image_mips_$(FEATURESET)_$(FLAVOUR)_plain_image \ +install-image_mipsel_$(FEATURESET)_$(FLAVOUR)_plain_image: + install -m644 '$(DIR)/vmlinux' $(INSTALL_DIR)/vmlinux-$(REAL_VERSION) + +ifneq ($(filter powerpc ppc64,$(ARCH)),) +install-image_$(ARCH)_$(FEATURESET)_$(FLAVOUR)_plain_image: WRAPPER_INSTALL_DIR = '$(CURDIR)'/$(PACKAGE_DIR)/usr/lib/linux-image-$(REAL_VERSION) +install-image_$(ARCH)_$(FEATURESET)_$(FLAVOUR)_plain_image: + install -m644 '$(DIR)/vmlinux' $(INSTALL_DIR)/vmlinux-$(REAL_VERSION) + +$(MAKE_CLEAN) -C '$(DIR)' bootwrapper_install \ + WRAPPER_OBJDIR='$(WRAPPER_INSTALL_DIR)' \ + WRAPPER_DTSDIR='$(WRAPPER_INSTALL_DIR)'/dts \ + WRAPPER_BINDIR='$(WRAPPER_INSTALL_DIR)' +endif + +install-image_s390_$(FEATURESET)_$(FLAVOUR)_plain_image: + install -m644 '$(DIR)/arch/s390/boot/image' $(INSTALL_DIR)/vmlinuz-$(REAL_VERSION) + +ifneq ($(INITRAMFS),False) +install-image_$(ARCH)_$(FEATURESET)_$(FLAVOUR)_plain_templates: ARG_INITRD = YES +endif + +ARG_KIMAGE = vmlinuz +install-image_hppa_$(FEATURESET)_$(FLAVOUR)_plain_templates \ +install-image_mips_$(FEATURESET)_$(FLAVOUR)_plain_templates \ +install-image_mipsel_$(FEATURESET)_$(FLAVOUR)_plain_templates \ +install-image_powerpc_$(FEATURESET)_$(FLAVOUR)_plain_templates \ +install-image_ppc64_$(FEATURESET)_$(FLAVOUR)_plain_templates: ARG_KIMAGE = vmlinux + +install-image_$(ARCH)_$(FEATURESET)_$(FLAVOUR)_plain_templates: + for i in $(wildcard debian/templates/temp.image.plain/*); do \ + sed \ + -e 's@=B@$(KERNEL_ARCH)@g' \ + -e 's/=I/$(ARG_INITRD)/g' \ + -e 's/=K/$(ARG_KIMAGE)/g' \ + -e 's/=V/$(REAL_VERSION)/g' \ + $$i > debian/$(PACKAGE_NAME).$$(basename $$i) || exit; \ + done + mkdir -p debian/$(PACKAGE_NAME).po + for i in $(wildcard debian/po/*.po); do \ + sed \ + -e 's/=V/$(REAL_VERSION)/g' \ + $$i > debian/$(PACKAGE_NAME).po/$$(basename $$i) || exit; \ + done + mkdir -p debian/$(PACKAGE_NAME)/DEBIAN + po2debconf --podir debian/$(PACKAGE_NAME).po \ + -o debian/$(PACKAGE_NAME)/DEBIAN/templates \ + debian/$(PACKAGE_NAME).templates + +install-image_$(ARCH)_$(FEATURESET)_$(FLAVOUR)_plain_bug: + dh_installdirs usr/share/bug/$(PACKAGE_NAME) + dh_install debian/templates/image.plain.bug/* usr/share/bug/$(PACKAGE_NAME) + chmod 755 $(PACKAGE_DIR)/usr/share/bug/$(PACKAGE_NAME)/script + echo "RELEASE='$(REAL_VERSION)'" > $(PACKAGE_DIR)/usr/share/bug/$(PACKAGE_NAME)/info + +install-image_$(ARCH)_$(FEATURESET)_$(FLAVOUR)_plain-s390-tape: + dh_testdir + dh_testroot + dh_prep + dh_installdirs 'boot' + install -m644 '$(DIR)/arch/s390/boot/image' $(PACKAGE_DIR)/boot/vmlinuz-$(REAL_VERSION) + +$(MAKE_SELF) install-base + +install-image_$(ARCH)_$(FEATURESET)_$(FLAVOUR)_plain-xen: MODULES_PACKAGE_NAME = linux-modules-$(REAL_VERSION) +install-image_$(ARCH)_$(FEATURESET)_$(FLAVOUR)_plain-xen: MODULES_PACKAGE_DIR = debian/$(MODULES_PACKAGE_NAME) +install-image_$(ARCH)_$(FEATURESET)_$(FLAVOUR)_plain-xen: DH_OPTIONS = +install-image_$(ARCH)_$(FEATURESET)_$(FLAVOUR)_plain-xen: + dh_testdir + dh_testroot + dh_prep + dh_installdirs -p$(PACKAGE_NAME) boot 'var/lib/$(PACKAGE_NAME)' + dh_installdirs -p$(MODULES_PACKAGE_NAME) boot + cp '$(DIR)'/arch/$(KERNEL_ARCH)/boot/vmlinuz $(INSTALL_DIR)/vmlinuz-$(REAL_VERSION) + +$(MAKE_CLEAN) -C $(DIR) modules_install INSTALL_MOD_PATH='$(CURDIR)'/$(MODULES_PACKAGE_DIR) + cp $(DIR)/.config $(MODULES_PACKAGE_DIR)/boot/config-$(REAL_VERSION) + cp $(DIR)/System.map $(MODULES_PACKAGE_DIR)/boot/System.map-$(REAL_VERSION) + rm $(MODULES_PACKAGE_DIR)/lib/modules/$(REAL_VERSION)/{build,source} + dh_installmodules -p$(MODULES_PACKAGE_NAME) + for i in $(XEN_VERSIONS); do echo $$i; done > $(PACKAGE_DIR)/var/lib/$(PACKAGE_NAME)/xen-versions + install -d $(PACKAGE_DIR)/DEBIAN + echo /var/lib/$(PACKAGE_NAME)/xen-versions >> $(PACKAGE_DIR)/DEBIAN/conffiles + +$(MAKE_SELF) install-base DH_OPTIONS='-p$(PACKAGE_NAME) -p$(MODULES_PACKAGE_NAME)' + +install-image-dbg_$(ARCH)_$(FEATURESET)_$(FLAVOUR): REAL_VERSION = $(UPSTREAMVERSION)$(ABINAME)$(LOCALVERSION) +install-image-dbg_$(ARCH)_$(FEATURESET)_$(FLAVOUR): PACKAGE_NAME = linux-image-$(REAL_VERSION)-dbg +install-image-dbg_$(ARCH)_$(FEATURESET)_$(FLAVOUR): PACKAGE_DIR = debian/$(PACKAGE_NAME) +install-image-dbg_$(ARCH)_$(FEATURESET)_$(FLAVOUR): DEBUG_DIR = $(PACKAGE_DIR)/usr/lib/debug +install-image-dbg_$(ARCH)_$(FEATURESET)_$(FLAVOUR): DIR = $(BUILD_DIR)/build_$(ARCH)_$(FEATURESET)_$(FLAVOUR) +install-image-dbg_$(ARCH)_$(FEATURESET)_$(FLAVOUR): DH_OPTIONS = -p$(PACKAGE_NAME) +install-image-dbg_$(ARCH)_$(FEATURESET)_$(FLAVOUR): $(STAMPS_DIR)/build_$(ARCH)_$(FEATURESET)_$(FLAVOUR)_$(TYPE) + dh_testdir + dh_testroot + dh_prep + dh_installdirs usr/lib/debug usr/lib/debug/boot usr/share/lintian/overrides/ + sed -e 's/=V/$(REAL_VERSION)/g' \ + debian/templates/image-dbg.lintian-override.in \ + > $(PACKAGE_DIR)/usr/share/lintian/overrides/$(PACKAGE_NAME) + install -m644 $(DIR)/vmlinux $(DEBUG_DIR)/boot/vmlinux-$(REAL_VERSION) +ifeq ($(MODULES),True) + +$(MAKE_CLEAN) -C $(DIR) modules_install INSTALL_MOD_PATH='$(CURDIR)'/$(DEBUG_DIR) + find $(DEBUG_DIR)/lib/modules/$(REAL_VERSION)/ -mindepth 1 -maxdepth 1 \! -name kernel -exec rm {} \+ + rm $(DEBUG_DIR)/lib/firmware -rf +endif + +$(MAKE_SELF) install-base BUILDDEB_ARGS="-Zbzip2" + +install-tools_$(ARCH): PACKAGE_NAME = linux-tools-$(VERSION) +install-tools_$(ARCH): PACKAGE_DIR = debian/$(PACKAGE_NAME) +install-tools_$(ARCH): DIR = $(BUILD_DIR)/build-tools_$(ARCH) +install-tools_$(ARCH): DH_OPTIONS = -p$(PACKAGE_NAME) +install-tools_$(ARCH): $(STAMPS_DIR)/build-tools_$(ARCH) + dh_testdir + dh_testroot + dh_prep + dh_installdirs usr/bin + +$(MAKE_CLEAN) -C '$(DIR)/tools/perf' $(MAKE_PERF_VARS) \ + DESTDIR='$(CURDIR)/$(PACKAGE_DIR)' install install-man + # Rename command and manual pages to include version + mv $(PACKAGE_DIR)/usr/bin/perf $(PACKAGE_DIR)/usr/bin/perf_$(VERSION) + for manpage in $(PACKAGE_DIR)/usr/share/man/*/*; do \ + mv "$$manpage" "$$(echo "$$manpage" | sed 's,/perf,&_$(VERSION),')" || exit; \ + done + # Fix up cross-references + sed -i '/^\.SH "SEE ALSO"/,/^\.SH/ { s/perf-/perf_$(VERSION)-/g }' \ + $(PACKAGE_DIR)/usr/share/man/*/* + dh_perl /usr/share/perf_$(VERSION)-core/scripts/perl/Perf-Trace-Util/lib/ + dh_pysupport /usr/share/perf_$(VERSION)-core/scripts/python/Perf-Trace-Util/lib/ + +$(MAKE_SELF) install-base + +install-patch: PACKAGE = linux-patch-debian-$(VERSION) +install-patch: pbase := /usr/src/kernel-patches/all/$(UPSTREAMVERSION) +install-patch: pfull := debian/$(PACKAGE)$(pbase) +install-patch: DH_OPTIONS = -p$(PACKAGE) +install-patch: + dh_testdir + dh_testroot + dh_prep + dh_installdirs '$(pbase)/apply' '$(pbase)/debian' '$(pbase)/unpatch' + dh_install -X.svn debian/patches/* '$(pbase)/debian' + install debian/bin/patch.apply '$(pfull)/apply/debian' + install debian/templates/patch.unpatch '$(pfull)/unpatch/debian' + find '$(pfull)/debian' ! -path '*/series/*' -type f -execdir bzip2 '{}' ';' -execdir chmod 644 '{}.bz2' ';' + +$(MAKE_SELF) install-base + +install-source: DH_OPTIONS = -plinux-source-$(VERSION) +install-source: $(BUILD_DIR)/linux-source-$(UPSTREAMVERSION).tar.bz2 + dh_testdir + dh_testroot + dh_install '$<' /usr/src + +$(MAKE_SELF) install-base + +# vim: filetype=make --- linux-2.6-3.0.0~rc6.orig/debian/copyright +++ linux-2.6-3.0.0~rc6/debian/copyright @@ -0,0 +1,54 @@ +This is the Debian GNU/Linux prepackaged version of the Linux kernel. + +It was downloaded from http://ftp.kernel.org/pub/linux/kernel/. + +Copyright: + + Copyright (C) 1991-2009 Linus Torvalds + and many others + +License: + + This package is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + This package is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this package; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +On Debian systems, the complete text of the GNU General Public License version +2 can be found in `/usr/share/common-licenses/GPL-2'. + +License for the Xen interface headers: + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to + deal in the Software without restriction, including without limitation the + rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. + +The 'perf' tool is dynamically linked with the Python interpreter, +which is itself dynamically linked with OpenSSL, which is not +GPL-compatible. However, since perf itself does not link with or use +OpenSSL, we believe that this indirect linking does not require +additional permissions beyond the GPL. + +The Debian packaging is licensed under the GPL, see above. --- linux-2.6-3.0.0~rc6.orig/debian/changelog +++ linux-2.6-3.0.0~rc6/debian/changelog @@ -0,0 +1,9723 @@ +linux-2.6 (3.0.0~rc6-1~experimental.1) experimental; urgency=low + + * New upstream release candidate + + [ maximilian attems ] + * Topconfig enable modular USB_NET_KALMIA, I2C_DIOLAN_U2C, SMBUS, + SENSORS_SMBUS, SENSORS_SHT21, SENSORS_EMC6W201, SENSORS_SCH5627, + SENSORS_ADS1015, SENSORS_W83795, SENSORS_DS620, SENSORS_LINEAGE, + SENSORS_LTC4151, SENSORS_LTC4261, SENSORS_MAX16065, SENSORS_MAX6639, + SENSORS_MAX6642, BT_WILINK. + * [x86_32] enable modular I2C_PXA. + * [x86] enable modular SENSORS_FAM15H_POWER. + * drm/i915: Hold struct_mutex during i915_save_state/i915_restore_state. + * [thinkpad]: Add KEY_MICMUTE and enable it on Lenovo X220. + * [m68k]: resources: Add lookup_resource(). + * m68k/atari: Reserve some ST-RAM early on for device buffer use. + * ALSA: hda - Handle -1 as invalid position, too + * ALSA: hda - Judge playback stream from stream id in azx_via_get_position() + + [ Ben Hutchings ] + * [x86] Enable SCSI_ISCI as module + + -- maximilian attems Tue, 05 Jul 2011 11:05:43 +0200 + +linux-2.6 (3.0.0~rc5-1~experimental.1) experimental; urgency=low + + * New upstream release candidate + - fix wrong iput on d_inod. (closes: #631255, #631802) + + [ maximilian attems ] + * [x86] enable some comedi modules. (closes: #631199) + * [kirkwood] Enable sound support for the HP t5325 (closes: #631762) + + [ Arnaud Patard ] + * [armel] disable ixp4xx, until upstream agrees on how to fix + the build error + * [armel] Remove configuration options which don't exist anymore + * [armhf] disable net dma/async tx on mx5 as it can't work + + -- maximilian attems Tue, 28 Jun 2011 11:55:21 +0200 + +linux-2.6 (3.0.0~rc4-1~experimental.1) experimental; urgency=low + + * New upstream release candidate + - drm/i915: Fixes. (closes: #627976) + + [ maximilian attems ] + * [x86] enable modular INTEL_OAKTRAIL, ACPI_APEI_PCIEAER. + * Topconfig enable modular RADIO_WL1273, RADIO_WL128X. + + [ Ben Hutchings ] + * rt2800pci: Add device ID for RT539F device (Closes: #630960) + * atm: Enable for all architectures except m68k, s390 (Closes: #630900) + + -- maximilian attems Tue, 21 Jun 2011 15:00:23 +0200 + +linux-2.6 (3.0.0~rc3-1~experimental.1) experimental; urgency=low + + * New upstream release candidate + + [ Ben Hutchings ] + * [i386] idle: EXPORT_SYMBOL(default_idle, pm_idle) if + CONFIG_APM_MODULE (only); fixes FTBFS + + [ maximilian attems ] + * Update configs. + * Topconfig enable BPF_JIT. (closes: #630553) + * Update debconf pt (Américo Monteiro) translations. (closes: #627631) + * Add kbuild fixes out of linux-next. + + -- maximilian attems Thu, 16 Jun 2011 15:04:33 +0200 + +linux-2.6 (3.0.0~rc2-1~experimental.1) experimental; urgency=low + + * New upstream release candidate + + [ maximilian attems ] + * Newer Standards-Version 3.9.2 without changes. + + [ Hector Oron ] + * [armel/iop32x] Fix FTBFS (Closes: #629342) + + [ Aurelien Jarno ] + * [mips,mipsel] Update arch/mips/kernel/i8259.c to fix FTBFS. + * [mips,mipsel] Remove explicit disable of CONFIG_DRM_NOUVEAU and + CONFIG_DRM_RADEON_KMS. + + [ Ben Hutchings ] + * perf: Cancel -Werror compiler option; fixes FTBFS with perl 5.14 + * qla4xxx: Remove our fix for #598503; it has now been fixed upstream + in a different way and the two changes resulted in FTBFS + * [ia64] nouveau: Disable ACPI support. It probably wasn't very useful + on ia64, and now depends on mxm-wmi which is definitely x86-only. + * Make gcc-4.5 the default compiler (except for alpha, hppa and m68k) + * Restore xen-linux-system-- packages + + -- Ben Hutchings Thu, 09 Jun 2011 01:10:53 +0100 + +linux-2.6 (3.0.0~rc1-1~experimental.1) experimental; urgency=low + + * New upstream release candidate + + [ Ben Hutchings ] + * [x86] Enable BACKLIGHT_APPLE, replacing BACKLIGHT_MBP_NVIDIA + (Closes: #627492) + * cgroups: Disable memory resource controller by default. Allow it + to be enabled using kernel parameter 'cgroup_enable=memory'. + * rt2800usb: Enable support for more USB devices including + Linksys WUSB600N (Closes: #596626) (this change was accidentally + omitted from 2.6.39-1) + * fs: Enable FHANDLE + * cgroups: Enable CGROUP_MEM_RES_CTLR_SWAP but not + CGROUP_MEM_RES_CTLR_SWAP_ENABLED. Swap accounting can be enabled + using kernel parameter 'swapaccount'. + * ipv4: Enable IP_FIB_TRIE_STATS + * netfilter: Enable IP_SET, IP_SET_BITMAP_IP, IP_SET_BITMAP_IPMAC, + IP_SET_BITMAP_PORT, IP_SET_HASH_IP, IP_SET_HASH_IPPORT, + IP_SET_HASH_IPPORTIP, IP_SET_HASH_IPPORTNET, IP_SET_HASH_NET, + IP_SET_HASH_NETPORT, IP_SET_LIST_SET, NETFILTER_XT_SET as modules + * net/sched: Enable NET_SCH_QFQ as module + * can: Enable CAN_SOFTING, CAN_SOFTING_CS as modules + * mtd: Enable MTD_SWAP as module + * of, proc: Enable PROC_DEVICETREE + * dm: Enable DM_RAID, DM_FLAKEY as modules. Note these are currently + experimental. + * target: Enable TCM_FC as module + * net/wireless/ath: Enable CARL9170 as module (carl9170, replacing + ar9170usb) + * rtlwifi: Enable RTL8192SE as module (Closes: #590280) + * net/wireless: Enable MWIFIEX, MWIFIEX_SDIO as modules + * net/usb: Enable USB_VL600 as module + * tablet: Enable drivers for all possible architectures and flavours + * tablet: Enable TABLET_USB_HANWANG as module + * pps: Enable PPS_CLIENT_PARPORT as module + * ptp: Enable PTP_1588_CLOCK, PTP_1588_CLOCK_GIANFAR, + PTP_1588_CLOCK_IXP46X as modules + * [x86] watchdog: Enable SP5100_TCO, NV_TCO as modules + * media/rc: Enable IR_REDRAT3, RC_LOOPBACK as module + * [x86] media/rc: Enable IR_ITE_CIR, IR_FINTEK as modules + * gspca: Enable USB_GSPCA_KINECT as module + * [i386] radio: Enable RADIO_MIROPCM20 as module + * s3fb: Enable FB_S3_DDC + * viafb: Enable FB_VIA_X_COMPATIBILITY + * es1968: Enable SND_ES1968_RADIO + * sound: Enable SND_ISIGHT, SND_LOLA as modules + * hid: Enable HID_ACRUX, HID_EMS_FF, HID_KEYTOUCH, HID_LCPOWER, + HID_MULTITOUCH, HID_ROCCAT_ARVO, HID_ROCCAT_KONEPLUS, + HID_ROCCAT_KOVAPLUS as modules + * usb-storage: Enable USB_STORAGE_REALTEK, USB_STORAGE_ENE_UB6250 as + modules + * mmc: Enable MMC_VUB300, MMC_USHC as modules + * memstick: Enable MEMSTICK_R592 as module + * [x86] edac: Enable EDAC_I7300 as module + * [i386] staging, video: Enable FB_OLPC_DCON as module + * [x86] staging, drm: Enable DRM_PSB as module + * crypto, net: Enable CRYPTO_USER_API_HASH, CRYPTO_USER_API_SKCIPHER as + modules + * [x86] block, xen: Enable XEN_BLKDEV_BACKEND as module + + -- Ben Hutchings Wed, 01 Jun 2011 06:41:14 +0100 + +linux-2.6 (2.6.39-1) unstable; urgency=low + + [ maximilian attems ] + * [x86] Enable CRYPTO_AES_NI_INTEL for all flavours. (closes: #623631) + * topconfig: Enable SND_USB_6FIRE, SND_FIREWIRE_SPEAKERS, + MEDIA_CONTROLLER, DVB_USB_TECHNISAT_USB2, USB_GSPCA_NW80X, + USB_GSPCA_VICAM, XEN_WDT, LOOPBACK_TARGET. + * [x86] Enable modular XEN_NETDEV_BACKEND. + * topconfig enable mem cgroup RESOURCE_COUNTERS, CGROUP_MEM_RES_CTLR. + (closes: #534964) + * Cleanup configs. + + [ Ben Hutchings ] + * [!x86] Disable TPM drivers. TPMs are currently only fitted in PCs. + * rt2800usb: Enable support for more USB devices including + Linksys WUSB600N (Closes: #596626) + * mm: Select SLAB allocator again. Although SLUB is currently the + upstream default, this was set as an experiment rather than a + recommendation! SLUB generally has poorer performance than SLAB on + larger systems. + * postinst: Remove specific support for running a ramdisk creator; + warn users that specify one in /etc/kernel-img.conf + * Require initramfs-tools >= 0.99, which installs a postinst hook + + [ Arnaud Patard ] + * [armel] Disable eeti touchscreen driver due to missing irq_to_gpio on + several platforms. + + -- maximilian attems Thu, 19 May 2011 15:34:37 +0200 + +linux-2.6 (2.6.39~rc7-1~experimental.1) experimental; urgency=low + + * [x86] Enable modular ASUS_WMI and ASUS_NB_WMI. (closes: #626141) + * [x86] Enable modular DELL_WMI_AIO, HP_ACCEL, INTEL_IPS, ACPI_IPMI. + * [x86/486] Enable modular XO1_RFKILL, XO15_EBOOK. + * topconfig: Enable modular NF_CONNTRACK_TIMESTAMP, NF_CONNTRACK_SNMP, + NETFILTER_XT_TARGET_AUDIT, NETFILTER_XT_MATCH_ADDRTYPE, + NETFILTER_XT_MATCH_DEVGROUP, NET_SCH_SFB, NET_SCH_MQPRIO, NET_SCH_CHOKE, + SATA_ACARD_AHCI, PATA_ARASAN_CF, SCSI_BNX2X_FCOE. + * Add nl debconf template translation. (closes: #622967) + Thanks willem kuyn . + * topconfig Enable modular RTL8192CU. (closes: #625613) + + -- maximilian attems Tue, 10 May 2011 15:11:00 +0200 + +linux-2.6 (2.6.39~rc6-1~experimental.1) experimental; urgency=low + + * New upstream release candidate + + [ maximilian attems ] + * Enable SQUASHFS_{LZO,XZ}. (closes: #613658) + * [x86] Enable EASYCAP. (closes: #624505) + + [ Ben Hutchings + * xhci-hcd: Include in xhci-pci.c (fixes FTBFS on armel) + * [x86] Enable BRCMSMAC; the brcmsmac module replaces brcm80211 + (Closes: #625510) + + [ Aurelien Jarno ] + * drm/nouveau, drm/radeon: remove fix for non-powerpc/sparc/x86. + * [mips,mipsel] Disabled CONFIG_DRM_NOUVEAU and CONFIG_DRM_RADEON_KMS. + * [mips/octeon] Disabled CONFIG_HOTPLUG_CPU and CONFIG_PM. + + -- maximilian attems Sun, 08 May 2011 12:23:15 +0200 + +linux-2.6 (2.6.39~rc5-1~experimental.1) experimental; urgency=low + + * New upstream release candidate + + [ Ben Hutchings ] + * [powerpc] kexec: Fix build failure on 32-bit SMP + * net/wireless: Adjust config for iwlegacy/iwlwifi split (Closes: #624124) + - Enable IWLWIFI_LEGACY as module + - Enable IWL4965 as module; it is no longer part of the iwlagn module + * [armhf] Actually install zImage into the linux-image package, thanks to + Sebastian Reichel + * [armhf] Build a linux-tools package + * Fix configuration for features that are no longer modular, thanks to + Sedat Dilek (Closes: #624372): + - bluetooth: Re-enable BT_L2CAP and BT_SCO as part of bluetooth module + - leds: Explicitly enable LEDS_CLASS as built-in + - mfd: Explicitly disable MFD_WM8994 + + [ Aurelien Jarno ] + * drm/nouveau, drm/radeon: fix build failure on mips. + + -- Ben Hutchings Fri, 29 Apr 2011 06:04:13 +0100 + +linux-2.6 (2.6.39~rc4-1~experimental.1) experimental; urgency=low + + * New upstream release candidate + + [ Ben Hutchings ] + * [i386] Rename '686-bigmem' flavour to '686-pae'; remove '686' flavour. + For 686-class systems without PAE, the '486' flavour is more efficient + than the '686' flavour due to optimisation for uniprocessor systems. + * Add armhf architecture with mx5 flavour, thanks to Hector Oron and + Vagrant Cascadian (Closes: #621032) + + -- Ben Hutchings Sun, 24 Apr 2011 03:21:31 +0100 + +linux-2.6 (2.6.38-5) unstable; urgency=medium + + [ Thorsten Glaser ] + * [m68k] atari: Enable and compile in generic RTC + * [m68k] Backport the most urgent fixes from 2.6.39 + - Add helper functions to handle kernel faults, traps and + exceptions better (used by the other patches below) + - Add improved support for running under the ARAnyM emulator + (its native features interface) and emulated hardware + + block access (similar to virtio-block) + + console access (redirection to stdout) + + network access (Ethernet) (Closes: #599121) + * [m68k] Add patch from queue fixing atarifb console output on + machines with a lot of FastRAM by reserving some ST-RAM early + * [m68k] Add patch from mm mailing list to fix SLUB breakage + + [ Aurelien Jarno ] + * [mips/octeon] Disable CONFIG_HOTPLUG_CPU. + + [ Ben Hutchings ] + * rt2800pci, rt2800usb: Enable experimental support for more recent + chips (Closes: #623808) + * [x86] staging: Enable EASYCAP as module (Closes: #624505) + * Add stable 2.6.38.5, including: + - p54: Initialize extra_len in p54_tx_80211 + - nfsd4: Fix filp leak (regression introduced in 2.6.38.3) + - radeon: PLL tweaks for R7xx + - nouveau: Fix notifier memory corruption bug + - radeon: Fix bad shift in atom iio table parser + - [x86] i915: Sanitize the output registers after resume + - [x86] ideapad: Read brightness setting on brightness key notify + - ath9k_hw: Partially revert "fix dma descriptor rx error bit parsing" + - [s390] pfault: fix token handling + - ACPI/PM: Avoid infinite recurrence while registering power resources + - [hppa] slub: Disable use with DISCONTIGMEM && !NUMA + - vfs: avoid large kmalloc()s for the fdtable + - agp: Fix arbitrary kernel memory writes (CVE-2011-1745) + - agp: Fix OOM and buffer overflow (CVE-2011-1746) + For the complete list of changes, see: + http://www.kernel.org/pub/linux/kernel/v2.6/ChangeLog-2.6.38.5 + * [hppa] Bump ABI to 2a + * mpt2sas: Prevent heap overflows and unchecked reads + (CVE-2011-1494, CVE-2011-1495) + * [armel] Prevent heap corruption in OABI semtimedop + * can: Add missing socket check in can/bcm release (CVE-2011-1598) + * ldm: Disable broken support for VBLK fragments (CVE-2011-1017) + + -- Ben Hutchings Sat, 07 May 2011 21:24:55 +0100 + +linux-2.6 (2.6.38-4) unstable; urgency=low + + * usb-audio: Define another USB ID for a buggy USB MIDI cable + (Closes: #617743) + * net: Enable BATMAN_ADV as module (Closes: #622361) + * Add stable 2.6.38.3, including: + - eCryptfs: Unlock page in write_begin error path + - irda: validate peer name and attribute lengths (CVE-2011-1180) + - irda: prevent heap corruption on invalid nickname + - nilfs2: fix data loss in mmap page write for hole blocks + - ALSA: pcm: fix infinite loop in snd_pcm_update_hw_ptr0() + - inotify: fix double free/corruption of stuct user + - perf: Fix task_struct reference leak + - ROSE: prevent heap corruption with bad facilities (CVE-2011-1493) + - [x86] mtrr, pat: Fix one cpu getting out of sync during resume + - Input: synaptics - fix crash in synaptics_module_init() + - ath9k: fix a chip wakeup related crash in ath9k_start + - mac80211: fix a crash in minstrel_ht in HT mode with no supported MCS + rates + - UBIFS: fix oops on error path in read_pnode + - quota: Don't write quota info in dquot_commit() + - mm: avoid wrapping vm_pgoff in mremap() + - wl12xx: fix potential buffer overflow in testmode nvs push + - Bluetooth: sco: fix information leak to userspace (CVE-2011-1078) + - bridge: netfilter: fix information leak (CVE-2011-1080) + - Bluetooth: bnep: fix buffer overflow (CVE-2011-1079) + - netfilter: ip_tables: fix infoleak to userspace (CVE-2011-1171) + - netfilter: arp_tables: fix infoleak to userspace (CVE-2011-1170) + - [x86] Revert "x86: Cleanup highmap after brk is concluded" + (Closes: #621072) + - Squashfs: handle corruption of directory structure + - ext4: fix a double free in ext4_register_li_request + - ext4: fix credits computing for indirect mapped files + - nfsd: fix auth_domain reference leak on nlm operations + - nfsd4: fix oops on lock failure + - char/tpm: Fix unitialized usage of data buffer (CVE-2011-1160) + - ipv6: netfilter: ip6_tables: fix infoleak to userspace (CVE-2011-1172) + - econet: 4 byte infoleak to the network (CVE-2011-1173) + - sound/oss: remove offset from load_patch callbacks + (CVE-2011-1476, CVE-2011-1477) + - inotify: fix double free/corruption of stuct user (CVE-2011-1479) + For the complete list of changes, see: + http://www.kernel.org/pub/linux/kernel/v2.6/ChangeLog-2.6.38.3 + * Add stable 2.6.38.4, including: + - vm: Fix vm_pgoff wrap in stack expansion + - cifs: Always do is_path_accessible check in cifs_mount + - cifs: Check for private_data before trying to put it + - sn9c102: Restrict world-wirtable sysfs files + - UBIFS: Restrict world-writable debugfs files + - vm: Fix mlock() on stack guard page + - UBIFS: Fix assertion warnings + - perf: Fix task context scheduling + - fib: Add rtnl locking in ip_fib_net_exit + - l2tp: Fix possible oops on l2tp_eth module unload + - ipv6: Fix duplicate /proc/sys/net/ipv6/neigh directory entries. + - net_sched: fix ip_tos2prio + - pppoe: drop PPPOX_ZOMBIEs in pppoe_flush_dev + - xfrm: Refcount destination entry on xfrm_lookup + - vlan: Take into account needed_headroom + - bridge: Reset IPCB when entering IP stack on NF_FORWARD + - futex: Set FLAGS_HAS_TIMEOUT during futex_wait restart setup + - oom-kill: Remove boost_dying_task_prio() + - UBIFS: Fix oops when R/O file-system is fsync'ed + - sched: Fix erroneous all_pinned logic + - vmscan: all_unreclaimable() use zone->all_unreclaimable as a name + - next_pidmap: fix overflow condition + - proc: Do proper range check on readdir offset + - [powerpc] Fix oops if scan_dispatch_log is called too early + - ehci: Unlink unused QHs when the controller is stopped + - USB: Fix formatting of SuperSpeed endpoints in /proc/bus/usb/devices + - xhci: Fix math in xhci_get_endpoint_interval() + - xhci: Also free streams when resetting devices + - USB: Fix unplug of device with active streams + - bluetooth: Fix HCI_RESET command synchronization + - bridge: Reset IPCB in br_parse_ip_options + - ip: ip_options_compile() resilient to NULL skb route + For the complete list of changes, see: + http://www.kernel.org/pub/linux/kernel/v2.6/ChangeLog-2.6.38.4 + * [s390] pfault: fix token handling (Closes: #622570) + + -- Ben Hutchings Sat, 23 Apr 2011 03:17:53 +0100 + +linux-2.6 (2.6.38-3) unstable; urgency=low + + [ Ben Hutchings ] + * [ppc64] Add to linux-tools package architectures (Closes: #620124) + * [amd64] Save cr4 to mmu_cr4_features at boot time (Closes: #620284) + * appletalk: Fix bugs introduced when removing use of BKL + * ALSA: Fix yet another race in disconnection + * cciss: Fix lost command issue + * ath9k: Fix kernel panic in AR2427 + * ses: Avoid kernel panic when lun 0 is not mapped + * PCI/ACPI: Report ASPM support to BIOS if not disabled from command line + + [ Aurelien Jarno ] + * rtlwifi: fix build when PCI is not enabled. + + [ Martin Michlmayr ] + * rtlwifi: Eliminate udelay calls with too large values (Closes: #620204) + + -- Ben Hutchings Wed, 06 Apr 2011 13:53:30 +0100 + +linux-2.6 (2.6.38-2) unstable; urgency=low + + [ Ben Hutchings ] + * kconfig: Avoid buffer underrun in choice input (fixes FTBFS on mips) + * rt2800usb: Disable powersaving by default (Closes: #618930) + * b43: Enable B43_PHY_N (Closes: #619070) + * net/wireless: Enable RTL8192CE as module (Closes: #619051) + * Add configuration for Debian architecture ppc64, matching the + powerpc/powerpc64 flavour (Closes: #618976) + * Enable BOOT_PRINTK_DELAY (support for the boot_delay kernel parameter) + * [x86/!486] Enable TRANSPARENT_HUGEPAGE, TRANSPARENT_HUGEPAGE_MADVISE + (Closes: #618924) + * [x86/486] Enable X86_32_IRIS (IRIS power-off support) (Closes: #619493) + * Add stable 2.6.38.1, including: + - RDMA/cma: Fix crash in request handlers (CVE-2011-0695) + For the complete list of changes, see: + http://www.kernel.org/pub/linux/kernel/v2.6/ChangeLog-2.6.38.1 + * radeon: Add some sanity checks to obj info record parsing, thanks + to John Lindgren (Closes: #618847) + * [x86] KVM: remove isr_ack logic from PIC (Closes: #612105) + * Add stable 2.6.38.2, including: + - cgroups: If you list_empty() a head then don't list_del() it + - oom: Fix various bugs in victim task selection + - xen-kbdfront: Advertise either absolute or relative coordinates + - signal: Prevent rt_sigqueueinfo and rt_tgsigqueueinfo from spoofing + the signal code (CVE-2011-1182) + - ext3: Skip orphan cleanup on rocompat fs + - sysctl: Restrict write access to dmesg_restrict + - proc: Protect mm start_code/end_code in /proc/pid/stat + - nfsd: Fix internal NFSv4.1 operation flags to be non-overlapping + - nfsd: Fix wrong limit used in NFSv4 session creation + - USB: Do not pass negative length to snoop_urb() + - cdc-acm: Fix various bugs that can lead to a crash or memory corruption + - fs: Fix deadlock in pivot_root() + - fs: Assign sb->s_bdi to default_backing_dev_info if the bdi is going away + - x86: Cleanup highmap after brk is concluded + - NFS: Fix a hang/infinite loop in nfs_wb_page() + - ext4: Skip orphan cleanup if fs has unknown ROCOMPAT features + For the complete list of changes, see: + http://www.kernel.org/pub/linux/kernel/v2.6/ChangeLog-2.6.38.2 + * [amd64] media/rc: Enable IR_NUVOTON as module (Closes: #619937) + * [x86] media/rc: Enable IR_WINBOND_CIR as module + * [x86] Enable DEBUG_SET_MODULE_RONX (Closes: #619838) + * SCSI: Enable TARGET_CORE and related modules (Closes: #619298) + * [hppa] Remove .size directive for flush_alias_page (should fix FTBFS) + + [ Jurij Smakov ] + * Bump CONFIG_NR_CPUS on sparc to 256 to accomodate T2+ machines + (Closes: #619435) + * Bump ABI to 2 + + -- Ben Hutchings Tue, 29 Mar 2011 05:31:03 +0100 + +linux-2.6 (2.6.38-1) unstable; urgency=low + + * New upstream release: http://kernelnewbies.org/Linux_2_6_38 + + [ Ben Hutchings ] + * Move firmware-linux-free to separate source package (firmware-free) + * Move linux-base to separate source package + * net/can: Enable CAN_SLCAN as module (Closes: #617629) + * sound: Enable SND_ALOOP as module (Closes: #617869) + * Remove the Big Kernel Lock: + - adfs,appletalk,i810,ufs,usbip: Refactor locking + - hpfs: Disable HPFS_FS + * ext4: Disable FS_IOC_FIEMAP ioctl temporarily (together with fixes + for btrfs in 2.6.38, closes: #615035) + * sched: Build with SCHED_AUTOGROUP, but do not enable autogrouping by + default (use sysctl kernel.sched_autogroup_enabled=1) (Closes: #618486) + * Set ABI to 1 + + [ Aurelien Jarno] + * mips/malta-[45]kc: + - disable ATM, TR, WAN. + - synchronize options in malta-4kc and malta-5kc. + + -- Ben Hutchings Wed, 16 Mar 2011 04:47:57 +0000 + +linux-2.6 (2.6.38~rc8-1~experimental.1) experimental; urgency=low + + * New upstream release candidate + + [ Ben Hutchings ] + * [sparc] Fix .size directive for do_int_load + * [arm] Fix .size directive for xscale_dma_a0_map_area + + -- Ben Hutchings Sat, 12 Mar 2011 03:31:52 +0000 + +linux-2.6 (2.6.38~rc7-1~experimental.1) experimental; urgency=low + + [ maximilian attems ] + * New upstream release candidate + - swiotlb: Fix wrong panic (Closes: #615990) + * x86: Set DRM_I915_KMS on request by xorg team. + + [ Ben Hutchings ] + * [x86] Correct typos in label names in two asm functions (Closes: #616426) + * [x86] Enable VT6656, loading firmware from a separate file (requires + firmware-linux-nonfree 0.29) (Closes: #568454) + * perf: Build with libdwarf for improved analysis capabilities + * perf: Build with newt for improved user interface (Closes: #615868) + * aufs: Update for 2.6.38 + * aufs: Fix device numbers passed to security_path_mknod() + * dib0700/dib7000m: Add pid filtering (Closes: #614837) + * [powerpc] Revert fb module changes (Closes: #614221) + + -- Ben Hutchings Tue, 08 Mar 2011 02:34:04 +0000 + +linux-2.6 (2.6.38~rc6-1~experimental.1) experimental; urgency=low + + [ Ben Hutchings ] + * New upstream release candidate + - drm/radeon/kms: hopefully fix pll issues for real (v3) (Closes: #614566) + - r8169: Keep firmware in memory (Closes: #609538) + - [sparc] Fix misaligned tracing information which the module loader + does not support (Closes: #609371) + - [sh4] Export cpu_core_map to fix build failure with CONFIG_SFC=m. + - [armel] Support for Buffalo LS-CHL (Closes: #590105). + - btrfs: Prevent heap corruption in btrfs_ioctl_space_info() + (CVE-2011-0699) + - [s390] Remove task_show_regs (CVE-2011-0710) + * DFSG: Remove drivers/staging/ft1000/ft1000-pcmcia/boot.h, non-free + firmware for a driver we don't build (Closes: #609448) + * module,bug: Add TAINT_OOT_MODULE flag for modules that weren't built + in-tree + + [ maximilian attems ] + * [x86] linux-images suggest extlinux, s/grub/grub-pc/. (closes: #613909) + + [ Aurelien Jarno] + * mips/swarm: enable PATA drivers that have been lost during IDE -> PATA + conversion. + * mips/malta-[45]kc: set VIRTUALIZATION. + + -- maximilian attems Tue, 22 Feb 2011 14:36:33 +0100 + +linux-2.6 (2.6.37-2) unstable; urgency=low + + [ Ben Hutchings ] + * Add stable 2.6.37.1: + - libata: Set queue DMA alignment to sector size for ATAPI too + - USB: serial: add missing .usb_driver field in serial drivers + - USB: EHCI: fix scheduling while atomic during suspend + - zram: Fix data corruption issue + - brcm80211: Fix suspend/resume issue + - ath9k: Fix system hang when resuming from S3/S4 + - SCSI: Fix medium error problems with some arrays which can cause + data corruption + - libsas: Fix runaway error handler problem + - NFS: Don't use vm_map_ram() in readdir + - NFS: Fix NFSv3 exclusive open semantics + - /proc/kcore: Fix seeking + - mm: Fix migration hangs on anon_vma lock + - writeback: Stop background/kupdate works from livelocking other works + - writeback: Avoid livelocking WB_SYNC_ALL writeback + - ext4: Fix trimming of a single group + - af_unix: Avoid socket->sk NULL OOPS in stream connect security hooks + - virtio_net: Add schedule check to napi_enable call + - ptrace: Use safer wake up on ptrace_detach() + - net: Fix ip link add netns oops + - SMP: Fix smp_call_function_many() SMP race + - md: Ensure no IO request to get md device before it is properly + initialised + - PM/runtime: Don't enable interrupts while running in_interrupt + - [x86] mm: Avoid possible bogus TLB entries by clearing prev + mm_cpumask after switching mm + * Kbuild: Include localversion file in linux-headers-*; fixes output + of 'make kernelrelease' + * Add stable 2.6.37.2: + - nfsd: Memory corruption due to writing beyond the stat array + - xen: p2m: Correctly initialize partial p2m leaf + - av7110: Check for negative array offset (CVE-2011-0521) + - cred: Fix kernel panic upon security_file_alloc() failure + - btrfs: Prevent heap corruption in btrfs_ioctl_space_info() + (CVE-2011-0699) + - cred: Fix BUG() upon security_cred_alloc_blank() failure + - cred: Fix memory and refcount leaks upon security_prepare_creds() + failure + - PCI: Use security_capable() when checking capablities during config + space read + - [s390] Remove task_show_regs (CVE-2011-0710) + - PM/hibernate: Return error code when alloc_image_page() fails + - fs/partitions: Validate map_count in Mac partition tables + - workqueue: Wake up a worker when a rescuer is leaving a gcwq + - ALSA: caiaq - Fix possible string-buffer overflow + * Set ABI to 2 + + [ Martin Michlmayr ] + * [armel/orion5x] Re-enable all devices. + * [armel/kirkwood] Re-enable Seagate FreeAgent DockStar support. + + -- Ben Hutchings Sat, 26 Feb 2011 03:16:16 +0000 + +linux-2.6 (2.6.37-1) unstable; urgency=low + + [ Ben Hutchings ] + * [arm] ixp4xx: Revert build fix, now applied upstream which resulted + in another build failure + * r8169: Keep firmware in memory (Closes: #609538) + * r8712u: Firmware filename is rtlwifi/rtl8712u.bin (Closes: #602450) + * [sparc] Fix misaligned tracing information which the module loader + does not support (Closes: #609371) + * Set ABI to 1 + * Add aufs2.1, marked as staging (Closes: #573189, #613248) + * fs/notify: Enable FANOTIFY (Closes: #599877) + * acer-wmi, aic94xx, asus_acpi, iscsi, janz-ican3, rtc-ds1511, tc1100-wmi: + Restrict write permissions on files in procfs/sysfs + * nbd: Remove module-level ioctl mutex mistakenly introduced in 2.6.37 + * [x86] crypto: Re-enable AES_NI_INTEL as module (Closes: #597658) + * [powerpc] video/fb: Enable FB_VGA16 as built-in; build FB_CT65550, + FB_NVIDIA, FB_MATROX, FB_RADEON, FB_ATY128, FB_ATY, FB_SIS, FB_3DFX + as modules (Closes: #609615) + + [ Aurelien Jarno ] + * [sh4] Export cpu_core_map to fix build failure with CONFIG_SFC=m. + * [mips/5kc-malta] Enable CONFIG_VGA_CONSOLE. + + [ Bastian Blank ] + * Enable CIFS fscache and ACL support. + * Enable Xen PCI frontend. + + -- Ben Hutchings Tue, 15 Feb 2011 04:14:09 +0000 + +linux-2.6 (2.6.37-1~experimental.1) experimental; urgency=low + + * New upstream release: http://kernelnewbies.org/Linux_2_6_37 + - starfire: Fix dma_addr_t size test for MIPS (fixes FTBFS) + - watchdog: Improve failure message and documentation (Closes: #608138) + + [ Ben Hutchings ] + * i2c-i801: Include (fixes FTBFS on alpha) + * [x86] Staging: Enable R8712U as module (r8712u, replacing r8192s_usb) + - Enable loading external firmware, thanks to Stefan Lippers-Hollmann + * linux-base: Look for GRUB 1 configuration in both /boot/grub and + /boot/boot/grub (Closes: #607863) + * btrfs: Require CAP_SYS_ADMIN for filesystem rebalance (Closes: #608185) + * r8169: Change RTL8111D/RTL8168D initialisation and firmware loading to + match upstream version (Closes: #596390 with firmware-realtek 0.28) + + -- Ben Hutchings Wed, 05 Jan 2011 02:44:28 +0000 + +linux-2.6 (2.6.37~rc7-1~experimental.1) experimental; urgency=low + + * New upstream release candidate + - [mips] Rename mips_dma_cache_sync back to dma_cache_sync (fixes FTBFS) + + [ Ben Hutchings ] + * debian/copyright: Add explanation of indirect linking of perf to + OpenSSL (Closes: #606520) + * [powerpc,x86] Enable PATA_PCMCIA (Closes: #606324) + * Disable BLK_DEV_IDECS + * [alpha] Use libata-based drivers for most PATA controllers + * [powerpc] linux-base: Run ybin after updating yaboot.conf + (Closes: #607284) + * Update debconf template translations: + - Add Catalan (Jordi Mallach) + - Update Danish (Joe Hansen) + - Update Spanish (Omar Campagne, Javier Fernández-Sanguino) + - Add Italian (Luca Bruno) + - Update Japanese (Nobuhiro Iwamatsu) + - Add Brazilian Portugese (Flamarion Jorge) + - Update Vietnamese (Clytie Siddall) + * debian/bin/test-patches: Restrict patches to featureset when building + with a featureset (thanks to Tim Small) + * Recommend use of 'make deb-pkg' to build custom kernel packages + * [ia64] drm/nouveau: Revert unnecessary exclusion of ACPI support code + + -- Ben Hutchings Sat, 25 Dec 2010 16:21:09 +0000 + +linux-2.6 (2.6.37~rc5-1~experimental.3) experimental; urgency=low + + * Really apply patches added in the previous version + + -- Ben Hutchings Sat, 11 Dec 2010 16:27:21 +0000 + +linux-2.6 (2.6.37~rc5-1~experimental.2) experimental; urgency=low + + * Second attempt to fix FTBFS on various architectures: + - [alpha] Do not use -Werror for arch/alpha + - [arm/ixp4xx] Rename FREQ macro to avoid collisions (v2) + - drm/nouveau: Only select ACPI_VIDEO if its dependencies are met + - [mips] Change mips_sc_is_activated() to do what the comment says + + -- Ben Hutchings Sat, 11 Dec 2010 06:27:51 +0000 + +linux-2.6 (2.6.37~rc5-1~experimental.1) experimental; urgency=low + + * New upstream release candidate + + [ Ben Hutchings ] + * Attempt to fix FTBFS on various architectures: + - [alpha] Do not use -Werror for arch/alpha/kernel + - [arm/ixp4xx] Rename FREQ macro to avoid collisions + - [mips] Add the necessary parameter to mips_sc_is_activated() + + -- Ben Hutchings Fri, 10 Dec 2010 02:59:12 +0000 + +linux-2.6 (2.6.37~rc4-1~experimental.1) experimental; urgency=low + + * New upstream release candidate + + [ maximilian attems ] + * Newer Standards-Version 3.9.1 without changes. + + [ Martin Michlmayr ] + * Add ixp4xx build fix from Arnaud Patard (Closes: #602669) + * [armel/kirkwood] Enable sound. + * ASoC: Add support for OpenRD Ultimate (Arnaud Patard). + + [ Ben Hutchings ] + * Enable PM_ADVANCED_DEBUG (Closes: #603254) + * Disable X.25 protocol and related drivers. This 10 year old experiment + has stalled and is a source of security bugs. + * Disable Econet protocol. It is unmaintained upstream, probably broken, + and of historical interest only. + * af_802154,decnet,rds: Disable auto-loading as mitigation against local + exploits. These protocol modules are not widely used and can be + explicitly loaded or aliased on systems where they are wanted. + * debian/rules: Change 'clean' rule to remove package build directories + even after a version bump, thanks to Timo Juhani Lindfors + * dm: Deal with merge_bvec_fn in component devices better (Closes: #604457) + * 9p: Enable 9P_FS_POSIX_ACL + * netfilter/ipvs: Enable IP_VS_PE_SIP as module + * net/sched: Enable NET_ACT_CSUM as module + * can: Enable CAN_SJA1000_ISA, CAN_TSCAN1 as modules + * block: Enable BLK_DEV_RBD (Rados) as module + * sensors: Enable AD525X_DPOT_SPI, APDS9802ALS, ISL29020, SENSORS_BH1780, + SENSORS_BH1770, SENSORS_APDS990X, HMC6352, BMP085 as modules + * scsi: Enable SCSI_CXGB4_ISCSI as module + * net/ppp: Enable PPTP as module + * net: Enable BNA, SMCTR, USB_NET_CX82310_ETH as modules + * IR: Enable IR_RC5_SZ_DECODER as module + * [i386] IR: Enable IR_NUVOTON as module + * V4L: Enable GSPCA_KONICA, GSPCA_XIRLINK_CIT as modules + * DVB: Enable USB_LME2510 as module + * [i386] sound/isa: Enable SND_AZT1605, SND_AZT2316, SND_JAZZ16, + SND_MSND_PINNACLE, SND_MSND_CLASSIC as modules + * HID: Enable HID_UCLOGIC, HID_WALTOP, HID_ROCCAT_PYRA as modules + * hid-logitech: Enable LOGIWII_FF + * Enable USB_UAS (USB-attached SCSI) as module + * serial: Enable USB_SERIAL_SAMBA as module + * drm/nouveau: Enable DRM_I2C_SIL164 as module + * perf: Use libiberty, not libbfd, for symbol demangling + (Closes: #604750, #606050) + * firmware: Correct copyright information and add source for CIS files + (accidentally omitted when merging from sid branch) + + -- Ben Hutchings Sun, 05 Dec 2010 23:19:38 +0000 + +linux-2.6 (2.6.36-1~experimental.1) experimental; urgency=low + + * New upstream release: http://kernelnewbies.org/Linux_2_6_36 + - writeback: always use sb->s_bdi for writeback purposes (Closes: #599466) + - i7core_edac: fix panic in udimm sysfs attributes registration + (Closes: #600528) + + [ Ben Hutchings ] + * qla4xxx: Fix build on some architectures lacking 64-bit I/O + (Closes: #598503) + * [x86] Enable modular TM6000, TM6000_ALSA, TM6000_DVB + * [x86] Staging: fix Makefile so brcm80211 will actually build + (Closes: #599465) + * [x86] Enable modular IDEAPAD_ACPI (Closes: #599444) + * perf: Enable Perl and Python scripting + - Move scripts to /usr/share/perf_-core (Closes: #599624) + * crypto: Explicitly enable algorithm self-tests (Closes: #599441) + * [x86] Skip looking for ioapic overrides when ioapics are not present + (Closes: #598533) + * [x86] ata_piix: Add device ID for ICH4-L + * [armel/iop32x,ia64,x86] Disable BLK_DEV_PIIX as obsolete + * [amd64] Disable DRM_I810; i81x chipsets do not support 64-bit processors + * [x86] Disable DRM_I830; the i915 driver is now used instead + + [ Martin Michlmayr ] + * Kirkwood: restrict the scope of the PCIe reset workaround + + -- maximilian attems Wed, 27 Oct 2010 13:23:11 +0200 + +linux-2.6 (2.6.36~rc6-1~experimental.1) experimental; urgency=low + + * New upstream release candidate + - drm/i915: Ensure that the crtcinfo is populated during mode_fixup() + (Closes: #592415) + - USB: fix bug in initialization of interface minor numbers + (Closes: #598207) + + [ Ben Hutchings ] + * linux-base: Remove dependency on libapt-pkg-perl (Closes: #589996, really) + * Disable INTEL_IDLE. It can no longer be built as a module and so was + actually disabled by the previous version, but I do not consider it ready + to build-in yet. + * Enable modular NETFILTER_XT_TARGET_CHECKSUM, NETFILTER_XT_TARGET_IDLETIMER, + NETFILTER_XT_MATCH_CPU, NETFILTER_XT_MATCH_IPVS + * Reenable LOCKUP_DETECTOR, accidentally disabled by the previous version + * Enable modular AD525X_DPOT_I2C, ATM_NICSTAR, CAN_ESD_USB2, CHELSIO_T4VF, + FIREWIRE_NOSY, HID_ACRUX_FF, HID_ELECOM, INFINIBAND_CXGB4, INFINIBAND_QIB, + MTD_PCMCIA, ORINOCO_USB, PPS_CLIENT_LDISC, RAMOOPS, SERIAL_MFD_HSU, + UIO_NETX, USB_GSPCA_SPCA1528, USB_GSPCA_SQ930X, USB_SERIAL_SSU100, + USB_SERIAL_ZIO, WL1271_SDIO, WL1271_SPI + * Enable BT_HCIUART_ATH3K, USB_SERIAL_MOS7715_PARPORT + * [x86] Enable modular SENSORS_PKGTEMP + * Enable modular IR_CORE, RC_MAP, all IR decoders, IR_IMON, IR_MCEUSB, + IR_ENE, IR_STREAMZAP + * [x86] Enable modular LIRC drivers + + -- Ben Hutchings Sun, 03 Oct 2010 21:18:41 +0100 + +linux-2.6 (2.6.36~rc5-1~experimental.1) experimental; urgency=low + + * New upstream release candidate + - 3c59x: Fix deadlock in vortex_error() (Closes: #595554) + + [ Ben Hutchings ] + * speakup: Update to match Debian package version 3.1.5.dfsg.1-1 + * [x86] Add brcm80211 driver for Broadcom 802.11n wireless network + controllers + * [x86] Set XEN_PLATFORM_PCI=y + + -- Ben Hutchings Tue, 21 Sep 2010 02:15:33 +0100 + +linux-2.6 (2.6.35-1~experimental.3) experimental; urgency=low + + [ Ritesh Raj Sarraf ] + * Add .gnu_debuglink information into kernel modules (Closes: #555549) + + [ Ben Hutchings ] + * linux-base: Remove dependency on libapt-pkg-perl (Closes: #589996) + * Update debconf template translations: + - Czech (Michal Simunek) (Closes: #590546) + - Portugese (Américo Monteiro) (Closes: #590557) + - French (David Prévot) (Closes: #591149) + - Russian (Yuri Kozlov) (Closes: #591241) + - Swedish (Martin Bagge) (Closes: #592045) + - German (Holger Wansing) (Closes: #592226) + * [x86] Enable samsung-laptop driver + * [sparc] Enable XVR1000 driver (Closes: #574243) + * Change BLK_CGROUP from module to built-in so that cfq can be the + default I/O scheduler again (Closes: #593720) + * [mipsel/loongson-2f] Enable smtcfb (FB_SM7XX) driver (Closes: #594642) + + [ Ian Campbell ] + * Fixes/overrides for Linitan warnings: + - Add "(meta package)" to short description of linux-headers + metapackages, resolves empty-binary-package. + - Add dependency on ${misc:Depends} to all packages, resolves + debhelper-but-no-misc-depends. Required update to gencontrol.py to + augment rather than override headers_arch_depends read from templates. + - Override dbg-package-missing-depends for linux-image-*-dbg. It is not + necessary to install the kernel image package to use the dbg package + since the dbg package already contains a complete image with symbols. + + [ Bastian Blank ] + * Disable Ralink staging drivers, the in-tree ones reached "works-for-me" + status. + + [ Aurelien Jarno ] + * Fix netfilter CONFIG_COMPAT support. + * [sh4] set VIRTUALIZATION. + * [mips] Add an octeon flavour. + + [ maximilian attems] + * Add stable 2.6.35.3 and 2.6.35.4. + + -- maximilian attems Mon, 06 Sep 2010 15:16:17 +0200 + +linux-2.6 (2.6.35-1~experimental.2) experimental; urgency=low + + * images: Nuke modules.devname on removal. (closes: #590607) + * Add stable 2.6.35.1 and 2.6.35.2. + * mm: fix page table unmap for stack guard page properly. + * mm: fix up some user-visible effects of the stack guard page. + * config.loongson-2f: Enable USB and RTC for loongson-2f. + Thanks Geert Stappers (closes: #583689) + + -- maximilian attems Mon, 16 Aug 2010 23:49:32 +0200 + +linux-2.6 (2.6.35-1~experimental.1) experimental; urgency=low + + * New upstream release: http://kernelnewbies.org/Linux_2_6_35 + - [ia64] Fix crash when gcore reads gate area (Closes: #588574) + - tpm_tis: fix subsequent suspend failures (Closes: #591031) + + * topconfig enable BLK_CGROUP, NETFILTER_XT_TARGET_TEE, VMWARE_BALLOON, + ATH9K_HTC, TOUCHSCREEN_HAMPSHIRE, TOUCHSCREEN_TPS6507X, SND_ASIHPI, + SQUASHFS_XATTRS, RCU_FAST_NO_HZ, COMPACTION, IP_MROUTE_MULTIPLE_TABLES, + IPV6_MROUTE_MULTIPLE_TABLES, NET_DCCPPROBE, NET_SCTPPROBE, L2TP, + BT_L2CAP_EXT_FEATURES, MTD_NAND_RICOH, ATA_BMDMA, KEYBOARD_QT2160, + N_GSM, SENSORS_SHT15, SENSORS_EMC1403, SENSORS_ADS7871, SENSORS_TMP102, + SND_ES1968_INPUT, SND_MAESTRO3_INPUT, LEDS_LT3593, LEDS_MC13783. + * x86 enable INTEL_IDLE, ACPI_HED, ACPI_APEI, ACPI_APEI_GHES, + PCI_CNB20LE_QUIRK. + + -- maximilian attems Tue, 03 Aug 2010 16:21:16 +0200 + +linux-2.6 (2.6.35~rc6-1~experimental.1) experimental; urgency=low + + * New upstream release candidate + - drm/i915: Add 'reclaimable' to i915 self-reclaimable page allocations + (Closes: #534422) + + [ Ben Hutchings ] + * [!x86] Disable FB_VIA; these GPUs are only found on x86 motherboards + * ds2782_battery: Fix build failure on several architectures + * postinst: Remove support for 'default' boot loaders. Warn users on + upgrade if the current configuration may rely on this. + * [i386/686] Remove AMD K6 from the list of supported processors; it + does not implement the CMOV instruction + * 3c59x: Fix call to mdio_sync() with the wrong argument (Closes: #589989) + + -- Ben Hutchings Sat, 24 Jul 2010 01:00:26 +0100 + +linux-2.6 (2.6.35~rc5-1~experimental.1) experimental; urgency=low + + * New upstream release candidate + + [ Ben Hutchings ] + * Consistently name the linux-tools package and perf binary using the + upstream version without any -rcN suffix + + -- Ben Hutchings Tue, 13 Jul 2010 01:09:27 +0100 + +linux-2.6 (2.6.35~rc4-1~experimental.1) experimental; urgency=low + + * New upstream snapshot + - [hppa] clear floating point exception flag on SIGFPE signal + (Closes: #559406) + - Add mantis and hopper DVB drivers (Closes: #577264) + - eeepc-laptop: Disable wireless hotplug on more models where the + controller is not at the expected address (Closes: #576199) + - qcserial: Add support for Qualcomm Gobi 2000 devices + (Closes: #585661) + - radeon: Fix MacBook Pro connector quirk (Closes: #585943) + - r8169: Fix MDIO timing (Closes: #583139) + - asix: fix setting mac address for AX88772 (Closes: #587580) + - Update Marvell CESA (mv_cesa) driver (Closes: #585790): + + [ Ben Hutchings ] + * ipr: add writeq definition if needed (Closes: #584840) + * [mips] Fix boot from ATA hard drives (Closes: #584784): + - Set io_map_base for several PCI bridges lacking it + - Replace per-platform built-in IDE drivers with libata-based drivers + - Enable BLK_DEV_SD as built-in on all platforms + * Update Spanish debconf templates, thanks to Omar Campagne + (Closes: #580538) + * [powerpc] Enable pata_amd driver, replacing amd74xx + * linux-base: Don't identify LVM2 PVs by UUID (Closes: #585852) + * Move NEWS to linux-latest-2.6 (Closes: #586401) + * 3c59x: Change locking to avoid use of disable_irq() (Closes: #586967) + * Enable IPv6 support for IPVS (IP_VS_IPV6) (Closes: #584549) + * linux-base: If the disk ID update process fails, give the user a + chance to retry or change their answers (Closes: #585609) + * ipv6: Clamp reported valid_lft to a minimum of 0 (Closes: #514644) + * ipv6: Use interface max_desync_factor instead of static default + (Closes: #514646) + * [ia64, powerpc, sparc, x86] Enable KPROBES and KRETPROBES + (Closes: #584130) + * r8192s_usb: Fix various bugs: + - Clean up in case of an error in module initialisation + - Rename and remove proc directories correctly if an interface is + not called wlan0 (Closes: #582972) + - Correct device ID table (Closes: #584945, #587985) + * [x86] Enable r8192u_usb driver + * Add linux-tools- package containing the perf tool + (Closes: #548715) + * Enable SERIAL_USB_TI (Closes: #588096) and SERIAL_USB_WHITEHEAT + * [x86] Enable EDAC_I7CORE + + [ maximilian attems ] + * Enable DRM_RADEON_KMS. + + [ Martin Michlmayr ] + * OpenRD-Base: revert patch "allow SD/UART1 selection" since it + never made it upstream. + * ARM: update mach types. + * Add support for OpenRD-Ultimate. + * QNAP TS-11x/TS-21x: Add MPP44 (board ID). + * Add support for the HP t5325 Thin Client. + * m25p80: Add support for Macronix 25L8005. + * [armel/kirkwood] Enable FB_XGI and FRAMEBUFFER_CONSOLE. + * [armel] Make MOUSE_PS2 modular. + * [armel] Build INPUT_UINPUT for all flavours. + * [armel/kirkwood] Enable FB_UDL. + * [armel] Disable PARPORT_PC (Closes: #588164) + + [ Bastian Blank ] + * Disable mISDN support for NETJet cards. The driver binds a generic PCI + bridge. + * Disable ISDN4Linux drivers. + + -- Ben Hutchings Sat, 10 Jul 2010 21:53:57 +0100 + +linux-2.6 (2.6.34-1~experimental.2) experimental; urgency=low + + [ Ben Hutchings ] + * [x86] Reenable rtl8192su, accidentally disabled in previous version + (Closes: #580740) + * writeback: Update dirty flags in two steps + * writeback: ensure that WB_SYNC_NONE writeback with sb pinned is sync + (Closes: #582808) + * writeback: fix non-integrity write-back + * [mipsel] Add a loongson-2f flavour + * [mipsel] Loongson: Define rtc device on MC146818-equipped systems + * Make gcc-4.4 the default compiler + * [ia64] Hardcode the output of the scripts under arch/ia64/scripts so + that we can build out-of-tree modules correctly (refresh and re-add + dropped patch) (Closes: #392592) + * [ia64] Enable SGI SN support and mspec driver (Closes: #582224) + * iwlwifi: Disable QoS when connected to a non-QoS-capable AP + (Closes: #578262) + * [x86] Disable e_powersaver cpufreq driver as unsafe. It has already + been blacklisted by cpufrequtils. The acpi-cpufreq driver can be used + instead on some VIA C7 systems. (Closes: #566208) + * [amd64] ext4: Fix compat EXT4_IOC_ADD_GROUP (used by online resize) + * Install debug kernel image in /usr/lib/debug/boot (Closes: #582810) + * Build inet_lro as a module + * [sparc] Enable CONFIG_FB_XVR500, CONFIG_FB_XVR2500 (Closes: #508108) + + [ maximilian attems ] + * topconfig enable CFQ_GROUP_IOSCHED, MFD_WM8994, REGULATOR_MAX8649, + REGULATOR_WM8994, VHOST_NET, BT_ATH3K, CRYPTO_PCRYPT. + * [x86] Enable X86_PCC_CPUFREQ, VGA_SWITCHEROO (closes: #582637). + + [ Martin Michlmayr ] + * QNAP TS-419P: Export GPIO indicating jumper setting of JP1. + + [ dann frazier ] + * [hppa] clear floating point exception flag on SIGFPE signal + (Closes: #559406) + + [ Aurelien Jarno ] + * [sh4] fix sh_tmu clocksource following recent nohz changes. + + [ Moritz Muehlenhoff ] + * Enable X86 board specific fixups for reboot (Closes: #536537) + + -- Ben Hutchings Sun, 06 Jun 2010 18:53:04 +0100 + +linux-2.6 (2.6.34-1~experimental.1) experimental; urgency=low + + * New upstream release: http://kernelnewbies.org/Linux_2_6_34 + + * New upstream release + - rtl8192su: Add IDs for several more devices (Closes: #580740) + + [ maximilian attems ] + * topconfig enable IPV6_SIT_6RD, NETFILTER_XT_TARGET_CT, IP_VS_PROTO_SCTP, + NF_CONNTRACK_ZONES, CAN_PLX_PCI, TI_DAC7512, SCSI_HPSA, PATA_TOSHIBA, + MACVTAP, CHELSIO_T4, IXGBEVF, QLCNIC, LIBERTAS_MESH, + USB_NET_SMSC75XX, USB_SIERRA_NET, VIDEO_CX18_ALSA, USB_GSPCA_BENQ, + USB_GSPCA_CPIA1, USB_GSPCA_OV534_9, USB_GSPCA_SN9C2028, RADIO_TEF6862, + RADIO_SAA7706H, SND_USB_UA101, CEPH_FS, MICREL_PHY, KSZ884X_PCI, + SENSORS_ADT7411, SENSORS_ASC7621, VIDEO_TLG2300, DVB_USB_AZ6027, + DVB_NGENE, HID_3M_PCT, LOGIG940_FF, HID_MAGICMOUSE, HID_MOSART, + HID_NTRIG, HID_QUANTA, HID_STANTUM, HID_WACOM, USB_SERIAL_QCAUX, + USB_SERIAL_VIVOPAY_SERIAL, MMC_RICOH_MMC, LEDS_DELL_NETBOOKS, LOGFS. + * [x86] Enable EEEPC_WMI. + * Fix backlight support on some recent Thinkpads. + * acpi: Fall back to manually changing SCI_EN. + * Explicitly pass in whether sb is pinned or not. + + [ Ben Hutchings ] + * Prepare debconf templates for translation (Closes: #576758) + * [x86] Enable r8187se driver, previously named rtl8187se + + [ Aurelien Jarno ] + * mips/swarm: fix boot from IDE based media (Sebastian Andrzej Siewior) + (closes: #466977). + * mips/*: remove SND_* options, as they are already enabled in topconfig. + + -- maximilian attems Wed, 19 May 2010 17:06:13 +0200 + +linux-2.6 (2.6.33-1~experimental.5) experimental; urgency=low + + [ Ian Campbell ] + * Include Xen hypervisor in reportbug "related to" list. + + [ maximilian attems] + * Add stable 2.6.33.2. + + [ Ben Hutchings ] + * [x86] Enable ramzswap driver (Closes: #573912) + * [x86] Re-enable rt2860sta and rt2870sta drivers which were accidentally + disabled when moving to Linux 2.6.33 (Closes: #576723) + * Add stable 2.6.33.3: + - ACPI: EC: Allow multibyte access to EC; fixes temperature monitoring + on some Dell laptops (Closes: #563313) + + [ Aurelien Jarno ] + * Add support for sh4 architecture, patch by Nobuhiro Iwamatsu + (Closes: #569034) + * [mips*/*malta] Remove options that are present in topconfig. + + -- maximilian attems Wed, 05 May 2010 16:38:53 +0200 + +linux-2.6 (2.6.33-1~experimental.4) experimental; urgency=low + + [ Ben Hutchings ] + * Include aufs2, marked as staging (Closes: #573189) + * Remove /usr/include/drm from linux-libc-dev; let libdrm-dev provide it + again (Closes: #572067) + * [x86] Enable rtl8192su driver using external firmware + + [ maximilian attems] + * Add stable 2.6.33.1. + + -- maximilian attems Wed, 17 Mar 2010 18:13:53 +0100 + +linux-2.6 (2.6.33-1~experimental.3) experimental; urgency=low + + [ Ben Hutchings ] + * Fix regexp for binNMU versions in modules/rules.include (Closes: #524632) + * linux-base: Fix bugs and improve libata transition code: + - Fix calls to disk_id_to_path (renamed to id_to_path) (Closes: #572283) + - Don't show empty list of devices to be relabelled + - Don't update udev CD rules unnecessarily + - Show the device paths to be added to udev CD rules + - Ignore nonexistent devices and properly handle devices of unknown + filesystem type (Closes: #572341, #572445) + - Don't accept empty filesystem labels as identifiers (Closes: #572438) + - For consistency with fresh installations, use or assign UUIDs rather + than labels where both are available (Closes: #572376) + - Replace CD/DVD/BD device names with udev-provided persistent aliases + - Fix update of boot device name for LILO and related loaders + - Update uswsusp resume device name + + -- maximilian attems Thu, 11 Mar 2010 05:58:02 +0100 + +linux-2.6 (2.6.33-1~experimental.2) experimental; urgency=low + + [ Ben Hutchings ] + * Add missing debconf templates for linux-base (Closes: #571558) + * Fix libata transition code for GRUB 1 config (Closes: #571662) + + -- maximilian attems Sun, 28 Feb 2010 17:48:11 +0100 + +linux-2.6 (2.6.33-1~experimental.1) experimental; urgency=low + + * New upstream release: http://kernelnewbies.org/Linux_2_6_33 + + [ maximilian attems] + * [topconfig] set BLK_DEV_DRBD, DRM_NOUVEAU, DRM_NOUVEAU_BACKLIGHT, + DRM_VMWGFX, SENSORS_LM73, SENSORS_AMC682, SENSORS_LIS3_I2C, + SENSORS_MC13783_ADC, TOUCHSCREEN_DYNAPRO, TOUCHSCREEN_MC13783, + GIGASET_CAPI, LEDS_DAC124S085, LEDS_INTEL_SS4200, LEDS_INTEL_SS4200, + DVB_FIREDTV, DVB_USB_EC168, SOC_CAMERA_MT9T112, SOC_CAMERA_OV9640, + USB_GSPCA_PAC7302, USB_GSPCA_STV0680, AD525X_DPOT, CAN_MCP251X, + RT2800PCI, REGULATOR_MAX8660, RTC_DRV_BQ32K, RTC_DRV_MSM6242, + RTC_DRV_RP5C01, VMWARE_PVSCSI, SCSI_PM8001, WIMAX_IWMC3200_SDIO, + INPUT_SPARSEKMAP, SERIO_ALTERA_PS2, MANTIS_CORE, DVB_MANTIS, + DVB_HOPPER. + * [x86] set CS5535_MFGPT, SENSORS_K10TEMP, GEODE_WDT, MSI_WMI, + TOSHIBA_BT_RFKILL, ACPI_CMPC, CRYPTO_GHASH_CLMUL_NI_INTE. + + [ Ben Hutchings ] + * Use libata-based drivers for most PATA controllers (Closes: #444182): + - pata_triflex replaces triflex + - pata_atiixp replaces atiixp + - pata_ns87415 replaces ns87415 + - pata_sc1200 replaces sc1200 + - pata_cs5536 replaces cs5536 + - pata_amd replaces amd74xx + - pata_sis replaces sis5513 + - pata_rz1000 replaces rz1000 + - pata_efar replaces slc90e66 + - pata_pdc202xx_old replaces pdc202xx_old + - pata_pdc2027x replaces pdc202xx_new + - pata_cs5520 replaces cs5520 + - pata_cs5530 replaces cs5530 + - pata_cmd64x replaces cmd64x + - pata_sil680 replaces siimage + - pata_ali replaces alim15x3 + - pata_via replaces via82cxxx + - pata_serverworks replaces serverworks + - pata_artop replaces aec62xx + - pata_it821x replaces it821x + - ata_piix, pata_oldpiix, pata_mpiix mostly replace piix + - ata_generic, pata_ns87410, pata_netcell replace ide-pci-generic + * Add libata transition script + + -- maximilian attems Thu, 25 Feb 2010 15:21:38 +0100 + +linux-2.6 (2.6.32-30) unstable; urgency=high + + [ Ben Hutchings ] + * mpt2sas: Fix incorrect scsi_dma_map error checking (Closes: #606968) + * Update Spanish debconf template translation (Omar Campagne, Javier + Fernández-Sanguino) (Really closes: #600694) + * intel-iommu: Force-disable IOMMU for iGFX on broken Cantiga revisions + (Closes: #607095) + * [powerpc] linux-base: Run ybin after updating yaboot.conf + (Closes: #607284) + * tehuti: Firmware filename is tehuti/bdx.bin + * iwlwifi: Reduce a failure-prone memory allocation (Closes: #599345) + * linux-base: Look for GRUB 1 configuration in both /boot/grub and + /boot/boot/grub (Closes: #607863) + * rt28x0: Add ieee80211_regdom module parameter mimicking cfg80211 as a + workaround for incorrect region code in NVRAM (Closes: #594561) + * btrfs: Require CAP_SYS_ADMIN for filesystem rebalance (Closes: #608185) + * [x86] dell-laptop: Enable for some newer Dell models + * r8169: Change RTL8111D/RTL8168D initialisation and firmware loading to + match upstream version (Closes: #596390 with firmware-realtek 0.28) + * Add stable 2.6.32.28: + - NFS: Fix panic after nfs_umount() + - usb-storage/libusual: Add support for Samsung YP-CP3 MP4 Player, + thanks to Vitaly Kuznetsov (Closes: #555835) + - bfa: Fix system crash when reading sysfs fc_host statistics + (CVE-2010-4343) + - IB/uverbs: Handle large number of entries in poll CQ (CVE-2010-4649) + - orinoco: Fix TKIP countermeasure behaviour (CVE-2010-4648) + - mm: Add security_file_mmap check to install_special_mapping + (CVE-2010-4346) + - sctp: Fix a race between ICMP protocol unreachable and connect() + (CVE-2010-4526) + - hvc_console: Fix race between hvc_close and hvc_remove (CVE-2010-2653) + (previously applied as an isolated fix in 2.6.32-25) + - fuse/cuse: Verify ioctl retries (CVE-2010-4650) + * [powerpc] Restore device tree source files to linux-image packages + (Closes: #609155) + + [ maximilian attems ] + * [openvz] Reenable NF_CONNTRACK_IPV6. (closes: #580507) + * cifs: fix another memleak, in cifs_root_iget. + * b43: Fix warning at drivers/mmc/core/core.c:237 in mmc_wait_for_cmd. + * drm/radeon/kms: MC vram map needs to be >= pci aperture size. + * drm/radeon/kms: make sure blit addr masks are 64 bit. + * drm/radeon/kms: fix handling of tex lookup disable in cs checker on r2xx. + * drm/i915: Free hardware status page on unload when physically mapped. + * drm/i915/overlay: Ensure that the reg_bo is in the GTT prior to writing. + * drm/radeon/kms/atom: set sane defaults in atombios_get_encoder_mode(). + * drm/radeon/kms: fix typos in disabled vbios code. + * drm/radeon/kms: add workaround for dce3 ddc line vbios bug. + * drm/radeon/kms: fix interlaced and doublescan handling. + * drm/i915/sdvo: Always add a 30ms delay to make SDVO TV detection reliable. + * wireless: b43: fix error path in SDIO. + * drm/radeon/kms: don't apply 7xx HDP flush workaround on AGP. + + [ Ian Campbell ] + * xen: backport TTM patches to use PCI API. Fixes PCIe GPU (specifically + Radeon and Nouveau) on Xen (Closes: #601341). + * xen: netback: drop SKBs which are GSO but do not have a partial + checksum set (Closes: #608144). + + [ dann frazier ] + * exec: make argv/envp memory visible to oom-killer (CVE-2010-4243) + * irda: Fix information leak in IRLMP_ENUMDEVICES (CVE-2010-4529) + * af_unix: limit unix_tot_inflight (CVE-2010-4249) + + [ Moritz Muehlenhoff ] + * net: ax25: fix information leak to userland (CVE-2010-3875) + * net: packet: fix information leak to userland (CVE-2010-3876) + * net: tipc: fix information leak to userland (CVE-2010-3877) + * inet_diag: Make sure we actually run the same bytecode we audited + (CVE-2010-3880) + * econet: Fix crash in aun_incoming() (CVE-2010-4342) + + -- Ben Hutchings Tue, 11 Jan 2011 05:42:11 +0000 + +linux-2.6 (2.6.32-29) unstable; urgency=high + + [ Ben Hutchings ] + * megaraid_sas: Add support for 'entry-level' SAS controllers including + the 9240 family (Closes: #604083) + * tcp: Make TCP_MAXSEG minimum more correct (refinement of fix for + CVE-2010-4165) + * l2tp: Fix UDP socket reference count bugs in the pppol2tp driver + (Closes: #604748) + * USB: Retain device power/wakeup setting across reconfiguration; + don't enable remote wakeup by default (Closes: #605246) + * dm: Deal with merge_bvec_fn in component devices better (Closes: #604457) + * Update Spanish debconf template translation (Aaron H Farias Martinez) + (Closes: #600694) + * perf: Use libiberty, not libbfd, for symbol demangling + (Closes: #590226, #606050) + * [x86] Add support for Fintek hardware watchdogs (Closes: #601187) + - resource: Add shared I/O region support + - hwmon: f71882fg: Use a muxed resource lock for the Super I/O port + - watchdog: Add f71808e_wdt driver + * bcm5974: Add reporting of multitouch events (Closes: #605450) + * fusion: Set FUSION_MAX_SGE=128, the upstream default (Closes: #606096) + * Add stable 2.6.32.27: + - block: limit vec count in bio_kmalloc() and bio_alloc_map_data() + - block: take care not to overflow when calculating total iov length + - block: check for proper length of iov entries in blk_rq_map_user_iov() + (CVE-2010-4163) + - net: clear heap allocation for ETHTOOL_GRXCLSRLALL (CVE-2010-3861) + - asus_oled: fix up some sysfs attribute permissions + - ipc: initialize structure memory to zero for compat functions + (CVE-2010-4073) + - ipc/shm: fix information leak to userland (CVE-2010-4072) + - ipc/sem: sys_semctl: fix kernel stack information leakage (CVE-2010-4083) + - tty: prevent DOS in the flush_to_ldisc + - [x86] KVM: VMX: Fix host userspace gsbase corruption (Closes: #604956) + - KVM: VMX: fix vmx null pointer dereference on debug register access + (CVE-2010-0435) + - KVM: x86: fix information leak to userland (CVE-2010-3881) + - firewire/cdev: fix information leak + - firewire-core: fix an information leak + - firewire-ohci: fix buffer overflow in AR split packet handling + - bio: take care not overflow page count when mapping/copying user data + (CVE-2010-4162) + - sisusbvga: fix information leak to userland + - iowarrior: fix information leak to userland + - usb: core: fix information leak to userland + - usb-storage/sierra_ms: fix sysfs file attribute + - ueagle-atm: fix up some permissions on the sysfs files + - cypress_cy7c63: fix up some sysfs attribute permissions + - usbled: fix up some sysfs attribute permissions + - trancevibrator: fix up a sysfs attribute permission + - usbsevseg: fix up some sysfs attribute permissions + - do_exit(): make sure that we run with get_fs() == USER_DS (CVE-2010-4258) + - DECnet: don't leak uninitialized stack byte + - perf_events: Fix perf_counter_mmap() hook in mprotect() (CVE-2010-4169) + - frontier: fix up some sysfs attribute permissions + - net/sched: fix kernel information leak in act_police + - can-bcm: fix minor heap overflow (CVE-2010-3874) + - ivtvfb: prevent reading uninitialized stack memory (CVE-2010-4079) + - net/sched: fix some kernel information leaks + * TTY: Fix error return from tty_ldisc_open() (regression in 2.6.32.27) + * filter: make sure filters dont read uninitialized memory (CVE-2010-4158) + * posix-cpu-timers: workaround to suppress the problems with mt exec + (CVE-2010-4248) + + [ Ian Campbell ] + * xen: disable ACPI NUMA for PV guests and allow IRQ desc allocation on any + node (Closes: #603632) + * xen: handle potential time discontinuity on resume (Closes: #602273) + * xen: don't bother to stop other cpus on shutdown/reboot (Closes: #605448) + * xen: Add cpu hotplug support to prevent crash while parsing ACPI processor + tables (Closes: #602109) + + [ Martin Michlmayr ] + * Kirkwood: Add support for 6282 based QNAP devices. + + -- Ben Hutchings Fri, 10 Dec 2010 05:45:11 +0000 + +linux-2.6 (2.6.32-28) unstable; urgency=high + + [ maximilian attems ] + * ipc: initialize structure memory to zero for shmctl. + * drm/i915: set DIDL using the ACPI video output device _ADR method return. + * images: Nuke modules.devname on removal. (closes: #590607) + * Newer Standards-Version 3.9.1 without changes. + * drm/ttm: Clear the ghost cpu_writers flag on ttm_buffer_object_transfer. + * [openvz] Update upstream patch to 2.6.32-dzhanibekov. + * [openvz] ubc: Fix orphan count checks after merge. + + [ Martin Michlmayr ] + * Update udlfb to 2.6.37: + - udlfb: minor cleanups + - udlfb: fix coding style issues + - udlfb: fbdev character read and write support + - udlfb: add DPMS support + - udlfb: remove metrics_misc sysfs attribute + - udlfb: revamp reference handling to insure successful shutdown + - udlfb: enhance EDID and mode handling support + - udlfb: fix big endian rendering error + - udlfb: support for writing backup EDID to sysfs file + - udlfb: add module options for console and fb_defio + - udlfb: fix incorrect fb_defio implementation for multiple framebuffers + - udlfb: fix checkpatch and style + + [ Ben Hutchings ] + * Update debconf template translations: + - Update Japanese (Nobuhiro Iwamatsu) (Closes: #602152) + - Update Catalan (Jordi Mallach) (Closes: #602520) + - Add Italian (Luca Bruno) (Closes: #602945) + * sunrpc: Fix NFS client over TCP hangs due to packet loss (Closes: #589945) + * brcm80211: Update to 2.6.37-rc1 + * [powerpc] ALSA: Fix headphone and line-out detection on PowerMac G4 DA + (Closes: #603419) + * [x86] snd-hda-codec-cirrus: Add quirks for IMac 27", MacBookPro 5,5 and 7,1 + * [x86] btusb: Add device IDs for MacBookPro 6,2 and 7,1 (Closes: #603651) + * [x86] applesmc: Add support for iMac 9,1 and MacBookPro 2,2, 5,3, 5,4, 6,* + and 7,* + * [x86] applesmc, bcm5974, btusb, HID, mbp_nvidia_bl, snd-hda-codec-cirrus: + Add support for MacBookAir 3,1 and 3,2 (Closes: #603395) + * [x86] mbp_nvidia_bl: Add support for MacBookPro 7,1 + * x25: Fix remote denial-of-service vulnerabilities: + - x25 accesses fields beyond end of packet + - memory corruption in X.25 facilities parsing (CVE-2010-3873) + - Prevent crashing when parsing bad X.25 facilities (CVE-2010-4164) + * tcp: Increase TCP_MAXSEG socket option minimum (CVE-2010-4165) + * rds: Fix integer overflow in RDS cmsg handling + * af_802154,decnet,econet,rds,x25: Disable auto-loading as mitigation + against local exploits. These protocol modules are not widely used + and can be explicitly loaded or aliased on systems where they are + wanted. + * atl1c: Add support for Atheros AR8151 and AR8152 (Closes: #599771) + * Add stable 2.6.32.26: + - synclink_cs: Fix information leak to userland + - bluetooth: Fix missing NULL check + - [x86] KVM: VMX: Fix host GDT.LIMIT corruption + - [x86] KVM: Fix fs/gs reload oops with invalid ldt (CVE-2010-3698) + - gdth: Fix integer overflow in ioctl (CVE-2010-4157) + * [x86] KVM: SVM: Fix wrong intercept masks for KVM_{GET,SET}_VCPU_EVENTS + on 32 bit, thanks to Philipp Matthias Hahn (Closes: #599507) + + [ dann frazier ] + * [vserver] Update patch to 2.6.32.25-vs2.3.0.36.29.6 + * add qlcnic driver + * econet: Avoid stack overflow w/ large msgiovlen (CVE-2010-3848) + * econet: disallow NULL remote addr for sendmsg() (CVE-2010-3849) + * econet: Add mising CAP_NET_ADMIN check in SIOCSIFADDR (CVE-2010-3850) + + -- Ben Hutchings Thu, 25 Nov 2010 01:20:50 +0000 + +linux-2.6 (2.6.32-27) unstable; urgency=high + + * The "We'll Always Have Paris" release + + [ Ben Hutchings ] + * rndis_host: Restrict fix for #576929 to specific devices + (Closes: #589403, #600660) + * Add stable 2.6.32.25: + - rme9652: prevent reading uninitialized stack memory + (CVE-2010-4080, CVE-2010-4081) + - ocfs2: Don't walk off the end of fast symlinks + - ip: fix truesize mismatch in ip fragmentation + - net: clear heap allocations for privileged ethtool actions + - execve: setup_arg_pages: diagnose excessive argument size + - execve: improve interactivity with large arguments + - execve: make responsive to SIGKILL with large arguments + - rose: Fix signedness issues wrt. digi count. (CVE-2010-3310) + - ALSA: prevent heap corruption in snd_ctl_new() (CVE-2010-3442) + - setup_arg_pages: diagnose excessive argument size (CVE-2010-3858) + * btrfs: add a "df" ioctl for btrfs (Closes: #600190) + * Update debconf template translations: + - Add Catalan (Jordi Mallach) (Closes: #601146) + - Add Brazilian Portugese (Flamarion Jorge) (Closes: #601102) + - Update Vietnamese (Clytie Siddall) (Closes: #601534) + * phonet: device notifier only runs on initial namespace + (Really closes: #597904) + * net/socket: Limit sendto()/recvfrom() length (CVE-2010-1187) + [Original reference is incorrect; should be CVE-2010-3859.] + + [ Ian Campbell ] + * xen: import additional fixes for disabling netfront smartpoll mode + (Closes: #600992). + + [ dann frazier ] + * e1000e: Reset 82577/82578 PHY before first PHY register read + (Closes: #601017) + + [ Martin Michlmayr ] + * Kirkwood: reset PCIe unit on boot + * Kirkwood: restrict the scope of the PCIe reset workaround + + [ maximilian attems ] + * Update abi files, readd Xen as ABI stable. + * 2.6.33.stable-queue: drm/radeon: fix PCI ID 5657 to be an RV410. + * Add drm changes from 2.6.32.24+drm33.11: + - i915: return -EFAULT if copy_to_user fails. + - drm/i915: Prevent double dpms on + - drm: Only decouple the old_fb from the crtc is we call mode_set* + - drm/i915: Unset cursor if out-of-bounds upon mode change (v4) + - drm/i915,agp/intel: Add second set of PCI-IDs for B43 + * net: Limit socket I/O iovec total length to INT_MAX. (CVE-2010-1187) + [Original reference is incorrect; should be CVE-2010-3859.] + * numa: fix slab_node(MPOL_BIND). + + -- maximilian attems Sat, 30 Oct 2010 12:24:37 +0200 + +linux-2.6 (2.6.32-26) unstable; urgency=high + + [ Ian Campbell ] + * xen: fix PVHVM hang at boot when Xen does not support vector callbacks. + * xen: fix race between PV drivers and xenstore initialisation which caused + breakage in drivers for both regular PV and PVHVM guests. + + [ maximilian attems ] + * [openvz] Enable ioprio. (closes: #596772) + Thanks Daniel Hahler + + [ Ben Hutchings ] + * [x86] radeon: Add quirks to make HP nx6125 and dv5000 laptops resume + (Closes: #583968) + * dm-crypt: Add 'plain64' IV; this avoids watermarking attacks that are + possible with 'plain' IV on devices larger than 2TB (Closes: #600384) + * [x86] ahci,ata_generic: let ata_generic handle new MBP w/ MCP89 + (Closes: #600305) + * debian/.../patches.py: Open files as needed, rather than all at once + (Closes: #600423) + * [openvz] printk: Handle global log buffer reallocation (Closes: #600299) + * debian/bin/test-patches: Restrict patches to featureset when building + with a featureset (thanks to Tim Small) + * sata_via: Delay on vt6420 when starting ATAPI DMA write (Closes: #488566) + * r6040: Fix various bugs in r6040_multicast_list() (Closes: #600155) + + [ dann frazier ] + * Force enable DMA on MBP w/ MCP 7,1 + * RDS sockets: remove unsafe kmap_atomic optimization (CVE-2010-3904) + * v4l: disable dangerous buggy compat function (CVE-2010-2963) + + -- dann frazier Tue, 19 Oct 2010 07:50:55 -0600 + +linux-2.6 (2.6.32-25) unstable; urgency=high + + [ Ben Hutchings ] + * mmc: build fix: mmc_pm_notify is only available with CONFIG_PM=y + * Add stable 2.6.32.24 (trivial fix, already applied) + * ipg: Remove device claimed by dl2k from pci id table (Closes: #599021) + * linux-image: Include modules.order in image packages (Closes: #598518) + * [x86] isdn/i4l: Reenable ISDN4Linux drivers, but mark them as staging + (Closes: #588551) + - hisax: Disable device aliases that conflict with mISDN + * Update Danish debconf template translation (Joe Hansen) (Closes: #599457) + * [x86] KVM: SVM: Fix wrong intercept masks on 32 bit (Closes: #599507) + * e1000: fix Tx hangs by disabling 64-bit DMA (Closes: #518182) + * rt2x00: Fix calculation of required TX headroom (Closes: #599395) + * Add drm changes from 2.6.32.22+drm33.10: + - i915: Don't touch PORT_HOTPLUG_EN in intel_dp_detect() + - i915: Kill dangerous pending-flip debugging + - radeon: release AGP bridge at suspend + - radeon: initialize set_surface_reg for rs600 asic + * [x86] toshiba_acpi: Add full hotkey support (Closes: #599768) + + [ Stephen R. Marenka ] + * m68k: fix missing io macros. + * m68k: modular swim on mac. + * m68k: never build staging drivers on m68k. + * m68k: build in rtc class on atari. + + [ Ian Campbell ] + * xen: do not truncate machine address on gnttab_copy_grant_page hypercall + (Closes: #599089) + + [ dann frazier ] + * drm/i915: Sanity check pread/pwrite (CVE-2010-2962) + * drm/i915: Rephrase pwrite bounds checking to avoid any potential overflow + * GFS2: Fix writing to non-page aligned gfs2_quota structures (CVE-2010-1436) + * hvc_console: Fix race between hvc_close and hvc_remove (CVE-2010-2653) + * net sched: fix some kernel memory leaks (CVE-2010-2942) + * niu: Fix kernel buffer overflow for ETHTOOL_GRXCLSRLALL (CVE-2010-3084) + * rose: Fix signedness issues wrt. digi count (CVE-2010-3310) + * Fix pktcdvd ioctl dev_minor range check (CVE-2010-3437) + * ALSA: prevent heap corruption in snd_ctl_new() (CVE-2010-3442) + * net sched: fix kernel leak in act_police (CVE-2010-3477) + * sctp: Fix out-of-bounds reading in sctp_asoc_get_hmac() (CVE-2010-3705) + + -- dann frazier Thu, 14 Oct 2010 01:08:05 -0600 + +linux-2.6 (2.6.32-24) unstable; urgency=high + + [ Ben Hutchings ] + * speakup: Update to match Debian package version 3.1.5.dfsg.1-1 + * scsi_dh_emc: Fix mode select request setup (Closes: #591540) + * snd-hda-codec-via: Fix syntax error when CONFIG_SND_HDA_POWER_SAVE is + disabled (Closes: #597043) + * Add stable 2.6.32.22: + - [vserver] Revert sched changes since they conflict. + * Recommend use of 'make deb-pkg' to build custom kernel packages + * [x86] Revert "i915: Blacklist i830, i845, i855 for KMS". The current X + driver (xserver-xorg-video-intel version 2.12.0+shadow-1) should work + properly with KMS on these chips. (Closes: #596453) + * phonet: Restrict to initial namespace (Closes: #597904) + * Add stable 2.6.32.23: + - serial/mos*: prevent reading uninitialized stack memory + - net: Fix oops from tcp_collapse() when using splice() + - rds: fix a leak of kernel memory + - hso: prevent reading uninitialized memory (CVE-2010-3298) + - cxgb3: prevent reading uninitialized stack memory (CVE-2010-3296) + - eql: prevent reading uninitialized stack memory (CVE-2010-3297) + - vt6655: fix buffer overflow + - net/llc: make opt unsigned in llc_ui_setsockopt() + - sisfb: prevent reading uninitialized stack memory + - aio: check for multiplication overflow in do_io_submit (CVE-2010-3067) + - xfs: prevent reading uninitialized stack memory (CVE-2010-3078) + - viafb: prevent reading uninitialized stack memory + - [hppa,ia64] mm: guard page for stacks that grow upwards (CVE-2010-2240) + - sctp: Do not reset the packet during sctp_packet_config() + (CVE-2010-3432) + * xen: Fix typo in xen_percpu_chip definition + * 3c59x: Remove incorrect locking (Closes: #598103) + * f71882fg: Add support for the f71889fg (Closes: #597820) + * drm/radeon: Fix regressions introduced in 2.6.34.3 (Closes: #597636) + * mmc: fix hangs related to mmc/sd card insert/removal during suspend/resume + (Closes: #598147) + + [ Martin Michlmayr ] + * ARM: update mach types. + * [armel/config.kirkwood] Enable MACH_DOCKSTAR. + + [ Ian Campbell ] + * [x86/xen] Disable netfront's smartpoll mode by default. (Closes: #596635) + + [ maximilian attems ] + * [openvz] Update upstream patch to 2.6.32-dyomin. + + -- Ben Hutchings Thu, 30 Sep 2010 00:46:16 +0100 + +linux-2.6 (2.6.32-23) unstable; urgency=low + + [ Ben Hutchings ] + * cgroupfs: create /sys/fs/cgroup to mount cgroupfs on (Closes: #595964) + * r8169: Fix MDIO timing (Closes: #583139; mistakenly reverted in 2.6.32-19) + * gro: Fix bogus gso_size on the first fraglist entry (Closes: #596802) + * vgaarb: Fix VGA arbiter to accept PCI domains other than 0 (from stable + 2.6.32.12; mistakenly omitted in 2.6.32-12) + + [ maximilian attems ] + * openvz: cfq-iosched: do not force idling for sync workload. + + [ Stephen R. Marenka ] + * m68k: switch to generic siginfo layout. + * m68k: NPTL support. + + [ dann frazier ] + * compat: Make compat_alloc_user_space() incorporate the access_ok() + (CVE-2010-3081) + * x86-64, compat (CVE-2010-3301): + - Retruncate rax after ia32 syscall entry tracing + - Test %rax for the syscall number, not %eax + * wireless extensions: fix kernel heap content leak (CVE-2010-2955) + * KEYS (CVE-2010-2960): + - Fix RCU no-lock warning in keyctl_session_to_parent() + - Fix bug in keyctl_session_to_parent() if parent has no session keyring + + -- dann frazier Fri, 17 Sep 2010 15:27:04 -0600 + +linux-2.6 (2.6.32-22) unstable; urgency=low + + [ Ian Campbell ] + * xen: backport pvhvm drivers from upstream. + * Fixes/overrides for Lintian warnings: + - Add "(meta package)" to short description of linux-headers + metapackages, resolves empty-binary-package. + - Add dependency on ${misc:Depends} to all packages, resolves + debhelper-but-no-misc-depends. Required update to gencontrol.py to + augment rather than override headers_arch_depends read from templates. + - Override dbg-package-missing-depends for linux-image-*-dbg. It is not + necessary to install the kernel image package to use the dbg package + since the dbg package already contains a complete image with symbols. + + [ Ben Hutchings ] + * [x86/xen] Restore stack guard page (CVE-2010-2240) + * Add stable 2.6.32.21: + - ext4: consolidate in_range() definitions (CVE-2010-3015) + - mm: make the mlock() stack guard page checks stricter + (avoids regression for Xen tools; closes: 594756) + - [sparc] sunxvr500: Ignore secondary output PCI devices + (Closes: #594604) + - ocfs2: fix o2dlm dlm run purgelist (Closes: #593679) + - Avoid ABI change in mm + - Ignore ABI change in snd-emu10k1 + * Add drm changes from stable 2.6.34.6: + - drm: stop information leak of old kernel stack (CVE-2010-2803) + * rt2870sta: Add more device IDs from vendor drivers + * rt2860sta, rt2870sta: Enable channels 12-14 (Closes: #594561) + * SCSI/mptsas: fix hangs caused by ATA pass-through (Closes: #594690) + * sky2: Apply fixes and new hardware support from 2.6.33-2.6.35 + (Closes: #571526) + * postinst: Really warn users on upgrade if the current configuration may + rely on running a default boot loader. + * input: add compat support for sysfs and /proc capabilities output + (Closes: #579017) + * snd-hda-intel: Add support for VIA V1708S, VT1718S, VT1828S, VT2020, + VT1716S, VT2002P, VT1812, VT1818S + * hwmon/w83627ehf: Add support for W83667HG-B + * 3c59x: Fix deadlock in vortex_error() (Closes: #595554) + * [x86] paravirt: Add a global synchronization point for pvclock (from + 2.6.32.16; reverted due to a regression which was addressed in 2.6.32.19) + * sched, cputime: Introduce thread_group_times() (from 2.6.32.19; reverted + due to the potential ABI change which we now carefully avoid) + * net/{tcp,udp,llc,sctp,tipc,x25}: Add limit for socket backlog + (Closes: #592187) + * tun: Don't add sysfs attributes to devices without sysfs directories + (Closes: #594845) + * [x86] Add brcm80211 driver for Broadcom 802.11n wireless network + controllers + * r8169: Remove MODULE_FIRMWARE declarations since the firmware is + non-essential and we do not distribute it + * [x86] HPET: unmap unused I/O space + * ipheth: add support for iPhone 4 + * ipheth: remove incorrect devtype of WWAN + * ALSA: emux: Add trivial compat ioctl handler (Closes: #596478) + * hostap_pci: set dev->base_addr during probe (Closes: #595802) + * ethtool: allow non-netadmin to query settings (see #520724) + * ACPI: add boot option acpi=copy_dsdt to fix corrupt DSDT, and enable this + automatically for known-bad Toshiba models (Closes: #596709) + + [ Bastian Blank ] + * Use Breaks instead of Conflicts. + + [ Aurelien Jarno ] + * [mips,mipsel] Fix computation of DMA flags from device's + coherent_dma_mask. + + [ Martin Michlmayr ] + * Add some patches from the Orion tree: + - OpenRD: Enable SD/UART selection for serial port 1 + - kirkwood: Unbreak PCIe I/O port + - Kirkwood: support for Seagate DockStar + + [ dann frazier ] + * netxen_nic: add support for loading unified firmware images + * irda: Correctly clean up self->ias_obj on irda_bind() failure. + (CVE-2010-2954) + + [ maximilian attems ] + * [powerpc] Enable WINDFARM_PM121. (closes: #596515) + Thanks Étienne BERSAC + * nouveau: disable acceleration on NVA3/NVA5/NVA8 by default. + * openvz: disable KSM. Thanks Dietmar Maurer . + (closes: #585864) + * Update openvz patch to d38b56fd0dca. + * openvz: enalbe modular VZ_EVENT. + + -- maximilian attems Tue, 14 Sep 2010 14:17:11 +0200 + +linux-2.6 (2.6.32-21) unstable; urgency=high + + [ Ben Hutchings ] + * Add stable 2.6.32.19: + - ext4: Make sure the MOVE_EXT ioctl can't overwrite append-only files + (CVE-2010-2066) + - mm: keep a guard page below a grow-down stack segment (CVE-2010-2240) + (not applied to xen featureset) + - md/raid10: fix deadlock with unaligned read during resync + (Closes: #591415) + - Revert "sched, cputime: Introduce thread_group_times()" which would + result in an ABI change + * Add stable 2.6.32.20: + - Fix regressions introduced by original fix for CVE-2010-2240 + * Add drm and other relevant changes from stable 2.6.34.4 + * Add 'breaks' relation from image packages to boot loader packages that + do not install required hooks (Closes: #593683) + * [x86] i915: Blacklist i830, i845, i855 for KMS + (Closes: #568207, #582105, #593432, #593507) + + [ Bastian Blank ] + * Update Xen patch. + - Notify Xen on crash. + - Several blktap fixes. + + [ Ritesh Raj Sarraf ] + * Add .gnu_debuglink information into kernel modules (Closes: #555549) + + [ Ian Campbell ] + * [x86/xen] temporarily remove stack guard page, it breaks the xen + toolstack. + + [ Aurelien Jarno ] + * [mips,mipsel] Fix 64-bit atomics. + + -- Ben Hutchings Wed, 25 Aug 2010 01:06:18 +0100 + +linux-2.6 (2.6.32-20) unstable; urgency=low + + [ Moritz Muehlenhoff ] + * Backport XVR1000 driver (Closes: #574243) + + [ Ben Hutchings ] + * Add stable 2.6.32.18: + - CIFS: Fix compile error with __init in cifs_init_dns_resolver() + definition (FTBFS for most architectures) + - GFS2: rename causes kernel Oops (CVE-2010-2798) + - xfs: prevent swapext from operating on write-only files + (CVE-2010-2226) + * Update debconf template translations: + - Swedish (Martin Bagge) (Closes: #592045) + - German (Holger Wansing) (Closes: #592226) + * [i386/openvz-686] Remove AMD Geode LX and VIA C3 "Nehemiah" from the + list of supported processors; they do not implement PAE + * V4L/DVB: Add Elgato EyeTV Diversity to dibcom driver (Closes: #591710) + * [s390] dasd: use correct label location for diag fba disks + (Closes: #582281) + * Add drm changes from stable 2.6.34.2 (thanks to Stefan Bader) and + 2.6.34.3 + * drm/i915: disable FBC when more than one pipe is active + (Closes: #589077) + * IB/ipath: Fix probe failure path (Closes: #579393) + * ext4: fix freeze deadlock under IO (regression introduced in 2.6.32.17) + * xen: Completely disable use of XSAVE (Closes: #592428) + + [ Martin Michlmayr ] + * [armel/orion5x] Add a missing #include to fix a build issue. + * [armel/kirkwood, armel/orion5x] Build-in support for more devices. + + [ dann frazier ] + * can: add limit for nframes and clean up signed/unsigned variables + + -- Ben Hutchings Thu, 12 Aug 2010 03:26:39 +0100 + +linux-2.6 (2.6.32-19) unstable; urgency=low + + [ maximilian attems ] + * inotify send IN_UNMOUNT events. + * inotify fix oneshot support. + + [ Ben Hutchings ] + * linux-base: Remove dependency on libapt-pkg-perl (Closes: #589996) + * pata_pdc202xx_old: Fix UDMA mode for PDC2024x and PDC2026x controllers + (Closes: #590532) + * Update debconf template translations: + - Czech (Michal Simunek) (Closes: #590546) + - Portugese (Américo Monteiro) (Closes: #590557) + - French (David Prévot) (Closes: #591149) + - Russian (Yuri Kozlov) (Closes: #591241) + * Add stable 2.6.32.17: + - ethtool: Fix potential kernel buffer overflow in ETHTOOL_GRXCLSRLALL + (CVE-2010-2478) + - GFS2: Fix up system xattrs (CVE-2010-2525) + - Revert ABI changes in firmware_class and ssb + - Ignore ABI changes in acpi_processor, hostap and jbd2 + * Add drm changes from stable 2.6.33.7: + - drm/i915: Enable low-power render writes on GEN3 hardware (915, 945, + G33 and Atom "Pineview") (Closes: #590193, maybe others) + * [i386/xen-686] Remove AMD Geode LX and VIA C3 "Nehemiah" from the list + of supported processors; they do not implement PAE + * [x86] Add samsung-laptop driver + + [ dann frazier ] + * [ia64] Fix crash when gcore reads gate area (Closes: #588574) + + [ Bastian Blank ] + * Update Xen patch. + - Ignore ABI changes. + + -- Ben Hutchings Thu, 05 Aug 2010 02:43:19 +0100 + +linux-2.6 (2.6.32-18) unstable; urgency=low + + [ Ben Hutchings ] + * iwlwifi: Allocate pages for RX buffers, reducing the probability of + allocation failure (Closes: #580124) + * postinst: Remove support for 'default' boot loaders. Warn users on + upgrade if the current configuration may rely on this. + * rt2860sta, rt2870sta: Apply changes from Linux 2.6.33 and 2.6.34 + - rt2860sta: Fix WPA(2)PSK issue when group cipher of AP is WEP40 + or WEP104 (Closes: #574766) + * rt3090sta: Replace with rt2860sta (Closes: #588863) + * [i386/686] Remove AMD K6 from the list of supported processors; it + does not implement the CMOV instruction + * drm/i915: Add 'reclaimable' to i915 self-reclaimable page allocations + (really closes: #534422, we hope) + * Revert "x86, paravirt: Add a global synchronization point for pvclock", + included in stable 2.6.32.16 (Closes: #588426) + * 3c59x: Fix call to mdio_sync() with the wrong argument (Closes: #589989) + + [ Martin Michlmayr ] + * Add some patches from the Orion tree, including support for Marvell's + Armada 300 (88F6282): + - Kirkwood: update MPP definition. + - Kirkwood: fix HP t5325 after updating MPP definitions + - leds: leds-gpio: Change blink_set callback to be able to turn off + blinking + - net/phy/marvell: Expose IDs and flags in a .h and add dns323 LEDs + setup flag + - orion5x: Base support for DNS-323 rev C1 + - orion5x: Fix soft-reset for some platforms + - mtd: orion/kirkwood: add RnB line support to orion mtd driver + - mtd: kirkwood: allow machines to register RnB callback + - Kirkwood: add support for rev A1 of the 88f6192 and 88f6180 chips + - Kirkwood: Add support for 88f6282 + - PCI: add platform private data to pci_sys_data + - Kirkwood: add support for PCIe1 + - Kirkwood: more factorization of the PCIe init code + + [ maximilian attems ] + * sched: Fix over-scheduling bug. + + -- Ben Hutchings Fri, 23 Jul 2010 03:48:08 +0100 + +linux-2.6 (2.6.32-17) unstable; urgency=low + + [ maximilian attems ] + * agp: add no warn since we have a fallback to vmalloc paths. + + [ Ben Hutchings ] + * linux-tools: Fix build for hppa and do not attempt to build for + architectures where perf events are not available (Closes: #588409) + * linux-tools: Add build-dependency on binutils-dev to enable symbol + demangling in perf + * drm/i915: Fix memory corruption on resume from hibernation + (Closes: #534422) + + -- Ben Hutchings Sat, 10 Jul 2010 16:40:38 +0100 + +linux-2.6 (2.6.32-16) unstable; urgency=low + + [ dann frazier ] + * [hppa] clear floating point exception flag on SIGFPE signal + (Closes: #559406) + + [ Ben Hutchings ] + * Add stable 2.6.32.15 + * Add mantis and hopper DVB drivers with mb86a16 and tda665x DVB + front-ends, backported by Bjørn Mork (Closes: #577264) + * Build inet_lro as a module + * [sparc] Enable CONFIG_FB_XVR500, CONFIG_FB_XVR2500 (Closes: #508108) + * Update Spanish debconf templates, thanks to Omar Campagne + (Closes: #580538) + * Revert "Add EC path for Thinkpad X100."; it is incomplete and broken + * sctp: fix append error cause to ERROR chunk correctly (regression due + to fix for CVE-2010-1173) + * [powerpc] Enable pata_amd driver, replacing amd74xx + * eeepc-laptop: Disable wireless hotplug on more models where the + controller is not at the expected address (Closes: #576199) + * [mips] Fix boot from ATA hard drives (Closes: #584784): + - Set io_map_base for several PCI bridges lacking it + - Replace per-platform built-in IDE drivers with libata-based drivers + - Enable BLK_DEV_SD as built-in on all platforms + * Revert "vlan/macvlan: propagate transmission state to upper layers" + (Closes: #585770) + * linux-base: Don't identify LVM2 PVs by UUID (Closes: #585852) + * usb-serial: Add generic USB WWAN code, backported by Mark Hymers + (Closes: #585661) + - option, qcserial: Use generic USB WWAN code + - qcserial: Add support for Qualcomm Gobi 2000 devices + * radeon: Fix MacBook Pro connector quirk (Closes: #585943) + * r8169: Fix MDIO timing (Closes: #583139) + * Move NEWS to linux-latest-2.6 (Closes: #586401) + * 3c59x: Change locking to avoid use of disable_irq() (Closes: #586967) + * Enable IPv6 support for IPVS (IP_VS_IPV6) (Closes: #584549) + * Revert "tpm: autoload tpm_tis based on system PnP IDs", included in + stable 2.6.32.12 (Closes: #584273) + * linux-base: If the disk ID update process fails, give the user a + chance to retry or change their answers (Closes: #585609) + * asix: fix setting mac address for AX88772 (Closes: #587580) + * ipv6: Clamp reported valid_lft to a minimum of 0 (Closes: #514644) + * ipv6: Use interface max_desync_factor instead of static default + (Closes: #514646) + * Add stable 2.6.32.16: + - Fixes CVE-2010-1641, CVE-2010-1187, CVE-2010-1148, CVE-2010-1173 + and CVE-2010-2071 + - libata: disable ATAPI AN by default (Closes: #582737, #582903) + * Add drm changes from stable 2.6.33.6 + * [ia64, powerpc, sparc, x86] Enable KPROBES and KRETPROBES + (Closes: #584130) + * r8192s_usb: Fix various bugs: + - Check for skb allocation failure in 2 more places + - Update LED control code + - Clean up in case of an error in module initialisation + - Rename and remove proc directories correctly if an interface is + not called wlan0 (Closes: #582972) + - Correct device ID table (Closes: #584945, #587985) + * Add r8192u_usb driver + * Add linux-tools- package containing the perf tool + (Closes: #548715) + * Enable USB_SERIAL_TI (Closes: #588096) and USB_SERIAL_WHITEHEAT + + [ Aurelien Jarno ] + * [sh4] optimize runtime disabling of trapped I/O. + * [mips] backport mips/swarm: fix M3 TLB exception handler. + + [ Moritz Muehlenhoff ] + * Enable X86 board specific fixups for reboot (Closes: #536537) + + [ Martin Michlmayr ] + * OpenRD-Base: revert patch "allow SD/UART1 selection" since it + never made it upstream. + * ARM: update mach types. + * Add support for OpenRD-Ultimate. + * QNAP TS-11x/TS-21x: Add MPP36 (RAM) and MPP44 (board ID). + * Add support for the HP t5325 Thin Client. + * m25p80: Add support for Macronix 25L8005. + * Add framebuffer driver for XGI chipsets. + * [armel/kirkwood] Enable FB_XGI and FRAMEBUFFER_CONSOLE. + * [armel] Make MOUSE_PS2 modular. + * [armel] Build INPUT_UINPUT for all flavours. + * Update Marvell CESA (mv_cesa) driver (Closes: #585790): + - Invoke the user callback from a softirq context + - Remove compiler warning in mv_cesa driver + - Fix situation where the dest sglist is organized differently than... + - Fix situations where the src sglist spans more data than the reques... + - Enqueue generic async requests + - Rename a variable to a more suitable name + - Execute some code via function pointers rathr than direct calls + - Make the copy-back of data optional + - Support processing of data from previous requests + - Add sha1 and hmac(sha1) async hash drivers + * Update DisplayLink (udlfb) driver: + - add dynamic modeset support + - checkpatch cleanup + - reorganize function order + - pre-allocated urb list helpers + - clean up function naming + - Add functions to expose sysfs metrics and controls + - Rework startup and teardown to fix race conditions + - improved rendering performance + - Support for fbdev mmap clients (defio) + - explicit dependencies and warnings + - remove printk and small cleanup + * [armel/kirkwood] Enable FB_UDL. + * [armel] Disable PARPORT_PC (Closes: #588164) + + [ Bastian Blank ] + * Disable mISDN support for NETJet cards. The driver binds a generic PCI + bridge. + * Disable ISDN4Linux drivers. + + [ maximilian attems] + * Update openvz patch to 5fd638726a69. + + -- Ben Hutchings Mon, 05 Jul 2010 22:13:33 +0100 + +linux-2.6 (2.6.32-15) unstable; urgency=low + + [ Ben Hutchings ] + * [hppa] Ignore ABI change caused by disabling CONFIG_IDE_TIMINGS + * [powerpc] Fix unnecessary ABI change + + [ Bastian Blank ] + * xen: Fix crash in netback. + + -- Ben Hutchings Tue, 01 Jun 2010 01:31:05 +0100 + +linux-2.6 (2.6.32-14) unstable; urgency=low + + [ Ben Hutchings ] + * [ia64] Hardcode the output of the scripts under arch/ia64/scripts so + that we can build out-of-tree modules correctly (refresh and re-add + dropped patch) (Closes: #392592) + * vlan/macvlan: propagate transmission state to upper layers + * macvlan: add GRO bit to features mask + * macvlan: allow multiple driver backends + * Add macvtap driver (Closes: #568755) + * [ia64] Enable SGI SN support and mspec driver (Closes: #582224) + * iwlwifi: Disable QoS when connected to a non-QoS-capable AP + (Closes: #578262) + * [x86] Disable e_powersaver cpufreq driver as unsafe. It has already + been blacklisted by cpufrequtils. The acpi-cpufreq driver can be used + instead on some VIA C7 systems. (Closes: #566208) + * nouveau: Fix fbcon corruption with font width not divisible by 8 + (Closes: #583162) + * [amd64] ext4: Fix compat EXT4_IOC_ADD_GROUP (used by online resize) + * Install debug kernel image in /usr/lib/debug/boot (Closes: #582810) + * net: sysfs: Check for null ethtool_ops before getting speed/duplex + * Add stable 2.6.32.14: + - [hppa] Revert "parisc: Set PCI CLS early in boot.", erroneously + included in 2.6.32.13 causing FTBFS + - btrfs: check for read permission on src file in the clone ioctl + (CVE-2010-1636) + + [ Bastian Blank ] + * Update Xen patch. + - Fix checksum offloading in netback. (closes: #583366) + + [ maximilian attems] + * Add drm changes from stable 2.6.33.5: + - i915: Disable FBC on 915GM and 945GM (Closes: #582427) + * Update openvz patch to e7399c239fad. + + [ Martin Michlmayr ] + * QNAP TS-419P: Export GPIO indicating jumper setting of JP1. + + -- Ben Hutchings Sat, 29 May 2010 00:32:44 +0100 + +linux-2.6 (2.6.32-13) unstable; urgency=low + + [ Frederik Schueler ] + * sparc: Fix use of uid16_t and gid16_t in asm/stat.h + + [ Moritz Muehlenhoff ] + * Enable tomoyo (Closes: #562486) + + [ maximilian attems] + * backport KVM: x86: Extend KVM_SET_VCPU_EVENTS with selective updates. + (closes: #580652) + * KEYS: find_keyring_by_name() can gain access to a freed keyring. + CVE-2010-1437 + * hppa, sparc, powerpc disable BLK_DEV_CMD64X. + * topconfig enable PATA_CMD64X. (closes: #580799) + * x86: Disable CRYPTO_AES_NI_INTEL as it causes boot failures on T410. + * Add stable 2.6.32.13: + - [SCSI] Enable retries for SYNCRONIZE_CACHE commands to fix I/O error. + - [SCSI] Retry commands with UNIT_ATTENTION sense codes to fix ext3/ext4 + I/O errors. + - [SCSI] skip sense logging for some ATA PASS-THROUGH cdbs + (Closes: #578129) + - raid6: fix recovery performance regression. + - raid456: Enable error-correction on singly-degraded RAID6 + (Closes: #581392) + - r8169: fix broken register writes (Closes: #407217, #573007) + - V4L/DVB: budget: Fix crash in case of failure to attach frontend + (Closes: #575207) + * drm/edid: Fix 1024x768@85Hz. + + [ Ben Hutchings ] + * linux-base: Fix typo in disk relabelling code (Closes: #580467) + * linux-base: Don't quote boot device name in elilo.conf + (Closes: #580710; works-around: #581173) + * rtl8192su: Add IDs for several more devices (Closes: #580740) + * Add drm and sfc changes from stable 2.6.33.4 + * Improve workaround for HPAs (Host Protected Areas) overlapping + partitions, thanks to Tejun Heo: + - SCSI/libata: Disable HPA if it overlaps a partition (Closes: #572618) + - buffer: Make invalidate_bdev() drain all percpu LRU add caches + - block: Rescan partition tables after HPA is disabled + - libata: Disable HPA if it is only enabled after suspend + * V4L/DVB: budget: Select correct frontend drivers (Closes: #575223) + * 3c503: Fix IRQ probing (Closes: #566522) + * sis-agp: Remove SIS 760, handled by amd64-agp + * amd64-agp: Probe unknown AGP devices the right way (Closes: #548090) + + [ Aurelien Jarno ] + * mips/swarm: fix boot from IDE based media (Sebastian Andrzej Siewior) + (closes: #466977). + * backport mips/swarm: fix M3 TLB exception handler. + [This patch was actually reverted and never applied in version 2.6.32-13] + * backport MIPS FPU emulator: allow Cause bits of FCSR to be writeable + by ctc1. (closes: #580602). + * mips/swarm: enable adm* hwmon drivers. + * backport Input: Add support of Synaptics Clickpad device (Closes: #572842) + + [ Bastian Blank ] + * Fix symlinks in several packages. + * Update Xen patch. + * [amd64, i386/{686-bigmem,openvz-686,vserver-686-bigmem,xen-686}] + Build debugging symbols. (closes: #365349) + * Ignore crypto ABI changes. + + [ Martin Michlmayr ] + * Backport GuruPlug support. + + [ Christian Perrier ] + * Update debconf templates: + - English revised by the debian-l10n-english team as part of the Smith + review project (Closes: #578349) + - Vietnamese (Clytie Siddall) (Closes: #579234) + - German (Holger Wansing) (Closes: #579864) + - Russian (Yuri Kozlov) (Closes: #578994) + - Estonian (mihkel) (Closes: #579019) + - Czech (Michal Simunek) (Closes: #579268) + - Swedish (Martin Bagge) (Closes: #579308) + - French (David Prévot) (Closes: #579763) + - Spanish (Omar Campagne) (Closes: #580538) + - Portuguese (Américo Monteiro) (Closes: #577227) + - Japanese (Kenshi Muto) (Closes: #580855) + - Danish (Joe Hansen) (Closes: #580915) + - Czech (Michal Simunek) (Closes: #581399) + + -- maximilian attems Mon, 17 May 2010 15:29:27 +0200 + +linux-2.6 (2.6.32-12) unstable; urgency=low + + * The "Microwave Background" release + + [ Ben Hutchings ] + * Prepare debconf templates for translation. (closes: #576758) + * [x86] PCI/forcedeth: Disable MSI for MCP55 on P5N32-E SLI + (Closes: #552299) + * phylib: Fix typo in bcm63xx PHY driver table + * linux-base: Fix bugs and improve libata transition code: + - Fix scope of _system() function (Closes: #576925) + - Fix case where a file may wrongly be listed as automatically converted + (Closes: #577047) + - Check device IDs in mdadm.conf rather than assuming it needs manual + conversion + - Use vol_id if available since the version of blkid in lenny does not + support the output format we need (Closes: #576608) + - Fix missing line breaks in updated crypttab (Closes: #577735) + * i915: Stop trying to use ACPI lid status to determine LVDS connection + (Closes: #577724) + * forcedeth: Fix hardware version check for TX bug workaround + (Closes: #572201) + * rndis_host: Poll status channel before control channel (Closes: #576929) + * megaraid_sas: Fix copying of sense data for 32-bit management tools on + 64-bit kernel (Closes: #578398) + * Add ipheth driver for iPhone tethering + * virtio_net: Make delayed refill more reliable (Closes: #576838) + + [ maximilian attems] + * [ia64] Built in fbcon. + * Update openvz patch to c05f95fcb04e. (closes: #574598) + * Reenable nouveau autoloading. + * reiserfs: Fix permissions on .reiserfs_priv. CVE-2010-1146 + * libata,ata_piix: detect and clear spurious IRQs. + * libata/SCSI: fix locking around blk_abort_request(). + * topconfig enable NET_DROP_MONITOR. (closes: #578568) + * Add stable 2.6.32.12: + - ACPI: EC: Allow multibyte access to EC; fixes temperature monitoring + on some Dell laptops (Closes: #563313) + - [x86] KVM: disable paravirt mmu reporting (Closes: #573071) + - thinkpad-acpi: lock down video output state access (Closes: #565790) + - xfs update (closes: #579410) + * Add drm changes from stable 2.6.33.3: + - drm/radeon: R300 AD only has one quad pipe (Closes: #575681) + * libata: Fix accesses at LBA28 boundary (old bug, but nasty) (v2) + * Add EC path for Thinkpad X100. + * Bump ABI to 5, apply: + - hrtimer: Tune hrtimer_interrupt hang logic + * Add libata TRIM support. + * Backport radeon r800 modesetting support. + * drm/radeon/kms: further spread spectrum fixes. + * Backport p54 fixes. + * net: export device speed and duplex via sysfs. + * postrm: rm modules.softdep. (closes: #579175) + * Backport KVM: Xen PV-on-HVM guest support. + * Backport KVM: x86: Add KVM_GET/SET_VCPU_EVENTS. + * hugetlb: fix infinite loop in get_futex_key() when backed by huge pages + * ext4: Issue the discard operation *before* releasing the blocks to be + reused. + * libiscsi: regression: fix header digest errors. + * Revert module.c and module.h changes from -stable update. + + [ dann frazier ] + * Add DRBD backport + * sctp: Fix skb_over_panic resulting from multiple invalid parameter + errors (CVE-2010-1173) + * [CIFS] Allow null nd (as nfs server uses) on create (CVE-2010-1148) + * tipc: Fix oops on send prior to entering networked mode (CVE-2010-1187) + * [powerpc] KGDB: don't needlessly skip PAGE_USER test for Fsl booke + Note: KGDB is not currently enabled in debian builds (CVE-2010-1446) + + [ Aurelien Jarno ] + * [sh4] Add a sh7751r flavour. + * [mips/*malta] Remove options that are present in topconfig. + + [ Martin Michlmayr ] + * dns323-setup.c: fix WARN() when booting (Arnaud Patard). + * mips: enable PATA platform on SWARM and LITTLESUR (Sebastian Andrzej + Siewior). + * [mips/sb1-bcm91250a] Enable PATA_PLATFORM. + + [ Bastian Blank ] + * Update Xen patch. + + -- Ben Hutchings Sat, 01 May 2010 02:58:31 +0100 + +linux-2.6 (2.6.32-11) unstable; urgency=low + + [ Ben Hutchings ] + * [sparc] Provide io{read,write}{16,32}be() (Closes: #574421) + * Use libata-based drivers for most PATA controllers on all architectures + (previously applied only to x86) + * linux-base: Fix bugs and improve libata transition code: + - Handle duplicates in /etc/udev/rules.d/70-persistent-cd.rules + (Closes: #574630) + - Always attempt conversion if $DEBCONF_RECONFIGURE is set + - Never attempt conversion during a fresh installation (Closes: #576243) + - Convert disk IDs in crypttab (Closes: #575056) + - Redirect stdin and stdout of child processes to avoid interfering with + debconf (Closes: #574987) + - Report when hdparm.conf or mdadm.conf may need to be updated + (Closes: #576442) + - Where a device has both a UUID and a label, prefer to identify it by + UUID, consistent with fresh installations + - Do not use device labels including certain unsafe characters + (Closes: #576537) + * iwlwifi: Fix repeated warnings about tfds_in_queue (Closes: #574526) + * eeepc-laptop: Disable CPU speed control on 701 and 702 since it can + cause the system to hang (Closes: #559578) + * eeepc-laptop: Disable wireless hotplug on 1005HA, 1201N and 1005PE + since it disconnects the wrong device (Closes: #573607) + * linux-headers-*: Support postinst hooks in /etc/kernel/header_postinst.d, + thanks to Michael Gilbert (Closes: #569724) + * rt2860sta: Fix argument to linux_pci_unmap_single() (Closes: #575726) + * nouveau: nv50: Implement ctxprog/state generation + * phylib: Support PHY module autoloading (Closes: #553024) + * [x86] Add ramzswap driver (Closes: #573912) + + [ maximilian attems] + * [alpha, hppa] Disable oprofile as tracing code is unsupported here. + (closes: #574368) + * Update openvz patch to 14a9729fab67. (closes: #574598, #575189) + * [x86]: Disable FB_INTEL. (closes: #447575, #503766, #574401) + * ssb: do not read SPROM if it does not exist. + * ssb: Avoid null pointer dereference by aboves. + * Add stable 2.6.32.11. + - MIPS: Cleanup forgotten label_module_alloc in tlbex.c (Closes: #571305) + - ath5k: fix setup for CAB queue (closes: #576213) + - NFS: Prevent another deadlock in nfs_release_page() (Closes: #574348) + * Revert to keep ABI: + - hrtimer: Tune hrtimer_interrupt hang logic + + [ Moritz Muehlenhoff ] + * Add support for sh4 architecture, patch by Nobuhiro Iwamatsu + (Closes: #569034) + + [ Bastian Blank ] + * Update Xen patch. + - Fix free interrupt problem on uni-processor machines. + + [ Ian Campbell ] + * Include Xen hypervisor in reportbug "related to" list. + + -- maximilian attems Mon, 05 Apr 2010 20:31:15 +0200 + +linux-2.6 (2.6.32-10) unstable; urgency=low + + * The "Big Bang" release + + [ maximilian attems] + * tcp: fix ICMP-RTO war. + * Add stable 2.6.32.10. + - net/via-rhine: Fix scheduling while atomic bugs (closes: #549606) + - HID: remove TENX iBuddy from blacklist (Closes: #551312) + - USB: SIS USB2VGA DRIVER: support KAIREN's USB VGA adaptor + USB20SVGA-MB-PLUS (Closes: #565857) + * Bump ABI to 4. + * [x86] Add openvz flavour. + - adds ppp support (closes: #550975) + * Prevent nouveau from autoloading until xserver-xorg-video-nouveau lands. + + [ Moritz Muehlenhoff ] + * Enable CONFIG_KEYS_DEBUG_PROC_KEYS (Closes: #400932) + * Amend README.source with documentation on how to generate a + source tree with all patches applied (Closes: #509156) + * Document needed packages for preparatory packaging + steps (Closes: #548028) + + [ Aurelien Jarno ] + * Fix signal stack alignement on sparc64 (Closes: #569797) + + [ Bastian Blank ] + * Add support for Xen dom0 into its featureset. + (Closes: #499745, #503857, #504805, #505545, #506118, #507785, #509085, + #509733, #511963, #513835, #514511, #516223, #516374, #516635, #517048, + #519586, #520702, #522452, #524571, #524596, #526695, #533132, #533432, + #534880, #534978, #541227, #542299, #542614, #543489, #544525, #548345, + #554564, #554621, #559175, #559634) + * [alpha, amd64, i386, amd64, powerpc] Make all AGP driver built-in to + workaround race-condition between DRM and AGP. + + [ Ben Hutchings ] + * drm: Apply all changes from 2.6.33 and 2.6.33.1: + - Add nouveau driver + - i915: Fix disappearing mouse pointer (Closes: #551330) + - i915: Restore video overlay support (Closes: #560033) + - i915: Fix DDC on some systems by clearing BIOS GMBUS (Closes: #567747) + - radeon: Enable KMS support + * qla2xxx: Disable MSI/MSI-X on some chips or as selected by module parameter + (Closes: #572322) + - MSI is disabled on QLA24xx chips other than QLA2432 (MSI-X already was) + - MSI-X is disabled if qlx2enablemsix=2 + - MSI and MSI-X are disabled if qlx2enablemsix=0 + * [sparc64] Make prom entry spinlock NMI safe (Closes: #572442) + * firmware: Correct copyright information and add source for CIS files + * Fix first line of kernel-doc for a few functions so that they get valid + manual pages + * Remove /usr/include/drm from linux-libc-dev; let libdrm-dev provide it + again + * [x86] Enable rtl8192su driver using external firmware + * [x86] Use libata-based drivers for most PATA controllers (Closes: #444182): + - pata_triflex replaces triflex + - pata_atiixp replaces atiixp + - pata_ns87415 replaces ns87415 + - pata_sc1200 replaces sc1200 + - pata_cs5536 replaces cs5536 + - pata_amd replaces amd74xx + - pata_sis replaces sis5513 + - pata_rz1000 replaces rz1000 + - pata_efar replaces slc90e66 + - pata_pdc202xx_old replaces pdc202xx_old + - pata_pdc2027x replaces pdc202xx_new + - pata_cs5520 replaces cs5520 + - pata_cs5530 replaces cs5530 + - pata_cmd64x replaces cmd64x + - pata_sil680 replaces siimage + - pata_ali replaces alim15x3 + - pata_via replaces via82cxxx + - pata_serverworks replaces serverworks + - pata_artop replaces aec62xx + - pata_it821x replaces it821x + - ata_piix, pata_oldpiix, pata_mpiix mostly replace piix + - ata_generic, pata_ns87410, pata_netcell replace ide-pci-generic + * linux-base: Add libata transition script + * Hide sensitive information when including network configuration in bug + reports and running a different kernel version + + [ Martin Michlmayr ] + * Add some ARM patches from git: + - Update mach types + - eSATA SheevaPlug: basic board support + - eSATA SheevaPlug: configure SoC SATA interface + - eSATA SheevaPlug: correlate MPP to SD CD and SD WP + * [armel/kirkwood] Enable MACH_ESATA_SHEEVAPLUG. + + -- maximilian attems Tue, 16 Mar 2010 23:39:05 +0100 + +linux-2.6 (2.6.32-9) unstable; urgency=high + + [ Ben Hutchings ] + * Do not build obsolete lgs8gl5 driver + * [x86] Enable USB IP drivers (Closes: #568903) + * Ignore failure of lsusb when gathering information for bug reports + (Closes: #569725) + * macvlan: Add bridge, VEPA and private modes (Closes: #568756) + * [sparc] sunxvr500: Support Intergraph graphics chips again + (Closes: #508108) + * sfc: Apply fixes from 2.6.33 + * ath9k: Add support for AR2427 + * fs/exec.c: fix initial stack reservation (regression in 2.6.32.9) + + [ maximilian attems] + * Postinst don't refercence k-p related manpage. (closes: #542208) + * Postinst only write kernel-img.conf for palo boxes. + * Enable VT_HW_CONSOLE_BINDING for unbinding efifb. (closes: #569314) + * hwmon: Add driver for VIA CPU core temperature. + * wireless: report reasonable bitrate for MCS rates through wext. + * efifb: fix framebuffer handoff. (bugzilla.k.o #15151) + * Add stable 2.6.32.9: + - drm/i915: Fix DDC on some systems by clearing BIOS GMBUS setup. + (closes: #567747) + - futex: Handle futex value corruption gracefully. (CVE-2010-0623) + - futex_lock_pi() key refcnt fix. (CVE-2010-0623) + - Staging: fix rtl8187se compilation errors with mac80211. + (closes: #566726) + * r8169 patch for rx length check errors. (CVE-2009-4537) + * vgaarb: fix incorrect dereference of userspace pointer. + * Bump ABI to 3. + * drm/i915: give up on 8xx lid status. + * vgaarb: fix "target=default" passing. + * drm/radeon: block ability for userspace app to trash 0 page and beyond. + (closes: #550562) + + [ Bastian Blank ] + * Restrict access to sensitive SysRq keys by default. + * debian/rules.real: Install arch specific scripts. + + [ Moritz Muehlenhoff ] + * Set source format to 1.0 + + [ Martin Michlmayr ] + * [armel/iop32x] Enable ARCH_IQ80321 and ARCH_IQ31244 (Thanks Arnaud + Patard). + * [armel/kirkwood] Disable MTD_NAND_VERIFY_WRITE to avoid errors + with ubifs on OpenRD (Thanks Gert Doering) (Closes: #570407) + * OpenRD-Base: allow SD/UART1 selection (Closes: #571019) + * D-Link DNS-323 revision A1: implement power LED (Closes: 503172). + + -- maximilian attems Wed, 24 Feb 2010 17:06:27 +0100 + +linux-2.6 (2.6.32-8) unstable; urgency=high + + [ Bastian Blank ] + * Don't let default compiler flags escape into build. + + [ dann frazier ] + * KVM: PIT: control word is write-only (CVE-2010-0309) + * Fix potential crash with sys_move_pages (CVE-2010-0415) + + [ Ben Hutchings ] + * Build lgs8gxx driver along with cxusb (Closes: #568414) + * Revert incorrect change to powerpc clocksource setup (Closes: #568457) + * Add stable release 2.6.32.8: + - Remove TIF_ABI_PENDING bit from x86, sparc & powerpc, fixing + 32-bit userland/64-bit kernel breakage (Closes: #568416) + - connector: Delete buggy notification code. (CVE-2010-0410) + * [x86] KVM: Add IOPL/CPL checks to emulator, to prevent privilege + escalation within a guest. (CVE-2010-0298, CVE-2010-0306) + + [ Martin Michlmayr ] + * Implement power-off for D-Link DNS-323 rev B1 and fix the blinking + power LED (Erik Benada) (Closes: #503172). + + [ Aurelien Jarno ] + * Enable CONFIG_FB_CIRRUS and CONFIG_LOGO on 4kc-malta and 5kc-malta. + + -- Ben Hutchings Thu, 11 Feb 2010 02:17:17 +0000 + +linux-2.6 (2.6.32-7) unstable; urgency=low + + [ maximilian attems] + * [x86] Disable deprecated X86_CPU_DEBUG, causes boot failures. + * Newer Standards-Version 3.8.4 without changes. + + [ Ben Hutchings ] + * clocksource/events: Fix fallout of generic code changes + (Closes: #568030) + * Set ABI to 2. + + [ dann frazier ] + * Disable FUNCTION_TRACER due to performance/build issues. + (Closes: #568025) + * Split 'flush_old_exec' into two functions (CVE-2010-0307) + + -- dann frazier Wed, 03 Feb 2010 18:35:21 -0700 + +linux-2.6 (2.6.32-6) unstable; urgency=high + + [ Ben Hutchings ] + * Documentation/3c509: document ethtool support (Closes: #564743) + * Add MODULE_FIRMWARE declarations to several drivers that lacked them + * [x86] Update rt2860sta/rt2870sta firmware loader patch + - Accept 8K versions of rt2870.bin + - Fix hang on resume + * [x86] Enable rt3090sta using firmware loader + * Add stable release 2.6.32.4: + - untangle the do_mremap() mess (CVE-2010-0291) + - fasync: split 'fasync_helper()' into separate add/remove functions + (CVE-2009-4141) + - kernel/signal.c: fix kernel information leak with print-fatal-signals=1 + (CVE-2010-0003) + - netfilter: ebtables: enforce CAP_NET_ADMIN (CVE-2010-0007) + - quota: Fix dquot_transfer for filesystems different from ext4 + (Closes: #566532) + - audit: Fix memory management bugs (Closes: #562815) + + fix braindamage in audit_tree.c untag_chunk() + + fix more leaks in audit_tree.c tag_chunk() + - ipv6: skb_dst() can be NULL in ipv6_hop_jumbo(). (CVE-2010-0006) + - Fix DMA mapping for i915 driver (Closes: #558237, #567352) + + drm: remove address mask param for drm_pci_alloc() + + agp/intel-agp: Clear entire GTT on startup + * e1000,e1000e: Discard all fragments of received over-length packets + (CVE-2009-4536, CVE-2009-4538) + * Enable the '686' configuration options in '686-vserver' packages and + the '686-bigmem' configuration options in '686-bigmem-vserver' packages + (Closes: #566213) + * Add stable release 2.6.32.5: + - inotify: do not reuse watch descriptors (Closes: #561880) + - megaraid_sas: remove sysfs poll_mode_io world writeable permissions + (CVE-2009-3939) (Closes: #562975) + * Force distribution=UNRELEASED in debian/bin/test-patches so that it + works in released source packages + * Add stable release 2.6.32.6 + * postinst: Enable escape sequences in debconf notes (Closes: #566539) + * Add 3w-sas driver for LSI 3ware 9750 SAS controllers + * aufs2: Update to snapshot from 2010-01-25 (Closes: #567391) + * cdc_ether: Do not set link down initially; not all devices send link + change interrupts (Closes: #567689) + * Add stable release 2.6.32.7: + - clockevent: Don't remove broadcast device on halt or CPU hotplug + (Closes: #566547) + * sfc: Apply fixes from 2.6.33-rc{5,6} + * Set ABI to 1. + + [ Ian Campbell ] + * xen: Enable up to 32G of guest memory on i386. + + [ Julien Cristau ] + * drm/i915: disable powersave by default (closes: #564807) + + [ Bastian Blank ] + * Enable all NCP file system options. + * [amd64] Make AGP support again built-in to fullfill the not completely + documented dependency with GART IOMMU support. (closes: #561552) + * Enable dynamic minor allocations for ALSA, DVB and USB. (closes: #510593) + + [ maximilian attems ] + * [topconfig] set MEMORY_FAILURE, 9P_FSCACHE, INFINIBAND_IPOIB_CM + (closes: #565494), ITCO_VENDOR_SUPPORT (closes: #525232), PCIEASPM + (closes: #545417), HWPOISON_INJECT. + * Enable easier debugging of Power Managment code. (closes: #478315) + * Pass `DEB_MAINT_PARAMS' to hook scripts. (closes: #563161) + * Enable more mobile IPv6 needs. (closes: #528834) + + [ dann frazier ] + * [vserver] explicitly disable CFS_HARD_LIMITS + * Enable FUNCTION_TRACER and STACK_TRACER (Closes: #563847) + + -- Ben Hutchings Sun, 31 Jan 2010 23:09:28 +0000 + +linux-2.6 (2.6.32-5) unstable; urgency=low + + [ Ben Hutchings ] + * sfc: Apply fixes from 2.6.33-rc3 + * ath5k: Fix eeprom checksum check for custom sized eeproms + (Closes: #563136) + + [ maximilian attems ] + * topconfig unset USB_ISP1362_HCD FTBFS on armel and useless. + (closes: #564156) + * topconfig set PATA_ATP867X, PATA_RDC, SND_CS5535AUDIO, PM_RUNTIME, + ATA_VERBOSE_ERROR, RTC_DRV_WM831X, RTC_DRV_PCF2123, RTC_DRV_AB3100, + SND_HDA_PATCH_LOADER, DEVTMPFS (closes: #560040). + * [x86] set RTL8192E, TOPSTAR_LAPTOP, I2C_SCMI. + * Explicitly disable diverse staging drivers. + + -- Ben Hutchings Sun, 10 Jan 2010 03:22:23 +0000 + +linux-2.6 (2.6.32-4) unstable; urgency=low + + [ Ben Hutchings ] + * Correct comments referring to dpkg --print-installation-architecture + in maintainer scripts (Closes: #558077) + * modules: Skip empty sections when exporting section notes + (Closes: #563036) + * via-velocity: Give RX descriptors to the NIC later on open or MTU change + (Closes: #508527) + * dmfe/tulip: Let dmfe handle DM910x except for SPARC on-board chips + (Closes: #515533) + * Add stable release 2.6.32.3: + - ath5k: fix SWI calibration interrupt storm (may fix #563466) + - iwl3945: disable power save (Closes: #563693) + - rt2x00: Disable powersaving for rt61pci and rt2800pci (may fix #561087) + + [ maximilian attems ] + * topconfig set CAN_EMS_USB, BT_MRVL, BT_MRVL_SDIO, BE2ISCSI, SCSI_PMCRAID, + SCSI_BFA_FC, USB_GL860, USB_GSPCA_JEILINJ, I2C_SI4713, RADIO_SI4713, + RADIO_SI470X, DVB_USB_FRIIO, EDAC_I3200, SENSORS_TMP421, SENSORS_WM8350, + SBC_FITPC2_WATCHDOG, TOUCHSCREEN_MCS5000, UIO_PCI_GENERIC, KSZ8842, + KS8851, KS8851_MLL, MISDN_AVMFRITZ, MISDN_SPEEDFAX, MISDN_INFINEON, + MISDN_W6692, MISDN_NETJET, INPUT_WINBOND_CIR, BATTERY_DS2782, MFD_WM831X, + MFD_MC13783, MTD_SST25L, TOUCHSCREEN_USB_E2I, INPUT_WM831X_ON, + SENSORS_WM831X, WM831X_WATCHDOG, AB3100_OTP, REGULATOR_WM831X, + REGULATOR_MC13783, REGULATOR_AB3100, REGULATOR_TPS65023, + REGULATOR_TPS6507X, VIDEO_SAA7164, DVB_PT1, BACKLIGHT_WM831X, + SND_HDA_CODEC_CIRRUS, USB_ISP1362_HCD, LEDS_WM831X_STATUS, + MTD_ONENAND_GENERIC, B43_SDIO, B43_PHY_LP, KEYBOARD_ADP5588, QT2160, + KEYBOARD_LM8323, KEYBOARD_MAX7359, KEYBOARD_OPENCORES, MOUSE_PS2_SENTELIC, + WM831X_POWER. + * [x86] set ACPI_POWER_METER, ACPI_PROCESSOR_AGGREGATOR, SFI, + EDAC_DECODE_MCE. + * Set MOUSE_PS2_ELANTECH for various EeePc. (closes: #522920) + + [ dann frazier ] + * Fix vserver build on ia64 (Closes: #563356) + * Fix vserver build on s390 (Closes: #563355) + + [ Martin Michlmayr ] + * Report model information on armel when filing a bug. + * ARM: Add an earlyprintk debug console (Catalin Marinas) + * [armel] Enable EARLY_PRINTK. + + -- Ben Hutchings Thu, 07 Jan 2010 03:33:39 +0000 + +linux-2.6 (2.6.32-3) unstable; urgency=high + + * The "Not a Suitable Christmas Present" release + + [ Martin Michlmayr ] + * [armel/orion5x] Build MTD_CFI_AMDSTD into the kernel again since + it's needed on the D-Link DNS-323 (thanks Manuel Roeder). + (Closes: #562205) + + [ dann frazier ] + * Input: ALPS - add support for touchpads with 4-directional button + * Input: ALPS - add interleaved protocol support (Dell E6x00 series) + (Closes: #561589) + * Re-enable vserver + + [ Ben Hutchings ] + * sfc: Apply changes from 2.6.33-rc1 adding support for SFC9000 family + * Add stable release 2.6.32.2: + - KVM: x86 emulator: limit instructions to 15 bytes (CVE-2009-4031) + - hfs: fix a potential buffer overflow (CVE-2009-4020) + * radeon: fix crtc vblank update for r600 (regression in 2.6.32.2) + * ia64: Include header in ; fixes + FTBFS + * r8169: Allow RTL8168D v1 and v2 to be used without firmware files + (Closes: #561309) + * Enable vmxnet3 (VMware guest paravirt net driver) (Closes: #562046) + + -- Ben Hutchings Thu, 24 Dec 2009 04:28:55 +0000 + +linux-2.6 (2.6.32-2) unstable; urgency=high + + [ Bastian Blank ] + * Allow memory hot-add and -remove if possible. + * Enable USB suspend. + * Enable kernel samepage merging. (closes: #558200) + * [s390] + - Enable SECCOMP. + - Enable z/VM Watchdog Timer. + + [ Moritz Muehlenhoff ] + * Disable cryptoloop (Closes: #559755) + * Initial work on a README.source file as suggested by current policy + + [ Ben Hutchings ] + * aufs2: Update to snapshot from 2009-12-05 + * postinst: Fix failure paths in check for missing firmware + (Closes: #560263) + * atl1c: Fix system hang when link drops (Closes: #559577) + * netfilter: xtables: fix conntrack match v1 ipt-save output + (Closes: #556587) + + [ Aurelien Jarno ] + * Add support for the sparc64 architecture. + + [ dann frazier ] + * Add stable release 2.6.32.1: + - ext4: Fix double-free of blocks with EXT4_IOC_MOVE_EXT (CVE-2009-4306) + - ext4: avoid divide by zero when trying to mount a corrupted file system + (CVE-2009-4307) + - ext4: Fix insufficient checks in EXT4_IOC_MOVE_EXT (CVE-2009-4131) + + -- Ben Hutchings Wed, 16 Dec 2009 21:42:49 +0000 + +linux-2.6 (2.6.32-1) unstable; urgency=low + + * New upstream release candidate: + - Fixes wifi with rt73usb (Closes: #555640) + + [ Martin Michlmayr ] + * [armel/kirkwood] Turn on USB_SUSPEND (on the request of a SheevaPlug + user). + * [mips/4kc-malta, mips/5kc-malta] Compile USB as a module rather than + into the kernel. + + [ Bastian Blank ] + * Enable PCI_MSI. + * [powerpc] Properly enable Apple PMU battery. + * [mips/mipsel] Drop remaining OSS drivers. + * [powerpc] Enable PCIe support. + * Move contents of linux-support package to /usr/share. + * Make linux-patch package depend against python. + * Use python-support instead of python-central. + * Always enable software watchdog support. + * Always enable complete USB mass storage support. + * [amd64, powerpc, sparc] Build USB support as module. + * [amd64] Build AGP support as module. + * Always enable dummy net driver support. + * Drop linux-tree package, it have no users left. + + [ Ben Hutchings ] + * Re-enable accidentally omitted drivers, thanks to Uwe Kleine-König + (Closes: #558011): + - Atheros wireless drivers (ar9170, ath5k, ath9k) + - TI wl12xx wireless drivers (wl1251_spi, wl1251_sdio and wl1271 + replace wl12xx) + - Silicon Labs Si470x FM Radio Receiver driver (radio-usb-si470x) + * Add 'removable' option to the mmc module. Setting this to 0 causes + MMC/SD cards to be assumed non-removable, and filesystems on them + will remain mounted over a suspend/resume cycle. (Closes: #504391) + * Add MODULE_FIRMWARE declarations to many drivers that lacked them, so + that missing firmware will be reported automatically during upgrades + * atl1e: Remove broken implementation of TSO for TCP/IPv6 + (Closes: #558426) and allow other hardware offloads to be disabled in + case they are also buggy + * usbnet: Set link down initially for drivers that update link state + (Closes: #444043) + * aufs2: Update to snapshot from 2009-11-29 + * i915: Enable auto-loading even though CONFIG_DRM_I915_KMS is not set + + [ dann frazier ] + * mac80211 (CVE-2009-4026, CVE-2009-4027): + - fix two remote exploits + - fix spurious delBA handling + + -- Bastian Blank Sun, 06 Dec 2009 18:17:39 +0100 + +linux-2.6 (2.6.32~rc8-1~experimental.1) unstable; urgency=low + + [ Ben Hutchings ] + * New upstream release candidate. + - slip: Clean up create and destroy (Closes: #408635) + - signal: Fix alternate signal stack check (Closes: #544905) + * README.Debian: Add brief information about building specific binary + packages (Closes: #546182) + * lgs8gxx: Remove firmware for lgs8g75 and use request_firmware() to + load it + * r8169: Remove firmware for RTL8168D v1 and v2 and use + request_firmware() to load it + * DocBook: Fix build breakage + * Hide WPA authentication parameters and comments when including network + configuration in bug reports + + [ Bastian Blank ] + * [mips] Don't force EMBEDDED on. + * [sparc] Don't builtin Ext2 support. + * Enable PERF_EVENTS, EVENT_PROFILE, CRYPTO_VMAC, CRYPTO_GHASH, TREE_RCU. + * Use SLUB as default SLAB allocator. + + [ Martin Michlmayr ] + * [armel] Make some options modular (since there's no reason for them + to be built in): FTL, NFTL, MTD_CFI_AMDSTD, MTD_CFI_STAA. + * [armel/orion5x, armel/kirkwood] Enable ISDN (requested by Markus + Krebs). + * Add patch from Albin Tonnerre to add HAVE_KERNEL_LZMA to arm. + * [armel] Enable KERNEL_LZMA, i.e. compress kernels with lzma to get + much better compression. + * [armel] Re-enable options that were turned off recently because of + size constraints: DEBUG_USER, DEBUG_KERNEL, BOOT_TRACER, ARM_UNWIND, + BLK_DEV_IO_TRACE and SECURITY_SELINUX. + + [ maximilian attems ] + * Simplify postinst nuke reverse symlinks handling. Patch from + Sebastian Andrzej Siewior . + + -- Bastian Blank Sat, 21 Nov 2009 21:41:45 +0100 + +linux-2.6 (2.6.31-2) unstable; urgency=low + + [ Martin Michlmayr ] + * [armel/orion5x, armel/kirkwood] Make sure VGA_CONSOLE is disabled, + otherwise the kernel won't boot. + * [armel/kirkwood] Enable CRYPTO_DEV_MV_CESA (Closes: #552270). + * [armel/kirkwood, armel/orion5x] Enable ORION_WATCHDOG (the + name of the config variable changed). + * Add OpenRD-Client support again. + * Add QNAP TS-41x support. + * [armel/orion5x, armel/kirkwood] Enable ISDN (requested by Markus + Krebs). + * Fix a build failure of the ISDN hisax elsa driver on ARM. + * mips: fix build of vmlinux.lds (Closes: #552422). + + [ Ben Hutchings ] + * postinst: Accept absolute paths in modules.dep generated by the + lenny version of module-init-tools (Closes: #552610) + * aufs2: Remove incorrect static assertion (Closes: #554120) + * Add stable release 2.6.31.6: + - fs: pipe.c null pointer dereference (CVE-2009-3547) + - KEYS: get_instantiation_keyring() should inc the keyring refcount + in all cases (CVE-2009-3624) + - netlink: fix typo in initialization (CVE-2009-3612) + * Undo PCMCIA ABI change in 2.6.31.6 + * Hide wireless keys and wake-on-LAN password when including network + configuration in bug reports + * Add Geode LX/NX to list of 686-class processors + + [ Bastian Blank ] + * [powerpc] Remove SMP warning from PowerMac cpufreq (Closes: #554124) + + [ maximilian Attems ] + * Really fix making a debian kernel installable without kernel-img.conf. + Thanks for patch to Sebastian Andrzej Siewior . + (closes: #555093). + + -- Ben Hutchings Sun, 15 Nov 2009 18:47:49 +0000 + +linux-2.6 (2.6.31-1) unstable; urgency=low + + [ Ben Hutchings ] + * Include aufs2, marked as staging (Closes: #541828) + * Include speakup modules under staging + * Add stable release 2.6.31.5 + * [x86_64] Enable NUMA_EMU (Closes: #541389) + + [ Martin Michlmayr ] + * CPUidle: always return with interrupts enabled. + * [armel/orion5x, armel/kirkwood] Enable FB since some Kirkwood + machines have a VGA chip (e.g. OpenRD-Client) and because it's + possible to use a DisplayLink USB virtual graphics adapter. + + [ maximilian attems ] + * [alpha] Disable SND_MIXART, causes gcc ICE. + * [x86] Enable modular X86_MCE_INJECT. + * [x86_32] Set LSM_MMAP_MIN_ADDR to zero to unbreak dosemu and 16-bit Wine, + ia64 and x86_64 to 65536 otherwise default to 32768. + * Unset UEVENT_HELPER_PATH to save some boot cycles. + + [ Bastian Blank ] + * Set ABI to 1. + * Enable Apple PMU battery. (closes: #544264) + + -- Bastian Blank Sat, 24 Oct 2009 19:17:30 +0200 + +linux-2.6 (2.6.31-1~experimental.2) experimental; urgency=low + + [ Ben Hutchings ] + * Include more information in bug reports: + - Model information + - Firmware package status + - Network configuration and status (optional) + - USB device list + * nfs: Avoid overrun when copying client IP address string + (Closes: #549002) + * Add support for DEB_BUILD_OPTIONS=parallel=N (Closes: #458560) + * sfc: Fix initial link state + * Improve package descriptions + - Clarify the differences between i386 flavours (Closes: #414690) + - Simplify wording of the description template + * Add stable release 2.6.31.3 + * Remove /usr/include/scsi from linux-libc-dev; these headers are + provided by libc6-dev (Closes: #550130) + * Remove dummy dot-files from linux-libc-dev + * hfsplus: Refuse to mount volumes larger than 2TB, which may otherwise + be corrupted (Closes: #550010) + * Add stable release 2.6.31.4 + - x86: Don't leak 64-bit kernel register values to 32-bit processes + (CVE-2009-2910) + - appletalk: Fix skb leak when ipddp interface is not loaded + (CVE-2009-2903) + + [ maximilian attems ] + * Add stable release 2.6.31.2 + - ax25: Fix signed comparison in the sockopt handler (CVE-2009-2909) + - PM / yenta: Fix cardbus suspend/resume regression (Closes: #522828) + + [ dann frazier ] + * [sparc] build zImage by default, fixes build + * [ia64] Fix call to elilo in postinst + + -- maximilian attems Mon, 12 Oct 2009 23:54:52 +0200 + +linux-2.6 (2.6.31-1~experimental.1) experimental; urgency=low + + * New upstream release. + - Support for W83627DHG-P (closes: #535646). + - Restore MAC address and MTU change operations on Orinoco and others + (Closes: #536455) + - Remove incorrect ACPI blacklisting of ASUS P4B266 mainboards + (Closes: #525625) + - atl1c fixes for Eee PC model 1005HA-H. (closes: #538410) + - parisc64-smp boot fix on J5600. (closes: #539369) + - parisc: Fix GOT overflow during module load on 64bit kernel + (closes: #539378) + - xfs: fix freeing of inodes not yet added to the inode cache + (Closes: #527517) + - IPv6: add "disable" module parameter support to ipv6.ko. + (closes: #542470) + - IPv6: avoid wraparound for expired preferred lifetime + (Closes: #518710) + - Fixes lockups with older dual-CPU machines (Closes: #542551) + - x86, pat: Allow ISA memory range uncacheable mapping requests + (Closes: #538159) + - drm/i915: Hook connector to encoder during load detection + (Closes: #522358) + - module: workaround duplicate section names (Closes: #545229) + - b43: Add fw capabilities (Closes: #533357) + - procfs: Fix idle time in uptime (Closes: #545981) + - e1000, e1000e, igb, ixgb, ixgbe: Fix initial link state + (Closes: #546041) + - CIFS: Handle port= mount option correctly (Closes: #524142) + - i915: Prevent screen flickering in X11 (Closes: #545377) + - hppa: Ensure broadcast tlb purge runs single threaded + (Closes: #539215) + + [ maximilian attems ] + * [powerpc64] Enable modular RTC_DRV_PS3, PS3_VRAM. + (Closes: #528694) + * Set new NETFILTER_XT_MATCH_OSF, FIREWIRE_NET, SND_CTXFI, USB_XHCI_HCD, + IEEE802154, CAN_DEV, EEPROM_MAX6875, DM_LOG_USERSPACE, DM_MULTIPATH_QL, + DM_MULTIPATH_ST, LIBERTAS_SPI, CAN_SJA1000, CAN_SJA1000_PLATFORM, + CAN_EMS_PCI, CAN_KVASER_PCI, CB710_CORE, CNIC, RT2800USB, + USB_NET_INT51X1, SND_LX6464ES, BLK_DEV_OSD, SCSI_BNX2_ISCSI, IWM, + IEEE802154_DRIVERS, TOUCHSCREEN_EETI, TOUCHSCREEN_W90X900, + BATTERY_MAX17040, SENSORS_TMP401, REGULATOR_USERSPACE_CONSUMER, + REGULATOR_MAX1586, REGULATOR_LP3971, MEDIA_SUPPORT, CUSE, + WL12XX, PPS, AB3100_CORE, SND_HDA_INPUT_JACK,MMC_SDHCI_PLTFM, + MMC_CB710, MMC_VIA_SDMMC, LEDS_LP3944, RTC_DRV_RX8025, + SMARTJOYPLUS_FF, USB_CDC_PHONET, USB_GSPCA_SN9C20X, MOUSE_SYNAPTICS_I2C, + PCIEAER_INJECT. + * Disable v4l1 ov511 and quickcam_messenger drivers. + * [x86_64] Enable HW_RANDOM_VIA. + * [x86] Keep divers staging stuff enabled. + * [x86] Enable RT3070, COMEDI_PCMCIA_DRIVERS, ACERHDF, EDAC_AMD64, + XEN_DEV_EVTCHN, XEN_SYS_HYPERVISOR, PERF_COUNTERS, + CC_STACKPROTECTOR, DEFAULT_MMAP_MIN_ADDR=65536. + * rtl8192su: remove firmware and disable. + * Newer Standards-Version 3.8.2 without changes. + * Allow install in chroot without do_initrd check for piuparts. + * Cleanup Maintainer scripts from ancient pre linux-2.6 assumptions. + (Also closes: #536333) + * Disable DEVKMEM. + * [ppc, sparc] Enable EFI_PARTITION. (closes: #540486) + * Disable old USB_DEVICE_CLASS. (Closes: #510279) + * Drop yaird initramfs generator support. + * Add stable release 2.6.31.1. + * Enable PREEMPT_VOLUNTARY. + + [ Ben Hutchings ] + * mga: remove unnecessary change from firmware-loading patch + * cxgb3: remove PHY firmware and use request_firmware() to load it + * Add firmware-linux-free package containing DFSG-free firmware + * av7110: include firmware source and binary + * snd-cs46xx: reenable using external firmware (closes: #464197, + but note that Debian cannot currently distribute the firmware), + thanks to Kalle Olavi Niemitalo + * ib_ipath: remove firmware for QLogic IBA7220 and use + request_firmware() to load it + * dvb-usb-af9005: remove initialisation script derived from Windows + driver and use request_firmware() to extract it at run-time + (closes: #494119) + * Add warning on upgrade to a new upstream version where the system + appears to be missing necessary firmware files (closes: #541702) + * qla1280: Release spinlock when requesting firmware (closes: #543244) + * r128: Add test for initialisation to all ioctls that require it + (closes: #541630) + * rt{2860,2870,3070}sta: Use existing CCITT CRC implementation on + firmware rather than adding an equivalent variant of ITU-T CRC + * rd: Build as a module since we do not require initrd support + * x86: Fix crash in text_poke_early() on 486-class processors + (Closes: #515982) + * intel-agp: Fix cache flushing on i8xx chipsets, avoiding graphics + corruption and GPU lock-ups (Closes: #541307) + * Generate architecture-qualified package relations as needed for + flavours that exist for multiple architectures (Closes: #278729) + * Prompt bug reporters to run the kernel version they're reporting on + or otherwise record boot messages + * Include PCI device list in bug reports even if the running kernel + doesn't match + + [ Martin Michlmayr ] + * [armel/orion5x, armel/kirkwood] Set GPIO_SYSFS=y since these + platforms have been converted to GPIOLIB. + * [armel/orion5x, armel/kirkwood] Disable MARVELL_PHY since it may + lead to conflicts with the built-in Ethernet. + * Add features from 2.6.32: + - crypto: mv_cesa - Add support for Orion5X crypto engine + * [armel/orion5x] Enable CRYPTO_DEV_MV_CESA. + * Disable SYS_HAS_EARLY_PRINTK on SGI IP22 to work around a hang + during bootup (Closes: #507557) + * [armel] Enable BPQETHER (on the request of Iain Young) and some + other AX25 drivers. + + [ Bastian Blank ] + * Disable staging drivers by default. + * Force all bugs against images to be reported to linux-2.6. + (closes: #539176) + * [arm] Remove old arm architecture. + * Use kernel architecture for libc-dev build. + + [ Moritz Muehlenhoff ] + * Fix Linus' name in copyright file (Closes: #530620) + * More verbose explanation on difference between Alpha flavour + (Closes: #497230) + * Add Vcs-Svn and Vcs-Browser stanzas pointing to the SVN branch + used for development in unstable. There are other branches + used for experimental (trunk), oldstable and stable, but Vcs-* + doesn't yet provide the ability to distinguish branches in a + more fine-grained manner. (Closes: #471495) + * Update Standards-Version to 3.8.3, no changes needed + * Disable PROM console support (Closes: #525958) + * Make the description of linux-support a little more verbose + (Closes: #400825) + * This upload fixes the following security issues: + - CVE-2009-3290 (2.6.31) + - CVE-2009-3288 (2.6.31.1) + - CVE-2009-3280 (2.6.31.1) + - CVE-2009-3234 (2.6.31.1) + - CVE-2009-3043 (2.6.31) + - CVE-2009-3002 (2.6.31) + - CVE-2009-3001 (2.6.31) + - CVE-2009-2844 (2.6.31) + - CVE-2009-2695 (2.6.31) + - CVE-2009-2691 (2.6.31) + + [ dann frazier ] + * n_tty: Fix echo race + * [ia64] Stop disabling CONFIG_HOTPLUG_CPU, which was blocking + CONFIG_KEXEC from being enabled + * [hppa] Disable CONFIG_AB3100_CORE, it fails to build + + -- maximilian attems Sun, 04 Oct 2009 20:27:05 +0200 + +linux-2.6 (2.6.30-8) unstable; urgency=low + + [ Martin Michlmayr ] + * Disable SYS_HAS_EARLY_PRINTK on SGI IP22 to work around a hang + during bootup (Closes: #507557) + * module: workaround duplicate section names to fix a panic on + boot on hppa (Closes: #545229). + * Add stable release 2.6.30.8. + * [armel/kirkwood] Add Marvell OpenRD-Client support (Dhaval Vasa). + Thanks Stefan Kaltenbrunner. + + -- Bastian Blank Fri, 25 Sep 2009 23:47:56 +0200 + +linux-2.6 (2.6.30-7) unstable; urgency=low + + [ Martin Michlmayr ] + * [armel/kirkwood] Enable eSATA on QNAP TS-219P (John Holland). + * [armel/kirkwood] Marvell OpenRD-Base board support (Dhaval Vasa). + * [armel/kirkwood] Initialise SATA for OpenRD-Base (Ron Lee). + * [armel/kirkwood] Enable SATA_AHCI. + + [ Ben Hutchings ] + * qla1280: Release spinlock when requesting firmware (closes: #543244) + * r128: Add test for initialisation to all ioctls that require it + (closes: #541630) + * [i386] Fix crash in text_poke_early() on 486-class processors + (Closes: #515982) + * intel-agp: Fix cache flushing on i8xx chipsets, avoiding graphics + corruption and GPU lock-ups (Closes: #541307) + * [i386] Allow ISA memory range uncacheable mapping requests + (Closes: #538159) + * Fix idle time in /proc/uptime (Closes: #545981) + * e1000, e1000e, igb, ixgb, ixgbe, sfc: Fix initial link state + (Closes: #546041) + + [ Bastian Blank ] + * Add stable release 2.6.30.5. + - drm/i915: Hook connector to encoder during load detection + (fixes tv/vga detect) (Closes: #522358) + * Add stable release 2.6.30.6. + - x86: Fix lock-up on SMP Pentium Pro, Pentium 2, Pentium 3, and + Athlon MP systems (Closes: #542551) + - NET: Fix information leaks from getsockname() (CVE-2009-3001, + CVE-2009-3002) + - iwl3945/rfkill: Reenable radio when hardware switch turned back on + (Closes: #530554) + * Bump ABI to 2. + * Apply missing fixes: + - block: fix sg SG_DXFER_TO_FROM_DEV regression. + - sched_rt: Fix overload bug on rt group scheduling. + * Add stable release 2.6.30.7. + * [sparc] Disable PROM console. (closes: #525958) + + -- Bastian Blank Wed, 16 Sep 2009 17:23:13 +0200 + +linux-2.6 (2.6.30-6) unstable; urgency=high + + [ Bastian Blank ] + * Set default low address space protection to default value. + + [ dann frazier ] + * Make sock_sendpage() use kernel_sendpage() (CVE-2009-2692) + * flat: fix uninitialized ptr with shared libs + * [parisc] isa-eeprom - Fix loff_t usage + * do_sigaltstack: avoid copying 'stack_t' as a structure to user space + * posix-timers: Fix oops in clock_nanosleep() with CLOCK_MONOTONIC_RAW + + -- Bastian Blank Sat, 15 Aug 2009 15:50:02 +0200 + +linux-2.6 (2.6.30-5) unstable; urgency=high + + [ maximilian attems ] + * Add stable release 2.6.30.4. + - cifs: fix regression with O_EXCL creates and optimize away lookup + (closes: #536426) + - ecryptfs: check tag 11 literal data buffer size (CVE-2009-2406) + - ecryptfs: check tag 3 package encrypted size (CVE-2009-2407) + * Ignore nf_conntrack ABI change. + * Revert to keep ABI: + - block: fix sg SG_DXFER_TO_FROM_DEV regression. + - sched_rt: Fix overload bug on rt group scheduling. + * [hppa]: Ignore any ABI (broke on 2.6.30.2). + + -- maximilian attems Mon, 03 Aug 2009 12:08:56 +0200 + +linux-2.6 (2.6.30-4) unstable; urgency=low + + [ Bastian Blank ] + * Add stable release 2.6.30.2. + * Fix pci access in x86 startup code. (closes: #537783) + * Ignore ABI changes. + * Include all plattform and mach specific headers on arm. + + [ maximilian attems ] + * Add stable release 2.6.30.3. + + -- Bastian Blank Thu, 30 Jul 2009 11:55:11 +0200 + +linux-2.6 (2.6.30-3) unstable; urgency=low + + [ Bastian Blank ] + * Build-Depend against cpio. (closes: #536196) + + [ Martin Michlmayr ] + * [arm] Export __cpu_flush_dcache_page. + + [ Aurelien Jarno ] + * [ia64] Fix asm/fpu.h includes. + + [ dann frazier ] + * Fix NULL pointer dereference in tun_chr_pool() (CVE-2009-1897) + * personality: fix PER_CLEAR_ON_SETID (CVE-2009-1895) + * Add -fno-delete-null-pointer-checks to CFLAGS + + -- Bastian Blank Sat, 18 Jul 2009 10:00:01 +0200 + +linux-2.6 (2.6.30-2) unstable; urgency=low + + [ dann frazier ] + * [powerpc] Use generic rtc (closes: #535354) + * [parisc] + - ensure broadcast tlb purge runs single threaded + - fix ldcw inline assembler + (closes: #535844) + + [ Bastian Blank ] + * Add stable release 2.6.30.1: + - KVM: x86: check for cr3 validity in ioctl_set_sregs (CVE-2009-2287) + - ALSA: intel8x0 - Fix PCM position craziness (closes: #533780) + - ide-cd: prevent null pointer deref via cdrom_newpc_intr (closes: #535342) + * Ignore ABI changes. + + [ maximilian attems ] + * [alpha] Add upstream smp buildfix. + * [parisc] Disable vxge and niu. + + -- Bastian Blank Tue, 07 Jul 2009 14:45:43 +0200 + +linux-2.6 (2.6.30-1) unstable; urgency=low + + * New upstream release. + - radeonfb: suspend/resume for ATI Mobility Radeon RV350. + (closes: #506964) + - tcp: fix MSG_PEEK race check (closes: #513695) + - e100 fixes (closes: #527056) + - mos7840: fix miscalculation of minor numbers (closes: #498293) + - reiserfs update (closes: #531804) + - bluetooth stack suspend/resume (closes: #508426, #529785) + - e1000e: Remove mutex_trylock and associated WARN on failure + (closes: #524699) + + [ maximilian attems ] + * [sparc] Enable BLK_DEV_CRYPTOLOOP. (closes: #521829) + * Enable PATA_JMICRON instead of legacy BLK_DEV_JMICRON. + (closes: #431500, #458493) + * Set new NILFS2, AT76C50X_USB, MWL8K, P54_SPI, AR9170_USB, + NETFILTER_XT_MATCH_CLUSTER, RDS, SCSI_MPT2SAS, SCSI_OSD_INITIATOR, + ETHOC, IGBVF, VXGE, TOUCHSCREEN_AD7877, SENSORS_ATK0110, + NETFILTER_XT_TARGET_LED, 3C359, HW_RANDOM_TIMERIOMEM, SENSORS_G760A, + SENSORS_LTC4215, SENSORS_LM95241, USB_GSPCA_MR97310A, USB_GSPCA_SQ905, + USB_GSPCA_SQ905C, USB_PWC_INPUT_EVDEV, DVB_USB_CE6230, SND_INDIGOIOX, + SND_INDIGODJX, USB_SERIAL_CP210X, USB_SERIAL_QUALCOMM, + USB_SERIAL_SYMBOL, ISL29003, SERIAL_MAX3100, VIDEO_HDPVR, VIDEO_CX231XX, + DRAGONRISE_FF, LEDS_LP5521, LEDS_DAC124S085, LEDS_BD2802, + UIO_AEC, CRYPTO_ZLIB, REGULATOR_FIXED_VOLTAGE, NOP_USB_XCEIV, + POHMELFS, FSCACHE, CACHEFILES, EXOFS, NFS_FSCACHE, AFS_FSCACHE, + MTD_NAND_NANDSIM, STRIP_ASM_SYMS, FCOE_FNIC, USB_NET_CDC_EEM, + PCI_IOV, ASYNC_TX_DMA, ROMFS_BACKED_BY_BOTH, DETECT_HUNG_TASK. + * [amd64, i386] Set new DELL_WMI, EDAC_AMD8131, EDAC_AMD8111, X86_PAT, DMAR, + X86_CPU_DEBUG, CRYPTO_AES_NI_INTEL, X86_X2APIC. + * Newer Standards-Version 3.8.1 without changes. + * xfs: fix freeing memory in xfs_getbmap(). + + [ Ben Hutchings ] + * Remove firmware from drivers/staging (closes: #521553) + - make rt2860sta and rt2870sta use request_firmware(), + thanks to Darren Salt + * Remove some sourceless firmware not included in Debian kernel images + + [ Martin Michlmayr ] + * [mipsel/r5k-cobalt] Enable SCSI_SYM53C8XX_2 (closes: #526836). + * [arm/iop32x, arm/ixp4xx, arm/orion5x] Turn off BOOT_TRACER, + BLK_DEV_IO_TRACE, CONTEXT_SWITCH_TRACER, ARM_UNWIND and + SECURITY_SELINUX because of size constraints. + * [mips/sb1-bcm91250a] There is a platform PATA driver for SWARM IDE + these days, so disable IDE and build in ATA, SCSI and BLK_DEV_SD. + * [mips/sb1-bcm91250a, mips/sb1a-bcm91480b] Compile in SB1250_MAC and + BROADCOM_PHY. + * [mips/r4k-ip22] Enable NET_ISA and various ISA network modules on + the request of Damian Dimmich since they might be useful on the + SGI Indigo2. + * Add patches from git.marvell.com: + - alternative copy_to_user: more precise fallback threshold + - lower overhead with alternative copy_to_user for small copies + - Kirkwood: Add CPU idle driver + - Kirkwood: clock gating for unused peripherals + + [ Aurelien Jarno ] + * [mips(el)/sb1-bcm91250a] Set CONFIG_SCSI_AIC7XXX=y, it is needed + on the build daemons. + * topconfig set CONFIG_RD_GZIP, CONFIG_RD_BZIP2, CONFIG_RD_LZMA. + + [ Bastian Blank ] + * [i386] Disable PentiumPro errata workaround. + * [i386] Enable support for big SMP systems. + * Disable OSS. + * [s390] Use Sparse Memory layout. + * [amd64, i386, powerpc, sparc] Make IPv6 support built-in. + * Centralize Sound core options. + * Centralize Power Management options. + * Centralize CPU Frequency scaling options. + * [sparc] Enable CPU Frequency scaling. + * Enable Network console logging support. + * [s390/s390x-tape] Add image. + * [s390/s390, s390/s390-tape] Remove images. + * [i386/486] Enable High Memory Support. + * [i386] Allocate pagetables from High Memory. + * [amd64, i386] Write protect kernel read-only data structures. + * [amd64, i386] Make kernel relocatable. + * Move images and headers into kernel section. + + [ dann frazier ] + * Enable bnx2x, using firmware-split patches from net-next and mirroring + the per-subarch config settings used for bnx2 + + -- Bastian Blank Sun, 14 Jun 2009 11:45:08 +0200 + +linux-2.6 (2.6.29-5) unstable; urgency=low + + [ dann frazier ] + * [ia64] Backport rtc-efi driver from mainline + + [ maximilian attems ] + * qla1280: Fix off-by-some error in firmware loading. (closes: #527265) + + [ Martin Michlmayr ] + * Broadcom SB: fix locking in set_irq_affinity. + * mmc: load mvsdio automatically when it's a platform device. + * mmc: mvsdio: ignore high speed timing requests from the core + * USB: ftdi_sio: add vendor/product id for the Marvell SheevaPlug. + + [ Bastian Blank ] + * Add stable release 2.6.29.3: + - ath9k: Fix FIF_BCN_PRBRESP_PROMISC handling + - tracing: x86, mmiotrace: fix range test + - sched: account system time properly + - rndis_wlan: fix initialization order for workqueue&workers + - mm: fix Committed_AS underflow on large NR_CPUS environment + - Ignore madvise(MADV_WILLNEED) for hugetlbfs-backed regions + - clockevents: prevent endless loop in tick_handle_periodic() + - intel-iommu: Avoid panic() for DRHD at address zero. + - intel-iommu: Fix oops in device_to_iommu() when devices not found. + - intel-iommu: Fix device-to-iommu mapping for PCI-PCI bridges. + - cs5536: define dma_sff_read_status() method + - proc: avoid information leaks to non-privileged processes + - ath5k: fix buffer overrun in rate debug code + - mv643xx_eth: OOM handling fixes + - mv643xx_eth: 64bit mib counter read fix + - check_unsafe_exec: s/lock_task_sighand/rcu_read_lock/ + - do_execve() must not clear fs->in_exec if it was set by another thread + - check_unsafe_exec() doesn't care about signal handlers sharing + - New locking/refcounting for fs_struct + - Take fs_struct handling to new file (fs/fs_struct.c) + - Get rid of bumping fs_struct refcount in pivot_root(2) + - Kill unsharing fs_struct in __set_personality() + - Annotate struct fs_struct's usage count restriction + - fix setuid sometimes wouldn't + - fix setuid sometimes doesn't + - compat_do_execve should unshare_files + - powerpc: Sanitize stack pointer in signal handling code + - ACPI: Revert conflicting workaround for BIOS w/ mangled PRT entries + - USB: serial: fix lifetime and locking problems + - ptrace: ptrace_attach: fix the usage of ->cred_exec_mutex + - kbuild: fix Module.markers permission error under cygwin + - pagemap: require aligned-length, non-null reads of /proc/pid/pagemap + - drm/i915: allow tiled front buffers on 965+ + - bio: fix memcpy corruption in bio_copy_user_iov() + - PCI quirk: disable MSI on VIA VT3364 chipsets + - ASoC: Fix offset of freqmode in WM8580 PLL configuration + - x86/PCI: don't call e820_all_mapped with -1 in the mmconfig case + - x86-64: fix FPU corruption with signals and preemption + - drm/i915: add support for G41 chipset + - unreached code in selinux_ip_postroute_iptables_compat() (CVE-2009-1184) + - PCI: fix incorrect mask of PM No_Soft_Reset bit + - exit_notify: kill the wrong capable(CAP_KILL) check (CVE-2009-1337) + - crypto: ixp4xx - Fix handling of chained sg buffers + - block: include empty disks in /proc/diskstats + - b44: Use kernel DMA addresses for the kernel DMA API + - virtio-rng: Remove false BUG for spurious callbacks + - USB: Unusual Device support for Gold MP3 Player Energy + - KVM: x86: release time_page on vcpu destruction + - KVM: Fix overlapping check for memory slots + - KVM: MMU: disable global page optimization + - KVM: MMU: Fix off-by-one calculating large page count + - mac80211: fix basic rate bitmap calculation + - ALSA: us122l: add snd_us122l_free() + - thinkpad-acpi: fix LED blinking through timer trigger + - b43: Refresh RX poison on buffer recycling + - b43: Poison RX buffers + - mac80211: Fix bug in getting rx status for frames pending in reorder + buffer + - forcedeth: Fix resume from hibernation regression. + * Ignore ABI change. + + [ Jurij Smakov ] + * [sparc] Fix build + + -- Bastian Blank Sun, 17 May 2009 12:45:13 +0200 + +linux-2.6 (2.6.29-4) unstable; urgency=low + + [ maximilian attems ] + * drm/i915: allow tiled front buffers on 965+. + + [ Martin Michlmayr ] + * Extend erase timeout in M25P80 SPI Flash driver (Peter Horton). + * Add driver for GMT G760A fan speed PWM controller chip. + * [arm/orion5x] Enable SENSORS_G760A. + * Add patches from git.marvell.com: + - allow for alternative __copy_to_user/__clear_user implementations + - alternative copy_to_user/clear_user implementation copy_user + * [arm/orion5x, armel/kirkwood] Enable UACCESS_WITH_MEMCPY. + * [MMC] give Sandisk/Kingston SDHC cards some slack before the SWITCH + command. + + [ dann frazier ] + * [parisc] Fix macro expansion in atomic.h fixing PHONET compilation issue + * [parisc] reenable PHONET + * Btrfs: fix __ucmpdi2 compile bug on 32 bit builds + + [ Stephen R. Marenka ] + * [m68k] Add 2.6.29 patches. + * [m68k] Enable RTC for aranym (2.6.29 solution). + + [ Bastian Blank ] + * Add stable release 2.6.29.2: + - Bonding: fix zero address hole bug in arp_ip_target list + - skge: fix occasional BUG during MTU change + - scsi: mpt: suppress debugobjects warning + - hugetlbfs: return negative error code for bad mount option + - NFS: Fix the XDR iovec calculation in nfs3_xdr_setaclargs + - gso: Fix support for linear packets + - agp: zero pages before sending to userspace + - virtio: fix suspend when using virtio_balloon + - Revert "console ASCII glyph 1:1 mapping" + - Input: gameport - fix attach driver code + - x86, PAT: Remove page granularity tracking for vm_insert_pfn maps + - KVM: is_long_mode() should check for EFER.LMA + - KVM: VMX: Update necessary state when guest enters long mode + - KVM: fix kvm_vm_ioctl_deassign_device + - KVM: MMU: handle compound pages in kvm_is_mmio_pfn + - KVM: Reset PIT irq injection logic when the PIT IRQ is unmasked + - KVM: Interrupt mask notifiers for ioapic + - KVM: Add CONFIG_HAVE_KVM_IRQCHIP + - KVM: Fix missing smp tlb flush in invlpg + - USB: usb-storage: augment unusual_devs entry for Simple Tech/Datafab + - USB: fix oops in cdc-wdm in case of malformed descriptors + - USB: ftdi_sio: add vendor/project id for JETI specbos 1201 spectrometer + - usb gadget: fix ethernet link reports to ethtool + - x86: disable X86_PTRACE_BTS for now + - SCSI: sg: fix q->queue_lock on scsi_error_handler path + - SCSI: sg: avoid blk_put_request/blk_rq_unmap_user in interrupt + - SCSI: sg: fix races with ioctl(SG_IO) + - SCSI: sg: fix races during device removal + - mm: pass correct mm when growing stack + - pata_hpt37x: fix HPT370 DMA timeouts + - hpt366: fix HPT370 DMA timeouts + - powerpc: Fix data-corrupting bug in __futex_atomic_op + - ALSA: hda - Fix the cmd cache keys for amp verbs + - sfc: Match calls to netif_napi_add() and netif_napi_del() + - tty: Fix leak in ti-usb + - spi: spi_write_then_read() bugfixes + - add some long-missing capabilities to fs_mask + - hrtimer: fix rq->lock inversion (again) + - x86: fix broken irq migration logic while cleaning up multiple vectors + - sched: do not count frozen tasks toward load + - dm kcopyd: fix callback race + - dm kcopyd: prepare for callback race fix + - posix-timers: fix RLIMIT_CPU && setitimer(CPUCLOCK_PROF) + - posix-timers: fix RLIMIT_CPU && fork() + - posixtimers, sched: Fix posix clock monotonicity + - cap_prctl: don't set error to 0 at 'no_change' + - SCSI: libiscsi: fix iscsi pool error path + - SCSI: libiscsi: fix iscsi pool error path + - sparc64: Fix bug in ("sparc64: Flush TLB before releasing pages.") + - ALSA: hda - add missing comma in ad1884_slave_vols + - splice: fix deadlock in splicing to file + - netfilter: {ip, ip6, arp}_tables: fix incorrect loop detection + - kprobes: Fix locking imbalance in kretprobes + - acer-wmi: Blacklist Acer Aspire One + - crypto: shash - Fix unaligned calculation with short length + - net/netrom: Fix socket locking + - af_rose/x25: Sanity check the maximum user frame size + - dm table: fix upgrade mode race + - dm: path selector use module refcount directly + - dm target: use module refcount directly + - dm snapshot: avoid having two exceptions for the same chunk + - dm snapshot: avoid dropping lock in __find_pending_exception + - dm snapshot: refactor __find_pending_exception + - dm io: make sync_io uninterruptible + - dm raid1: switch read_record from kmalloc to slab to save memory + - vfs: skip I_CLEAR state inodes + - dm: preserve bi_io_vec when resubmitting bios + - ixgbe: Fix potential memory leak/driver panic issue while setting up Tx & + Rx ring parameters + - mm: do_xip_mapping_read: fix length calculation + - mm: define a UNIQUE value for AS_UNEVICTABLE flag + - sysctl: fix suid_dumpable and lease-break-time sysctls + - cpumask: fix slab corruption caused by alloc_cpumask_var_node() + - ide-atapi: start DMA after issuing a packet command + - ide: drivers/ide/ide-atapi.c needs + - V4L/DVB (10943): cx88: Prevent general protection fault on rmmod + - r8169: Reset IntrStatus after chip reset + - md/raid1 - don't assume newly allocated bvecs are initialised. + - SCSI: sg: fix iovec bugs introduced by the block layer conversion + - drm/i915: fix TV mode setting in property change + - drm/i915: only set TV mode when any property changed + - drm: Use pgprot_writecombine in GEM GTT mapping to get the right bits for + !PAT. + - drm/i915: check for -EINVAL from vm_insert_pfn + - drm/i915: Check for dev->primary->master before dereference. + - drm/i915: Sync crt hotplug detection with intel video driver + - drm/i915: Read the right SDVO register when detecting SVDO/HDMI. + - drm/i915: Change DCC tiling detection case to cover only mobile parts. + - dock: fix dereference after kfree() + - ACPI: cap off P-state transition latency from buggy BIOSes + - x86, setup: mark %esi as clobbered in E820 BIOS call + - tracing/core: fix early free of cpumasks + - rt2x00: Fix SLAB corruption during rmmod + - ext4: fix locking typo in mballoc which could cause soft lockup hangs + - ext4: fix typo which causes a memory leak on error path + - MIPS: Compat: Zero upper 32-bit of offset_high and offset_low. + - PCI/x86: detect host bridge config space size w/o using quirks + - ide: Fix code dealing with sleeping devices in do_ide_request() + - fbdev: fix info->lock deadlock in fbcon_event_notify() + - fbmem: fix fb_info->lock and mm->mmap_sem circular locking dependency + - security/smack: fix oops when setting a size 0 SMACK64 xattr + * Bump ABI to 2. + * [sparc] Make the kernels again 64bit. (closes: #525926) + + -- Bastian Blank Sun, 03 May 2009 09:38:42 +0200 + +linux-2.6 (2.6.29-3) unstable; urgency=low + + [ maximilian attems ] + * [powerpc] Pipe mkimage postinst call to stderr for debconf. + Thanks Jordi Mallach for the patch. (closes: #518231) + * [parisc] Disable PHONET. + * [sparc] Disable BTRFS. + + [ Bastian Blank ] + * [alpha] Fix location of kernel image. + * Add source link to headers packages. (closes: #523726) + + [ Martin Michlmayr ] + * Add some sata_mv fixes for Kirkwood from Marvell: + - use new sata phy register settings for new devices + - increate the IORDY timeout for the soc controllers + + -- maximilian attems Fri, 17 Apr 2009 10:36:03 +0200 + +linux-2.6 (2.6.29-2) unstable; urgency=low + + [ Martin Michlmayr ] + * [arm/ixp4xx] Build in LEDS_TRIGGER_TIMER (closes: #521141). + * [mips*/4kc-malta, mips*/5kc-malta] Build in RTC_DRV_CMOS. + + [ maximilian attems ] + * linux-libc-dev: Bump versioned replaces libdrm-dev. + * parisc: hardcode gcc-4.3 usage. + * Postrm cleanup new module-init-tools 3.7 files. + + [ Bastian Blank ] + * Install all needed Makefiles into common headers package. + (closes: #521472) + * Add stable release 2.6.29.1: + - V4L: v4l2-common: remove incorrect MODULE test + - sparc64: Fix reset hangs on Niagara systems. + - sparc64: Flush TLB before releasing pages. + - sparc64: Fix MM refcount check in smp_flush_tlb_pending(). + - KVM: MMU: Fix another largepage memory leak + - cfg80211: fix incorrect assumption on last_request for 11d + - lguest: fix spurious BUG_ON() on invalid guest stack. + - lguest: wire up pte_update/pte_update_defer + - VM, x86, PAT: Change is_linear_pfn_mapping to not use vm_pgoff + - x86: mtrr: don't modify RdDram/WrDram bits of fixed MTRRs + - x86: ptrace, bts: fix an unreachable statement + - x86: fix 64k corruption-check + - x86, uv: fix cpumask iterator in uv_bau_init() + - x86, PAT, PCI: Change vma prot in pci_mmap to reflect inherited prot + - Add a missing unlock_kernel() in raw_open() + - fuse: fix fuse_file_lseek returning with lock held + - ARM: 5435/1: fix compile warning in sanity_check_meminfo() + - ARM: twl4030 - leak fix + - ARM: fix leak in iop13xx/pci + - ARM: cumana: Fix a long standing bogon + - ARM: 5428/1: Module relocation update for R_ARM_V4BX + - ARM: pxa: fix overlay being un-necessarily initialized on pxa25x + - DVB: firedtv: FireDTV S2 problems with tuning solved + - cfg80211: force last_request to be set for OLD_REG if regdom is EU + - CIFS: Fix memory overwrite when saving nativeFileSystem field during mount + - ath5k: warn and correct rate for unknown hw rate indexes + - ath5k: disable MIB interrupts + - b43: fix b43_plcp_get_bitrate_idx_ofdm return type + - ath9k: fix dma mapping leak of rx buffer upon rmmod + - ath5k: use spin_lock_irqsave for beacon lock + - cifs: fix buffer format byte on NT Rename/hardlink + - ath9k: downgrade xmit queue full message to xmit debug + - KVM: SVM: set accessed bit for VMCB segment selectors + - KVM: VMX: Don't allow uninhibited access to EFER on i386 + - USB: add quirk to avoid config and interface strings + - USB: gadget: fix rndis regression + - USB: usb-storage: increase max_sectors for tape drives + - USB: fix USB_STORAGE_CYPRESS_ATACB + - USB: EHCI: add software retry for transaction errors + - xfrm: spin_lock() should be spin_unlock() in xfrm_state.c + - ipv6: Plug sk_buff leak in ipv6_rcv (net/ipv6/ip6_input.c) + - GRO: Disable GRO on legacy netif_rx path (closes: #521691) + - bridge: bad error handling when adding invalid ether address + - dnet: drivers/net/dnet.c needs + - udp: Wrong locking code in udp seq_file infrastructure + - netfilter: nf_conntrack_tcp: fix unaligned memory access in tcp_sack + + [ dann frazier ] + * bnx2: correct firmware revisions (closes: #522049) + * [mips] Zero upper 32-bits of compat llseek (closes: #521016) + + -- Bastian Blank Sat, 04 Apr 2009 15:13:33 +0200 + +linux-2.6 (2.6.29-1) unstable; urgency=low + + * New upstream release + - tg3 use request_firmware and firmware nuked. + - acenic use request_firmware and firmware nuked. + - e100 use request_firmware and firmware nuked. (closes: #494308) + - cassini use request_firmware and firmware nuked. + - starfire use request_firmware and firmware nuked. (closes: #501152) + - cxgb3 use request_firmware and firmware nuked. + - NR_CPUS setting no longer affects size of modules. (closes: #516709) + - orinoco: use KERN_DEBUG for link status messages. (closes: #447549) + - [CIFS] Fix oops in cifs_strfromUCS_le mounting to servers which do + not specify their OS. (closes: #463402) + - fixes conflict between and on mips + (closes: #519761) + + [ maximilian attems ] + * topconfig set new NET_NS, NET_SCH_DRR, NET_CLS_CGROUP, LIB80211, + SCSI_CXGB3_ISCSI, NATIONAL_PHY, STE10XP, LSI_ET1011C_PHY, BTRFS_FS, + SQUASHFS, PCI_STUB, WIMAX, MTD_LPDDR, EEPROM_AT24, EEPROM_AT25, + EEPROM_LEGACY, BLK_DEV_IT8172, SMSC9420, WIMAX_I2400M_USB, + WIMAX_I2400M_SDIO, MISDN_HFCUSB, SENSORS_ADT7475, SENSORS_LTC4245, + RADIO_TEA5764, SND_HDA_CODEC_INTELHDMI, RT2860, RT2870, RTL8187SE, + LIBFC, FCOE, ATL1C, JOYSTICK_WALKERA0701, TOUCHSCREEN_WACOM_W8001, + TOUCHSCREEN_TSC2007, W1_SLAVE_DS2431, WM8350_POWER, SOC_CAMERA_MT9T031, + SOC_CAMERA_TW9910, SOC_CAMERA_OV772X, USB_STV06XX, USB_GSPCA_OV534, + DVB_LGDT3304, WM8350_WATCHDOG, SMSC_SCH311X_WDT, SND_HRTIMER, + SND_HDA_RECONFIG, GREENASIA_FF, USB_SERIAL_SIEMENS_MPI, + USB_SERIAL_OPTICON, LEDS_ALIX2, LEDS_WM8350, OCFS2_FS_POSIX_ACL, + BTRFS_FS_POSIX_ACL, ATM_SOLOS, MFD_PCF50633, PCF50633_ADC, PCF50633_GPIO, + REGULATOR_PCF50633, DVB_S921, EDAC_I5400, RTC_DRV_PCF50633, + INPUT_PCF50633_PMU, CHARGER_PCF50633, DEVPTS_MULTIPLE_INSTANCES, + SCHED_OMIT_FRAME_POINTER, DCB, IXGBE_DCB, SFC_MTD, BE2NET, DNET. + * topconfig enable SND_HDA_HWDEP for sound debugging purpose. + * topconfig enable USB_HIDDEV (closes: #517771) + * [x86] set DELL_LAPTOP, COMEDI, X86_PTRACE_BTS, XENFS, XEN_COMPAT_XENFS, + X86_REROUTE_FOR_BROKEN_BOOT_IRQS, OPTIMIZE_INLINING. + * [x86] unset DRM_I915_KMS due to upgrade path from Lenny override with + modeset module param. + * temp.image.plain/preinst: Consistent output. + * [x86_64] set SPARSE_IRQ, NUMA_MIGRATE_IRQ_DESC, TREE_RCU. + * [x86_32] set BLK_DEV_CS5536. + * [powerpc] set PHANTOM, HP_ILO, MV643XX_ETH, MOUSE_BCM5974, VIRTUALIZATION. + * topconfig unset legacy SCSI_PROC_FS, PCMCIA_IOCTL, ACPI_PROCFS_POWER, + ACPI_PROC_EVENT. + + [ Bastian Blank ] + * Use external source directory for all builds. + * Use external source directory for all header packages. + * Use dh_prep. + * Update copyright file. + * [s390/s390] Disable BTRFS. + * [sparc] Use sparc as kernel architecture. + * Update kconfig report changes patch. + * [s390] Enable KVM. + * Use debhelper compat level 7. + + [ Martin Michlmayr ] + * [mips/r4k-ip22] Build in RTC_DRV_DS1286. + * [mips/r5k-ip32] Build in RTC_DRV_CMOS (Closes: #516775). + * [arm/versatile, arm/iop32x, arm/ixp4xx] Make LLC2 modular. + * [arm, mips, mipsel] Make MII modular. + * [arm/ixp4xx] Make IXP4XX_WATCHDOG modular. + * topconfig: Disable NET_DSA since this hardware is special purpose and + the option cannot be made modular at the moment and bloats the kernel + image too much. + * [arm, armel] Enable various V4L USB devices. (Closes: #518582) + * [arm/orion5x] Build the SENSORS_LM75 module since it's needed on the + D-Link DNS-323. + * [arm/iop32x, arm/ixp4xx, arm/orion5x] Enable INPUT_TOUCHSCREEN. + * [arm/iop32x, arm/ixp4xx, arm/orion5x] Enable INPUT_JOYDEV, GAMEPORT + and INPUT_JOYSTICK (Closes: #520433). + * [arm/iop32x, arm/ixp4xx, arm/orion5x] Add a size check to ensure that + the kernel will fit in flash. + * Add patches from git.marvell.com to improve Kirkwood support: + - make gpio /input/output validation separate + - MPP initialization code + - SDIO driver for Marvell SoCs + - SDIO driver registration for DB6281 and RD6281 + - register internal devices in a common place + - Marvell SheevaPlug support + - SheevaPlug USB Power Enable setup + - SheevaPlug LED support + - Hook up I2C on Kirkwood + - Add support for QNAP TS-119/TS-219 Turbo NAS + * [armel/kirkwood] Add an image for Marvell's Kirkwood platform. + + [ Ben Hutchings ] + * Remove firmware from drivers and make them use request_firmware(): + - mga (closes: #502666) + - qla1280 (closes: #502667) + - r128 (closes: #494007) + - radeon (closes: #494009) + - tehuti (closes: #501153) + - typhoon (closes: #502669) + + -- Bastian Blank Tue, 24 Mar 2009 14:32:11 +0100 + +linux-2.6 (2.6.28-1) unstable; urgency=low + + * New upstream release + - new btusb. (closes: #505184) + - iwlagn driver for Intel Wifi Link 5100 and 5300. (closes: #501157) + - drm git branch vblank-rework merged. (closes: #456219) + - netfilter.h got in.h include. (closes: #487103) + - netlink errno propageted. (closes: #489340) + - agp g41 support (closes: #513228) + - Includes atl2 driver (Closes: #500065) + - Fixes loading of video module on Samsung systems + (Closes: #475319, #495697) + - Fix rf_kill handling of iwl3945 driver (Closes: #503688) + - Fix adjtimex frequency offset (Closes: #432877) + - Fix oopses with Canon PIXMA MP150 (Closes: #487725) + - Fix excessive interrrupts with compiz (Closes: #456219) + - dsp56k: use request_firmware and firmware nuked (closes: #494010) + - dabusb: use request_firmware and firmware nuked (closes: #502663) + - kaweth: use request_firmware and firmware nuked (closes: #502665) + + [ maximilian attems ] + * Reenable new Juju firewire stack. + * topconfig set ATH9K, IWL5000, IP_NF_SECURITY, IP6_NF_SECURITY, + BRIDGE_EBT_IP6, BT_HCIBTUSB, TOUCHSCREEN_INEXIO, TOUCHSCREEN_TOUCHIT213, + VIRTIO_CONSOLE, VIDEO_ZORAN_ZR36060, USB_VIDEO_CLASS_INPUT_EVDEV, + USB_GSPCA, USB_S2255, OCFS2_FS_STATS, OMFS_FS, CRYPTO_RMD128, + CRYPTO_RMD160, CRYPTO_RMD256, CRYPTO_RMD320, VLAN_8021Q_GVRP, HP_WMI, + COMPAL_LAPTOP, SCSI_DH, SCSI_DH_RDAC, SCSI_DH_HP_SW, SCSI_DH_EMC, + SCSI_DH_ALUA, MAC80211_HWSIM, USB_HSO, BLK_DEV_INTEGRITY, SGI_XP, SGI_GRU, + TLAN, ATM_IA, ATM_FORE200E, MISDN, I2C_HELPER_AUTO, I2C_ISCH, + I2C_NFORCE2_S4985, AT24, SENSORS_AD7414, SENSORS_ADCXX, + SOC_CAMERA_PLATFORM, VIDEO_SH_MOBILE_CEU, DVB_USB_DW2102, DVB_USB_ANYSEE, + DVB_SIANO_SMS1XXX, DVB_DRX397XD, MMC_SDHCI_PCI (closes: #507150), + MMC_SDRICOH_CS (closes: #509979), EDAC_I5100, RTC_DRV_M41T94, + RTC_DRV_DS1305, UBIFS, EXT4 (closes: #512266), CGROUP_FREEZER, + NETFILTER_TPROXY, NETFILTER_XT_TARGET_TPROXY, NETFILTER_XT_MATCH_RECENT, + NETFILTER_XT_MATCH_SOCKET, NET_ACT_SKBEDIT, PHONET, NET_9P_RDMA, ATL2, JME, + ENIC, MLX4_EN, USB_NET_SMSC95XX, I7300_IDLE, NET_SCH_MULTIQ, ICS932S401, + PANASONIC_LAPTOP, QLGE, LIBERTAS_THINFIRM, LIBERTAS_THINFIRM_USB, + INPUT_CM109, W1_SLAVE_BQ27000, SENSORS_ADT7462, SENSORS_MAX1111, + SENSORS_LIS3LV02D, MFD_WM8400, MFD_WM8350_I2C, SOC_CAMERA_MT9M111, + USB_M5602, USB_GSPCA_CONEX, USB_GSPCA_ETOMS, USB_GSPCA_FINEPIX, + USB_GSPCA_MARS, USB_GSPCA_OV519, USB_GSPCA_PAC207, USB_GSPCA_PAC7311, + USB_GSPCA_SONIXB, USB_GSPCA_SONIXJ, USB_GSPCA_SPCA500, USB_GSPCA_SPCA501, + USB_GSPCA_SPCA505, USB_GSPCA_SPCA506, USB_GSPCA_SPCA508, USB_GSPCA_SPCA561, + USB_GSPCA_STK014, USB_GSPCA_SUNPLUS, USB_GSPCA_T613, USB_GSPCA_TV8532, + USB_GSPCA_VC032X, USB_GSPCA_ZC3XX, C2PORT, C2PORT_DURAMAR_2150, + W83697UG_WDT, USB_MR800, DVB_USB_CINERGY_T2, DVB_USB_DTV5100, + DVB_USB_AF9015, DVB_DM1105, DVB_LGS8GL5, DVB_DUMMY_FE, + SND_HDA_CODEC_NVHDMI, SND_USB_US122L, USB_VST, LEDS_PCA9532, LEDS_HP_DISK, + LEDS_PCA955X, LEDS_TRIGGER_BACKLIGHT, EDAC_X38, RTC_DRV_RX8581, + RTC_DRV_DS1390, RTC_DRV_DS3234, RTC_DRV_DS1286, RTC_DRV_M48T35, + RTC_DRV_BQ4802, RTC_DRV_WM8350, UNEVICTABLE_LRU, MAC80211_RC_MINSTREL, + BATTERY_BQ27x00, REGULATOR, REGULATOR_BQ24022, REGULATOR_WM8350, + REGULATOR_WM8400, FB_VIA, FB_METRONOME, FB_MB862XX, UIO_SERCOS3, + CORE_DUMP_DEFAULT_ELF_HEADERS, NET_DSA, NET_DSA_MV88E6060, + NET_DSA_MV88E6131, NET_DSA_MV88E6123_61_65, IT87_WDT, + BACKLIGHT_MBP_NVIDIA, SND_HDA_INPUT_BEEP, USB_WUSB, USB_TMC, IDE_GD, + IDE_GD_ATA, IDE_GD_ATAPI, PCMCIA_IBMTR, USB_EMI62, USB_EMI26, USB_SEVSEG, + UWB, UWB_WLP, UWB_I1480U, UWB_I1480U_WLP, CRYPTO_FIPS, ANSI_CPRNG, + CRC_T10DIF, STAGING, ET131X, CRYPTO_ANSI_CPRNG, PRISM2_USB, HID_COMPAT, + SYSCTL_SYSCALL_CHECK, BOOT_TRACER. + * [x86] set MOUSE_BCM5974, X86_RESERVE_LOW_64K, OPROFILE_IBS, + MICROCODE_INTEL, MICROCODE_AMD, X86_VERBOSE_BOOTUP, MTRR_SANITIZER, + CRYPTO_CRC32C_INTEL, STRICT_DEVMEM. + * [x86_64] set AMD_IOMMU, INTR_REMAP. + * [x86_32] set TOUCHSCREEN_HTCPEN, MOUSE_PS2_OLPC. + * Add stable releases 2.6.28.1-6. + * Turn off SYSFS_DEPRECATED* for newer udev and proper /sys/. + * linux-libc-dev: Add versioned replaces libdrm-dev. (closes: #513604) + * topconfig: Enable MACVLAN. (closes: #504611) + * [ppc] BAYCOM_PAR, BAYCOM_EPP. + * [x86_64] set NR_CPUS to 512. (closes: #491309) + * [686-bigmem] set modular XEN_FBDEV_FRONTEND. + * Newer Standards-Version 3.8.0 without changes. + * Use update-initramfs for initramfs-tools. + * Fix preinst and postinst call to not use deprecated mkinitramfs-kpkg + interfaces. + + [ Martin Michlmayr ] + * [mips/r4k-ip22, mips/sb1-bcm91250a] Don't build in ISO9660. + * [mipsel/r5k-cobalt] Enable INPUT_COBALT_BTNS. + * [mipsel/r5k-cobalt] Enable the new Cobalt LCD driver (FB_COBALT). + * [mips/r4k-ip22] Enable the new ALSA sound driver (SND_SGI_HAL2). + * [arm/iop32x, arm/ixp4xx] Don't build in KEYBOARD_ATKBD, MOUSE_PS2, + SERIO, JFFS2_FS, and CRAMFS. + * [arm/iop32x, arm/ixp4xx] Unset DEBUG_KERNEL so the kernel will + fit in flash. + * [arm/orion5x] Unset FIXED_PHY to work around a clash with fixed + mdio bus and mv643xx_eth. + * Migrate arm, armel, mips and mipsel away from kernel-package. + + [ Ian Campbell ] + * [x86]: Enable Xen guest support in amd64 flavour. (closes: #495590) + + [ dann frazier ] + * [x86, ia64] Enable ACPI_PCI_SLOT + + [ Bastian Blank ] + * Make gcc-4.3 the default compiler. (closes: #463295) + * Add optional image size check. + * debian/rules.real: Setup image installation rules for alpha, hppa, + ia64 and sparc. + * Remove support to build images using kernel-package. + + -- maximilian attems Wed, 18 Feb 2009 16:36:04 +0100 + +linux-2.6 (2.6.26-12) unstable; urgency=high + + [ Ian Campbell ] + * xen: fix ACPI processor throttling for when processor id is -1. (closes: #502849) + + [ dann frazier ] + * Make sendmsg() block during UNIX garbage collection (CVE-2008-5300) + * Fix race conditions between inotify removal and umount (CVE-2008-5182) + * Fix DoS when calling svc_listen twice on the same socket while reading + /proc/net/atm/*vc (CVE-2008-5079) + + [ Bastian Blank ] + * [openvz, vserver] Fix descriptions. + * [sparc] Enable Sun Logical Domains support. (closes: #501684) + * Fix coexistence of pata_marvell and ahci. (closes: #507432) + * [sparc] Support Intergraph graphics chips. (closes: #508108) + + -- Bastian Blank Mon, 15 Dec 2008 12:57:18 +0100 + +linux-2.6 (2.6.26-11) unstable; urgency=low + + [ Bastian Blank ] + * [sparc] Reintroduce dummy PCI host controller to workaround broken X.org. + * [sparc] Fix size checks in PCI maps. + * Add stable release 2.6.26.8: + - netfilter: restore lost ifdef guarding defrag exception + - netfilter: snmp nat leaks memory in case of failure + - netfilter: xt_iprange: fix range inversion match + - ACPI: dock: avoid check _STA method + - ACPI: video: fix brightness allocation + - sparc64: Fix race in arch/sparc64/kernel/trampoline.S + - math-emu: Fix signalling of underflow and inexact while packing result. + - tcpv6: fix option space offsets with md5 + - net: Fix netdev_run_todo dead-lock + - scx200_i2c: Add missing class parameter + - DVB: s5h1411: Power down s5h1411 when not in use + - DVB: s5h1411: Perform s5h1411 soft reset after tuning + - DVB: s5h1411: bugfix: Setting serial or parallel mode could destroy bits + - V4L: pvrusb2: Keep MPEG PTSs from drifting away + - ACPI: Always report a sync event after a lid state change + - ALSA: use correct lock in snd_ctl_dev_disconnect() + - file caps: always start with clear bprm->caps_* + - libertas: fix buffer overrun + - net: Fix recursive descent in __scm_destroy(). + - SCSI: qla2xxx: Skip FDMI registration on ISP21xx/22xx parts. + (Closes: #502552) + - edac cell: fix incorrect edac_mode + - ext[234]: Avoid printk floods in the face of directory corruption + (CVE-2008-3528) + - gpiolib: fix oops in gpio_get_value_cansleep() + * Override ABI changes. + * [xen] Update description. (closes: #505961) + * Revert parts of 2.6.26.6 to fix resume breakage. (closes: #504167) + - clockevents: prevent multiple init/shutdown + - clockevents: broadcast fixup possible waiters + + [ dann frazier ] + * Fix buffer overflow in hfsplus (CVE-2008-4933) + * Fix BUG() in hfsplus (CVE-2008-4934) + * Fix stack corruption in hfs (CVE-2008-5025) + * Fix oops in tvaudio when controlling bass/treble (CVE-2008-5033) + + [ Martin Michlmayr ] + * [arm/iop32x, arm/ixp4xx, arm/orion5x] Enable support for more partition + tables, including MAC_PARTITION (requested by Benoît Knecht). + * leds-pca9532: Fix memory leak and properly handle errors (Sven Wegener) + * leds-pca9532: Move i2c work to a workqueque (Riku Voipio). (closes: + #506116) + + -- Bastian Blank Wed, 26 Nov 2008 11:43:48 +0100 + +linux-2.6 (2.6.26-10) unstable; urgency=low + + [ dann frazier ] + * sctp: Fix possible kernel panic in sctp_sf_abort_violation (CVE-2008-4618) + + [ Martin Michlmayr ] + * DNS-323: add support for revision B1 machines (Matthew Palmer). + * ext3/ext4: Add support for non-native signed/unsigned htree hash + algorithms (Theodore Ts'o). (closes: #493957) + * [arm/ixp4xx] Enable USB_ACM (closes: #504723). + + [ Bastian Blank ] + * agp: Fix stolen memory counting on Intel G4X. (closes: #502606) + * Add stable release 2.6.26.7: + - security: avoid calling a NULL function pointer in drivers/video/tvaudio.c + - DVB: au0828: add support for another USB id for Hauppauge HVR950Q + - drm/i915: fix ioremap of a user address for non-root (CVE-2008-3831) + - ACPI: Ignore _BQC object when registering backlight device + - hwmon: (it87) Prevent power-off on Shuttle SN68PT + - Check mapped ranges on sysfs resource files + - x86: avoid dereferencing beyond stack + THREAD_SIZE + - PCI: disable ASPM on pre-1.1 PCIe devices + - PCI: disable ASPM per ACPI FADT setting + - V4L/DVB (9053): fix buffer overflow in uvc-video + - V4L/DVB (8617): uvcvideo: don't use stack-based buffers for USB transfers. + - V4L/DVB (8498): uvcvideo: Return sensible min and max values when querying + a boolean control. + - V4L: zr36067: Fix RGBR pixel format + - V4L: bttv: Prevent NULL pointer dereference in radio_open + - libata: fix EH action overwriting in ata_eh_reset() + - libata: always do follow-up SRST if hardreset returned -EAGAIN + - fbcon_set_all_vcs: fix kernel crash when switching the rotated consoles + - modules: fix module "notes" kobject leak + - b43legacy: Fix failure in rate-adjustment mechanism + - CIFS: make sure we have the right resume info before calling CIFSFindNext + - sched_rt.c: resch needed in rt_rq_enqueue() for the root rt_rq + - tty: Termios locking - sort out real_tty confusions and lock reads + - x86, early_ioremap: fix fencepost error + - x86: improve UP kernel when CPU-hotplug and SMP is enabled + - x86: Reserve FIRST_DEVICE_VECTOR in used_vectors bitmap. + * [xen] Remove pte file workaround. + + [ Ian Campbell ] + * [xen] Disable usage of PAT. (closes: #503821) + + -- Bastian Blank Sat, 08 Nov 2008 10:50:58 +0100 + +linux-2.6 (2.6.26-9) unstable; urgency=low + + [ Bastian Blank ] + * Add stable release 2.6.26.6: + - mm owner: fix race between swapoff and exit + - rtc: fix kernel panic on second use of SIGIO nofitication + - fbcon: fix monochrome color value calculation + - ALSA: snd-powermac: HP detection for 1st iMac G3 SL + - ALSA: snd-powermac: mixers for PowerMac G4 AGP + - sparc64: Fix missing devices due to PCI bridge test in + of_create_pci_dev(). + - sparc64: Fix disappearing PCI devices on e3500. + - sparc64: Fix OOPS in psycho_pcierr_intr_other(). + - sparc64: Fix interrupt register calculations on Psycho and Sabre. + - sparc64: Fix PCI error interrupt registry on PSYCHO. + - udp: Fix rcv socket locking + - sctp: Fix oops when INIT-ACK indicates that peer doesn't support AUTH + (CVE-2008-4576) + - sctp: do not enable peer features if we can't do them. + - ipsec: Fix pskb_expand_head corruption in xfrm_state_check_space + - netlink: fix overrun in attribute iteration + - niu: panic on reset + - ipv6: Fix OOPS in ip6_dst_lookup_tail(). + - XFRM,IPv6: initialize ip6_dst_blackhole_ops.kmem_cachep + - af_key: Free dumping state on socket close + - pcmcia: Fix broken abuse of dev->driver_data + - clockevents: remove WARN_ON which was used to gather information + - ntp: fix calculation of the next jiffie to trigger RTC sync + - x86: HPET: read back compare register before reading counter + - x86: HPET fix moronic 32/64bit thinko + - clockevents: broadcast fixup possible waiters + - HPET: make minimum reprogramming delta useful + - clockevents: prevent endless loop lockup + - clockevents: prevent multiple init/shutdown + - clockevents: enforce reprogram in oneshot setup + - clockevents: prevent endless loop in periodic broadcast handler + - clockevents: prevent clockevent event_handler ending up handler_noop + - x86: fix memmap=exactmap boot argument + - x86: add io delay quirk for Presario F700 + - ACPI: Avoid bogus EC timeout when EC is in Polling mode + - x86: fix SMP alternatives: use mutex instead of spinlock, text_poke is + sleepable + - rtc: fix deadlock + - mm: dirty page tracking race fix + - x86-64: fix overlap of modules and fixmap areas + - x86: PAT proper tracking of set_memory_uc and friends + - x86: fix oprofile + hibernation badness + - x86: fdiv bug detection fix + - rt2x00: Use ieee80211_hw->workqueue again + - x86: Fix 27-rc crash on vsmp due to paravirt during module load + - sg: disable interrupts inside sg_copy_buffer + - ocfs2: Increment the reference count of an already-active stack. + - APIC routing fix + - sched: fix process time monotonicity + - block: submit_bh() inadvertently discards barrier flag on a sync write + - x64, fpu: fix possible FPU leakage in error conditions + - x86-64: Clean up save/restore_i387() usage + - KVM: SVM: fix guest global tlb flushes with NPT + - KVM: SVM: fix random segfaults with NPT enabled + - ALSA: remove unneeded power_mutex lock in snd_pcm_drop + - ALSA: fix locking in snd_pcm_open*() and snd_rawmidi_open*() + - ALSA: oxygen: fix distorted output on AK4396-based cards + - ALSA: hda - Fix model for Dell Inspiron 1525 + - SCSI: qla2xxx: Defer enablement of RISC interrupts until ISP + initialization completes. + - USB: fix hcd interrupt disabling + - smb.h: do not include linux/time.h in userspace + - pxa2xx_spi: fix build breakage + - pxa2xx_spi: chipselect bugfixes + - pxa2xx_spi: dma bugfixes + - mm: mark the correct zone as full when scanning zonelists + - async_tx: fix the bug in async_tx_run_dependencies + - drivers/mmc/card/block.c: fix refcount leak in mmc_block_open() + - ixgbe: initialize interrupt throttle rate + - i2c-dev: Return correct error code on class_create() failure + - x86-32: AMD c1e force timer broadcast late + * [x86] Update patch to detect not properly announced cmos RTC devices. + * [xen] Overtake hvc console by default. + + [ maximilian attems ] + * [openvz] ip: NULL pointer dereferrence in tcp_v(4|6)_send_ack + (closes: #500472) + * [openvz] unset NF_CONNTRACK_IPV6 for now until abi bump. + + [ Stephen R. Marenka ] + * [m68k] add patches to fix atari ethernec per Michael Schmitz: + atari-ethernec-IRQF_SHARED.diff and atari-ethernec-fixes.diff. + * [m68k] add mac-esp-fix-for-quadras-with-two-esp-chips.diff to fix macs + with dual scsi busses and a problem with xorg, per Finn Thain. + * [m68k] add atari-atari_keyb_init-operator-precedence.diff per + Michael Schmitz. + * [m68k] more mac patches, per Finn Thain. + + [ Martin Michlmayr ] + * [arm/ixp4xx] Enable USB_ATM and USB_SPEEDTOUCH (closes: #502182). + * [arm/iop32x, arm/orion5x] Likewise. + * DNS-323: read MAC address from flash (Matthew Palmer). + + [ dann frazier ] + * Restrict access to the DRM_I915_HWS_ADDR ioctl (CVE-2008-3831) + * Don't allow splicing to files opened with O_APPEND (CVE-2008-4554) + + -- Bastian Blank Sat, 18 Oct 2008 12:14:22 +0200 + +linux-2.6 (2.6.26-8) unstable; urgency=medium + + [ dann frazier ] + * [x86] Fix broken LDT access in VMI (CVE-2008-4410) + * ata: Fix off-by-one-error that causes errors when reading a + block on the LBA28-LBA48 boundary + * [s390] prevent ptrace padding area read/write in 31-bit mode + (CVE-2008-1514) + + [ Bastian Blank ] + * Fix generation of i386 Xen image information. + * [i386] Restrict the usage of long NOPs. (closes: #464962) + * Fix access to uninitialized user keyring. (closes: #500279) + * [x86] Fix detection of non-PNP RTC devices. (closes: #499230) + + -- Bastian Blank Thu, 09 Oct 2008 12:07:21 +0200 + +linux-2.6 (2.6.26-7) unstable; urgency=low + + [ Bastian Blank ] + * [xen] Add SuSE Xen patch. (closes: #495895) + * Only register notifiers in braille console if used, fixes Insert key. + (closes: #494374) + * Fix ACPI EC GPE storm detection. (closes: #494546) + * Disable useless support for ISP1760 USB host controller. + (closes: #498304) + * rt61pci: Add a sleep after firmware upload. (closes: #498828) + + [ Stephen R. Marenka ] + * [m68k] Set CONFIG_ATARI_ETHERNEC=m for atari, since it only works + in modular form. + * [m68k] Enable CONFIG_ADB_PMU68K=y for mac. + * [m68k] Add atari-aranym-nf-wrappers.diff patch to fix atari LBD + problems, set CONFIG_LBD=y for atari. + + [ Martin Michlmayr ] + * [arm/orion5x] Enable CONFIG_ATALK (requested by Ben Schwarz). + * [arm/versatile] Enable CONFIG_VFP. (closes: #499463) + * ath5k: Fix bad udelay calls on AR5210 code (Nick Kossifidis). + * [arm] No longer disable ATH5K. + + [ dann frazier ] + * Add missing capability checks in sbni_ioctl (CVE-2008-3525) + + -- Bastian Blank Wed, 01 Oct 2008 09:02:30 +0200 + +linux-2.6 (2.6.26-6) unstable; urgency=low + + [ maximilian attems ] + * [openvz] Enable checkpointing. (closes: #497292) + + [ Bastian Blank ] + * Allow forced module loading again. (closes: #494144) + * Set IEEE 802.11 (wireless) regulatory domain default to EU. + (closes: #497971) + * [i386] Enable IDE ACPI support. Override ABI changes. (closes: #470528) + * [i386/686-bigmem] Promote to generic subarch. (closes: #476120) + + [ Martin Michlmayr ] + * Fix dead 21041 ethernet after ifconfig down (Thomas Bogendoerfer). + + [ dann frazier ] + * [hppa] Enable the FPU before using it, fixes booting on A500s + with our CONFIG_PRINTK_TIME=y setting. (closes: #499458) + + -- Bastian Blank Wed, 24 Sep 2008 12:06:47 +0200 + +linux-2.6 (2.6.26-5) unstable; urgency=low + + [ Martin Michlmayr ] + * Backport power-off method for Kurobox Pro. + * [arm/versatile] Really enable CONFIG_RTC_DRV_PL031 (closes: #484432). + + [ Stephen R. Marenka ] + * [m68k] Set CONFIG_LBD=n for atari, since it conflicts with nfblock. + + [ Bastian Blank ] + * Reenable SiS SATA support. (closes: #496603) + * [amd64,i386] Disable new-style SiS PATA support. + * Add stable release 2.6.26.4: + - sata_mv: don't issue two DMA commands concurrently + - KVM: MMU: Fix torn shadow pte + - x86: work around MTRR mask setting, v2 + - nfsd: fix buffer overrun decoding NFSv4 acl (CVE-2008-3915) + - sunrpc: fix possible overrun on read of /proc/sys/sunrpc/transports + (CVE-2008-3911) + - r8169: balance pci_map / pci_unmap pair + - tg3: Fix firmware event timeouts + - crypto: authenc - Avoid using clobbered request pointer + - sparc64: Fix cmdline_memory_size handling bugs. + - sparc64: Fix overshoot in nid_range(). + - ipsec: Fix deadlock in xfrm_state management. (closes: #497796) + - sctp: fix random memory dereference with SCTP_HMAC_IDENT option. + - sctp: correct bounds check in sctp_setsockopt_auth_key + - sch_prio: Fix nla_parse_nested_compat() regression + - sctp: add verification checks to SCTP_AUTH_KEY option + - sctp: fix potential panics in the SCTP-AUTH API. + - udp: Drop socket lock for encapsulated packets + - pkt_sched: Fix actions referencing + - pkt_sched: Fix return value corruption in HTB and TBF. + - netns: Add network namespace argument to rt6_fill_node() and + ipv6_dev_get_saddr() + - ipv6: Fix OOPS, ip -f inet6 route get fec0::1, linux-2.6.26, + ip6_route_output, rt6_fill_node+0x175 (CVE-2008-3686) + - AX.25: Fix sysctl registration if !CONFIG_AX25_DAMA_SLAVE + - mm: make setup_zone_migrate_reserve() aware of overlapping nodes + - 8250: improve workaround for UARTs that don't re-assert THRE correctly + - rtc_time_to_tm: fix signed/unsigned arithmetic + - drivers/char/random.c: fix a race which can lead to a bogus BUG() + - cifs: fix O_APPEND on directio mounts + - atl1: disable TSO by default + - forcedeth: fix checksum flag + - bio: fix bio_copy_kern() handling of bio->bv_len + - bio: fix __bio_copy_iov() handling of bio->bv_len + - ALSA: oxygen: prevent muting of nonexistent AC97 controls + - S390 dasd: fix data size for PSF/PRSSD command + - x86: fix "kernel won't boot on a Cyrix MediaGXm (Geode)" + - x86: work around MTRR mask setting + - USB: cdc-acm: don't unlock acm->mutex on error path + - binfmt_misc: fix false -ENOEXEC when coupled with other binary handlers + - fbdefio: add set_page_dirty handler to deferred IO FB + - eeepc-laptop: fix use after free + - PCI: fix reference leak in pci_get_dev_by_id() + - cramfs: fix named-pipe handling + * Override ABI changes. + * [hppa] Disable new-style RTC support. Override ABI changes. + + [ maximilian attems ] + * openvz: Add upstream fixes up to 24cebf40278cb071ff8b. (closes: #497528) + + -- Bastian Blank Wed, 10 Sep 2008 12:55:16 +0200 + +linux-2.6 (2.6.26-4) unstable; urgency=low + + [ maximilian attems ] + * x86: Reset ACPI_PROCFS_POWER for Lenny as buggy apps depend on it. + (closes: #495541) + * x86: ACPI: Fix thermal shutdowns + * openvz: Add upstream fixes up to 0f14912e3d2251aff. (closes: #494384) + * Add stable release 2.6.26.3: + - USB: fix interface unregistration logic + - usb-storage: unusual_devs entries for iRiver T10 and Datafab CF+SM reader + - usb-serial: don't release unregistered minors + - usb-storage: revert DMA-alignment change for Wireless USB + - usb-storage: automatically recognize bad residues + - USB: ftdi_sio: Add USB Product Id for ELV HS485 + - qla2xxx: Set an rport's dev_loss_tmo value in a consistent manner. + - dccp: change L/R must have at least one byte in the dccpsf_val field + (CVE-2008-3276) + - KVM: Avoid instruction emulation when event delivery is pending + - cs5520: add enablebits checking + - acer-wmi: Fix wireless and bluetooth on early AMW0 v2 laptops + - USB: usb-storage: quirk around v1.11 firmware on Nikon D4 + - radeonfb: fix accel engine hangs + - radeon: misc corrections + - sparc64: Fix global reg snapshotting on self-cpu. + - sparc64: Do not clobber %g7 in setcontext() trap. + - sparc64: Fix end-of-stack checking in save_stack_trace(). + - sparc64: Fix recursion in stack overflow detection handling. + - sparc64: Make global reg dumping even more useful. + - sparc64: Implement IRQ stacks. + - sparc64: Handle stack trace attempts before irqstacks are setup. + - PCI: Limit VPD length for Broadcom 5708S + - ide: it821x in pass-through mode segfaults in 2.6.26-stable + - syncookies: Make sure ECN is disabled + - USB: ftdi_sio: add support for Luminance Stellaris Evaluation/Development + Kits + - i2c: Fix NULL pointer dereference in i2c_new_probed_device + - SCSI: hptiop: add more PCI device IDs + - SCSI: ses: fix VPD inquiry overrun + - SCSI: scsi_transport_spi: fix oops in revalidate + - CIFS: Fix compiler warning on 64-bit + - x86: fix spin_is_contended() + - matrox maven: fix a broken error path + - i2c: Let users select algorithm drivers manually again + - CIFS: properly account for new user= field in SPNEGO upcall string + allocation + - x86: fix setup code crashes on my old 486 box + - KVM: ia64: Fix irq disabling leak in error handling code + - mlock() fix return values + - rtl8187: Fix lockups due to concurrent access to config routine + - KVM: task switch: segment base is linear address + - KVM: task switch: use seg regs provided by subarch instead of reading + from GDT + - KVM: task switch: translate guest segment limit to virt-extension byte + granular field + - r8169: avoid thrashing PCI conf space above RTL_GIGA_MAC_VER_06 + - sparc64: FUTEX_OP_ANDN fix + - posix-timers: do_schedule_next_timer: fix the setting of ->si_overrun + - posix-timers: fix posix_timer_event() vs dequeue_signal() race + - vt8623fb: fix kernel oops + - ide-cd: fix endianity for the error message in cdrom_read_capacity + - qla2xxx: Add dev_loss_tmo_callbk/terminate_rport_io callback support. + - random32: seeding improvement + - CIFS: mount of IPC$ breaks with iget patch + - CIFS: if get root inode fails during mount, cleanup tree connection + - crypto: padlock - fix VIA PadLock instruction usage with + irq_ts_save/restore() + - ipvs: Fix possible deadlock in estimator code + - SCSI: block: Fix miscalculation of sg_io timeout in CDROM_SEND_PACKET + handler. + - ALSA: asoc: restrict sample rate and size in Freescale MPC8610 sound + drivers + - ALSA: ASoC: fix SNDCTL_DSP_SYNC support in Freescale 8610 sound drivers + - USB: pl2023: Remove USB id (4348:5523) handled by ch341 + - relay: fix "full buffer with exactly full last subbuffer" accounting + problem + - ipv6: Fix ip6_xmit to send fragments if ipfragok is true + - x86: amd opteron TOM2 mask val fix + + [ dann frazier ] + * [ia64] Fix boot-time hang w/ PRINTK_TIME by ensuring that cpu0 can access + per-cpu vars in early boot + * delay calls to sched_clock() until after sched_clock_init() to prevent + inaccurate printk timings on ia64 and presumably other architectures + + [ Ian Campbell ] + * [xen] import upstream fix to fb-defio driver used by Xen framebuffer. + + [ Bastian Blank ] + * [powerpc] Enable proper RTC support. (closes: #484693) + + [ Martin Michlmayr ] + * Add Marvell Orion fixes: + - sata_mv: add the Gen IIE flag to the SoC devices. + - sata_mv: don't avoid clearing interrupt status on SoC host adapters + + [ dann frazier ] + * Fix overflow condition in sctp_setsockopt_auth_key (CVE-2008-3526) + * Fix panics that may occur if SCTP AUTH is disabled (CVE-2008-3792) + * [x86] Fix memory leak in the copy_user routine + (CVE-2008-0598, closes: #490910) + + -- Bastian Blank Thu, 28 Aug 2008 08:46:42 +0200 + +linux-2.6 (2.6.26-3) unstable; urgency=low + + [ Bastian Blank ] + * Disable Emagic Audiowerk 2 soundcard support. The PCI IDs clashes with + many DVB cards. + * Update VServer patch to 2.3.0.35. + * [armel/versatile] Override ABI changes. + * [i386/686-bigmem] Add VServer image. + + [ Aurelien Jarno ] + * [armel/versatile] Disable CONFIG_NO_HZ, CONFIG_HIGH_RES_TIMERS for + dynticks. (closes: #494842) + + [ Martin Michlmayr ] + * Fix PCIe on the Kurobox Pro (Lennert Buytenhek). + * Fix regressions caused by the "use software GSO for SG+CSUM capable + netdevices" patch: + - loopback: Enable TSO (Herbert Xu) + - net: Preserve netfilter attributes in skb_gso_segment using + __copy_skb_header (Herbert Xu) + + [ dann frazier ] + * [amd64] Fix typo in TOM2 mask value, preventing a hang on some opteron + systems. (closes: #494365) + + -- Bastian Blank Mon, 18 Aug 2008 15:34:38 +0200 + +linux-2.6 (2.6.26-2) unstable; urgency=low + + [ Bastian Blank ] + * [powerpc] Install arch/powerpc/lib/crtsavres.o into the headers, it is + used during module linking. + * Add stable release 2.6.26.1: + - Fix off-by-one error in iov_iter_advance() + - ath5k: don't enable MSI, we cannot handle it yet + - b43legacy: Release mutex in error handling code + - cpufreq acpi: only call _PPC after cpufreq ACPI init funcs got called already + - VFS: increase pseudo-filesystem block size to PAGE_SIZE + - markers: fix markers read barrier for multiple probes + - tmpfs: fix kernel BUG in shmem_delete_inode + - mpc52xx_psc_spi: fix block transfer + - ixgbe: remove device ID for unsupported device + - UML - Fix boot crash + - eCryptfs: use page_alloc not kmalloc to get a page of memory + - x86: fix kernel_physical_mapping_init() for large x86 systems + - DVB: cx23885: SRAM changes for the 885 and 887 silicon parts + - DVB: cx23885: Reallocated the sram to avoid concurrent VIDB/C issues + - DVB: cx23885: DVB Transport cards using DVB port VIDB/TS1 did not stream + - DVB: cx23885: Ensure PAD_CTRL is always reset to a sensible default + - V4L: cx23885: Bugfix for concurrent use of /dev/video0 and /dev/video1 + - V4L: saa7134: Copy tuner data earlier to avoid overwriting manual tuner type + - V4L: uvcvideo: Add support for Medion Akoya Mini E1210 integrated webcam + - V4L: uvcvideo: Make input device support optional + - V4L: uvcvideo: Don't free URB buffers on suspend + - V4L: uvcvideo: Use GFP_NOIO when allocating memory during resume + - V4L: uvcvideo: Fix a buffer overflow in format descriptor parsing + - DVB: dib0700: add support for Hauppauge Nova-TD Stick 52009 + - V4L: cx18: Upgrade to newer firmware & update documentation + - ALSA: trident - pause s/pdif output + - myri10ge: do not use mgp->max_intr_slots before loading the firmware + - myri10ge: do not forget to setup the single slice pointers + - iop-adma: fix platform driver hotplug/coldplug + - sparc64: Do not define BIO_VMERGE_BOUNDARY. + - sparc64: Fix cpufreq notifier registry. + - sparc64: Fix lockdep issues in LDC protocol layer. + - tcp: Clear probes_out more aggressively in tcp_ack(). + - ARM: fix fls() for 64-bit arguments + - vmlinux.lds: move __attribute__((__cold__)) functions back into final .text section + - rtc-at91rm9200: avoid spurious irqs + - ide-cd: fix oops when using growisofs + - x86: fix crash due to missing debugctlmsr on AMD K6-3 + - cpusets: fix wrong domain attr updates + - proc: fix /proc/*/pagemap some more + - Fix build on COMPAT platforms when CONFIG_EPOLL is disabled + - markers: fix duplicate modpost entry + - x86, suspend, acpi: enter Big Real Mode + - USB: fix usb serial pm counter decrement for disconnected interfaces + - x86 reboot quirks: add Dell Precision WorkStation T5400 + - Fix typos from signal_32/64.h merge + - rcu: fix rcu_try_flip_waitack_needed() to prevent grace-period stall + - Patch Upstream: x86 ptrace: fix PTRACE_GETFPXREGS error + - KVM: MMU: Fix potential race setting upper shadow ptes on nonpae hosts + - KVM: MMU: nuke shadowed pgtable pages and ptes on memslot destruction + - KVM: x86 emulator: Fix HLT instruction + - KVM: VMX: Add ept_sync_context in flush_tlb + - KVM: mmu_shrink: kvm_mmu_zap_page requires slots_lock to be held + - KVM: SVM: fix suspend/resume support + - KVM: VMX: Fix a wrong usage of vmcs_config + - isofs: fix minor filesystem corruption + - quota: fix possible infinite loop in quota code + - hdlcdrv: Fix CRC calculation. + - ipv6: __KERNEL__ ifdef struct ipv6_devconf + - ipv6: use timer pending + - udplite: Protection against coverage value wrap-around + - pxamci: trivial fix of DMA alignment register bit clearing + * [sparc] Install asm-sparc headers again. + * Force RTC on by default and set clock on startup. Override ABI changes. + * [i386, amd64] Make the CMOS RTC support builtin. (closes: #493567) + * Add stable release 2.6.26.2: + - sound: ensure device number is valid in snd_seq_oss_synth_make_info + - Ath5k: kill tasklets on shutdown + - Ath5k: fix memory corruption + - vfs: fix lookup on deleted directory + - ALSA: emu10k1 - Fix inverted Analog/Digital mixer switch on Audigy2 + - ALSA: hda - Add missing Thinkpad Z60m support + - ALSA: hda - Fix DMA position inaccuracy + - ALSA: hda - Fix wrong volumes in AD1988 auto-probe mode + - Add compat handler for PTRACE_GETSIGINFO + - Bluetooth: Signal user-space for HIDP and BNEP socket errors + - Input: i8042 - add Acer Aspire 1360 to nomux blacklist + - Input: i8042 - add Gericom Bellagio to nomux blacklist + - Input: i8042 - add Intel D845PESV to nopnp list + - jbd: fix race between free buffer and commit transaction + - NFS: Ensure we zap only the access and acl caches when setting new acls + - SCSI: ch: fix ch_remove oops + - linear: correct disk numbering error check + - netfilter: xt_time: fix time's time_mt()'s use of do_div() + - Kprobe smoke test lockdep warning + - Close race in md_probe + - x86: io delay - add checking for NULL early param + - x86: idle process - add checking for NULL early param + - SCSI: bsg: fix bsg_mutex hang with device removal + - netfilter: nf_nat_sip: c= is optional for session + - romfs_readpage: don't report errors for pages beyond i_size + - ftrace: remove unneeded documentation + + [ Martin Michlmayr ] + * METH: fix MAC address setup (Thomas Bogendoerfer) + * Export the reset button of the QNAP TS-409. + * net: use software GSO for SG+CSUM capable netdevices (Lennert Buytenhek) + + [ dann frazier ] + * device_create interface changed between 2.6.26 and 2.6.27; adjust hpilo + backport appropriately. Fixes a NULL pointer dereference in ilo_probe(). + + -- Bastian Blank Fri, 08 Aug 2008 08:09:00 +0200 + +linux-2.6 (2.6.26-1) unstable; urgency=low + + * New upstream release see http://kernelnewbies.org/Linux_2_6_26 + - UDF 2.50 support. (closes: #480910) + - mmc: increase power up delay (closes: #481190) + - snd-hda-intel suspend troubles fixed. (closes: #469727, #481613, #480034) + - cifs QueryUnixPathInfo fix (closes: #480995) + - r8169 oops in r8169_get_mac_version (closes: #471892) + - netfilter headers cleanup (closes: #482331) + - iwlwifi led support (closes: #469095) + - ath5k associates on AR5213A (closes: #463785) + - T42 suspend fix (closes: #485873) + - cpuidle acpi driver: fix oops on AC<->DC (closes: #477201) + - opti621 ide fixes (closes: #475561) + - ssh connection hangs with mac80211 (closes: #486089) + - ocfs2: Allow uid/gid/perm changes of symlinks (closes: #479475) + - xircom_tulip_cb: oboslete driver removed (closes: #416900) + - r8169 properly detect link status (closes: #487586) + - iwl3945 connection + support fixes (closes: #481436, #482196) + - longrun cpufreq min freq fix (closes: #468149) + - emux midi synthesizer SOFT_PEDAL-release event (closes: #474312) + - vmemmap fixes to use smaller pages (closes: #483489) + - x86 freeze fixes (closes: #482100, #482074) + - xen boot failure fix (closes: #488284) + - gdb read floating-point and SSE registers (closes: #485375) + - USB_PERSIST is default on (closes: #489963) + - alsa snd-hda Dell Inspiron fix (closes: #490649) + - ipw2200: queue direct scans (closes: #487721) + - better gcc-4.3 support (closes: #492301) + - iwl3945 monitor mode. (closes: #482387) + + [ maximilian attems ] + * topconfig set CRYPTO_CTS, SND_PCSP, SND_AW2, IWL4965_LEDS, IWL3945_LEDS, + RT2400PCI_LEDS, RT2500PCI_LEDS, RT61PCI_LEDS, RT2500USB_LEDS, + RT73USB_LEDS, NF_CT_PROTO_DCCP, BRIDGE_EBT_NFLOG, IWLWIFI_RFKILL, + USB_SERIAL_SPCP8X5, USB_STORAGE_CYPRESS_ATACB, DVB_ISL6405, DVB_AU8522, + VIDEO_EM28XX_DVB, VIDEO_CX18, VIDEO_AU0828, SOC_CAMERA_MT9M001, + SOC_CAMERA_MT9V022, DVB_TUNER_ITD1000, VIDEO_PVRUSB2_DVB, USB_C67X00_HCD, + USB_ISP1760_HCD, HTC_PASIC3, I2C_PCA_PLATFORM, TOUCHSCREEN_WM97XX, + JOYSTICK_ZHENHUA, SFC, ACCESSIBILITY, UIO_SMX, LOGIRUMBLEPAD2_FF, + A11Y_BRAILLE_CONSOLE, EDS_TRIGGER_DEFAULT_ON, VIDEO_ALLOW_V4L1, ATA_ACPI, + SATA_PMP, ATA_SFF, USB_SERIAL_MOTOROLA, USB_WDM, MAC80211_MESH, + IPV6_MROUTE, IPV6_PIMSM_V2, MTD_AR7_PARTS, SENSORS_IBMAEM, PATA_SCH, + CGROUP_DEVICE, USB_ISIGHTFW, HW_RANDOM_VIRTIO, RTC_DRV_FM3130, + USB_VIDEO_CLASS, CIFS_DFS_UPCALL. + * [amd64, i386]: KVM_CLOCK, KVM_GUEST, ISCSI_IBFT_FIND, ISCSI_IBFT, THERMAL, + EEEPC_LAPTOP, FB_N411, THERMAL_HWMON. + * [amd64]: Enable SCSI_DPT_I2O as 64 bit now. + * Reenable USB_SERIAL_EDGEPORT, USB_SERIAL_EDGEPORT_TI. (closes: #480195) + * Enable TCP_MD5SIG for BGP sessions. (closes: #443742) + * Add recognised alsa cards to bug report. + * topconfig: Enable HYSDN, no longer broken on smp. + * Add request_firmware patch for keyspan. (closes: #448900) + * [x86]: Enable dma engine. (closes: #473331) + * [ppc64]: Enable IBMEBUS and EHEA. (closes: #484888) + * topconfig: Enable PROFILING across all flavours. (closes: #484885) + * 486: enable OLPC support thanks Andres Salomon for merge. + Kconfig variable patch by Robert Millan (closes: #485063). + * Add request_firmware patch for ip2. + * Add request_firmware patch for acenic. (closes: #284221) + * [x86, ia64]: Set HPET_RTC_IRQ. (closes: #479709, #476970) + * [ppc]: Set SND_VIRMIDI. (closes: #290090) + * Fallback for userspace compatibility to old IEEE 1394 FireWire stack. + (closes: #451367, #475295, #478419) + * [x86]: Enable modular FB_UVESA. (closes: #473180) + * JFFS2 enable summary and compressor support. (closes: #488242) + * Add OLPC sdhci quirks. Thanks Andres Salomon + (closes: #485192) + * [ppc]: Enable RTC_DRV_PPC. (closes: #484693) Thanks for the patch to + Geoff Levand . + * Enable BLK_DEV_BSG for SG v4 support. + * [amd64] Enable default disabled memtest boot param. + * topconfig: Enable PATA_SIS instead of SATA_SIS. (closes: #485609) + * Add OpenVZ countainer flavour for amd64, i386. (closes: #392015) + * atl1e driver for Atheros(R) L1e Fast Ethernet. (closes: #492029) + * [ALSA] hda - Add ICH9 controller support (8086:2911) + * [ALSA] hda - support intel DG33 motherboards + * HP iLO driver + * Input: i8042 - add Arima-Rioworks HDAMB board to noloop list + (closes: #489190) thanks Guillaume Morin + + [ Martin Michlmayr ] + * [arm/orion5x] Update the config to reflect upstream renaming this + subarch. + * [arm/orion5x] Add some patches from Marvell's Orion tree: + - Feroceon: speed up flushing of the entire cache + - support for 5281 D0 stepping + - cache align destination pointer when copying memory for some processors + - cache align memset and memzero + - DMA engine driver for Marvell XOR engine + - Orion hardware watchdog support + * [arm/orion5x] Enable NETCONSOLE. + * [arm/orion5x] Disable more SCSI drivers. + * [arm/ixp4xx] Disable most ATA and more SCSI and network drivers. + * [arm/versatile] Enable CONFIG_RTC_DRV_PL031 (closes: #484432). + * [arm/iop32x, arm/ixp4xx, arm/versatile] Enable ARM_THUMB (closes: #484524). + * [arm/iop32x] Add LED driver for Thecus N2100 (Riku Voipio). + * [mips/r5k-ip32] Enable USB. + * [arm/orion5x, arm/iop32x, arm/ixp4xx, mipsel/r5k-cobalt] Enable HAMRADIO + on the request of Heinz Janssen. + * [arm/orion5x] Add support for QNAP TS-409 and HP mv2120; thanks + Sylver Bruneau. + * [mips] Add patches from Thomas Bogendoerfer: + - gbefb: fix cmap FIFO timeout (closes: #487257) + - IP32: Enable FAST-20 for onboard scsi + - IP32: SGI O2 sound driver + * [arm/ixp4xx] Add support for Freecom FSG-3 (Rod Whitby). + * [arm/ixp4xx] Enable CONFIG_MACH_DSMG600. + * [arm/iop32x] Unset NET_DMA since it actually leads to worse network + performance. + * [arm/orion5x] Fix a boot crash on the Kurobox Pro. + * [arm/orion5x] use better key codes for the TS-209/TS-409 buttons + * [arm/orion5x] export red SATA lights on TS-409, fix SATA presence/activity + * [arm] Enable KEXEC (closes: #492268). + * [arm/orion5x] Enable USB_PRINTER, requested by Mike Arthur. + * [arm/orion5x] Enable binfmt aout, x25, wireless and ATM. + * [arm/iop32x, arm/orion5x] Enable USB_SISUSBVGA. + * [arm] xfs: pack some shortform dir2 structures for the ARM old ABI + architecture (closes: #414932). + + [ Ian Campbell ] + * Readme.build updated on how to generate orig tarballs. + * Forward port vmlinuz-target.patch. + * Enable Xen save/restore and memory ballooning for Xen enabled kernels. + + [ Bastian Blank ] + * [powerpc/powerpc-miboot] Disable. (closes: #481358) + * [powerpc/powerpc64] Support IBM Cell based plattforms and PS3. + (closes: #462529) + * [s390] Synchronize block device, network bridge, network scheduler and CRC + support. + * [s390] Enable support for PCI-attached cryptographic adapters. + * Use control group as base for group CPU scheduler. This reenabled + traditional nice behaviour. (closes: #489223) + * Bump yaird dependencies to at least 0.0.13. + * Reenable SECCOMP. There is no longer additional overhead. + (closes: #474648) + * Export symbol required for MOL again. (closes: #460667) + * [powerpc/powerpc64] Fix console selection in LPAR environment. + (closes: #492703) + * Fix several userspace compatibility problems. + + [ Christian T. Steigies ] + * [m68k] enable SERIAL_CONSOLE for amiga and atari + + [ Thiemo Seufer ] + * [mips] Fix logic bug in atomic_sub_if_positive. + + [ Stephen R. Marenka ] + * [m68k] Update pending m68k patches. + * [m68k] Enable nfcon and nfblock for atari. + * [m68k] Change compiler to default. + + [ Aurelien Jarno ] + * [arm/versatile] Switch scsi/ext3/smc91x to modules now that we have proper + d-i support. Remove options defined in toplevel config file. + + -- Bastian Blank Wed, 30 Jul 2008 10:17:29 +0200 + +linux-2.6 (2.6.25-7) unstable; urgency=high + + * Add stable release 2.6.25.10: + - TTY: fix for tty operations bugs (CVE-2008-2812) + - sched: fix cpu hotplug + - IB/mthca: Clear ICM pages before handing to FW + - DRM: enable bus mastering on i915 at resume time + - x86: shift bits the right way in native_read_tscp + - x86_64 ptrace: fix sys32_ptrace task_struct leak (CVE-2008-3077) + - ptrace GET/SET FPXREGS broken + - futexes: fix fault handling in futex_lock_pi + - x86: fix cpu hotplug crash + * Add stable release 2.6.25.11: + - x86: fix ldt limit for 64 bit + + -- maximilian attems Mon, 14 Jul 2008 10:58:14 +0200 + +linux-2.6 (2.6.25-6) unstable; urgency=high + + [ maximilian attems ] + * Add stable release 2.6.25.7: + - double-free of inode on alloc_file() failure exit in create_write_pipe() + - m68k: Add ext2_find_{first,next}_bit() for ext4 + - bluetooth: fix locking bug in the rfcomm socket cleanup handling + - serial: fix enable_irq_wake/disable_irq_wake imbalance in serial_core.c + - bttv: Fix a deadlock in the bttv driver (closes: #487594) + - forcedeth: msi interrupts + - CPUFREQ: Fix format string bug. + - mmc: wbsd: initialize tasklets before requesting interrupt + - ecryptfs: fix missed mutex_unlock + - mac80211: send association event on IBSS create + - bluetooth: rfcomm_dev_state_change deadlock fix + - sunhv: Fix locking in non-paged I/O case. + - cassini: Only use chip checksum for ipv4 packets. + - ipwireless: Fix blocked sending + - net: Fix call to ->change_rx_flags(dev, IFF_MULTICAST) in + dev_change_flags() + - fbdev: export symbol fb_mode_option + - ipsec: Use the correct ip_local_out function + - tcp: fix skb vs fack_count out-of-sync condition + - tcp FRTO: Fix fallback to conventional recovery + - tcp FRTO: SACK variant is errorneously used with NewReno + - tcp FRTO: work-around inorder receivers + - tcp: Fix inconsistency source (CA_Open only when !tcp_left_out(tp)) + - l2tp: avoid skb truesize bug if headroom is increased + - l2tp: Fix possible WARN_ON from socket code when UDP socket is closed + - l2tp: Fix possible oops if transmitting or receiving when tunnel goes down + - ax25: Fix NULL pointer dereference and lockup. + - sound: emu10k1 - fix system hang with Audigy2 ZS Notebook PCMCIA card + - tcp: Allow send-limited cwnd to grow up to max_burst when gso disabled + - tcp: Limit cwnd growth when deferring for GSO + - af_key: Fix selector family initialization. + - hgafb: resource management fix + - cifs: fix oops on mount when CONFIG_CIFS_DFS_UPCALL is enabled + - b43: Fix controller restart crash + - ssb: Fix context assertion in ssb_pcicore_dev_irqvecs_enable + - eCryptfs: protect crypt_stat->flags in ecryptfs_open() + - cciss: add new hardware support + - ecryptfs: add missing lock around notify_change + - ecryptfs: clean up (un)lock_parent + - Add 'rd' alias to new brd ramdisk driver + - net_sched: cls_api: fix return value for non-existant classifiers + - vlan: Correctly handle device notifications for layered VLAN devices + - IB/umem: Avoid sign problems when demoting npages to integer + - x86: fix recursive dependencies + - can: Fix copy_from_user() results interpretation + - Kconfig: introduce ARCH_DEFCONFIG to DEFCONFIG_LIST + - tcp: TCP connection times out if ICMP frag needed is delayed + - ALSA: hda - Fix resume of auto-config mode with Realtek codecs + - netlink: Fix nla_parse_nested_compat() to call nla_parse() directly + * Add stable release 2.6.25.9: + - Add return value to reserve_bootmem_node() + - x86: use BOOTMEM_EXCLUSIVE on 32-bit + - sctp: Make sure N * sizeof(union sctp_addr) does not overflow. + - hwmon: (lm85) Fix function RANGE_TO_REG() + - hwmon: (adt7473) Initialize max_duty_at_overheat before use + - x86: set PAE PHYSICAL_MASK_SHIFT to 44 bits. + - Reinstate ZERO_PAGE optimization in 'get_user_pages()' and fix XIP + - watchdog: hpwdt: fix use of inline assembly + - Fix ZERO_PAGE breakage with vmware + - atl1: relax eeprom mac address error check + + [ Martin Michlmayr] + * [arm/orion5x] Enable INPUT_EVDEV and KEYBOARD_GPIO. + + [ Steve Langasek ] + * Enable CONFIG_CIFS_EXPERIMENTAL and CONFIG_CIFS_UPCALL, required for + CIFS mounts to be able to use Kerberos authentication. Closes: #480663. + + [ Bastian Blank ] + * Add stable release 2.6.25.8: + - x86: disable mwait for AMD family 10H/11H CPUs + - x86: remove mwait capability C-state check + - nf_conntrack_h323: fix memory leak in module initialization error path + - nf_conntrack_h323: fix module unload crash + - nf_conntrack: fix ctnetlink related crash in nf_nat_setup_info() + - SCSI: sr: fix corrupt CD data after media change and delay + - ACPICA: Ignore ACPI table signature for Load() operator + - scsi_host regression: fix scsi host leak + - b43: Fix possible NULL pointer dereference in DMA code + - b43: Fix noise calculation WARN_ON + - virtio_net: Fix skb->csum_start computation + - opti621: remove DMA support + - opti621: disable read prefetch + - Fix tty speed handling on 8250 + - x86-64: Fix "bytes left to copy" return value for copy_from_user() + * Fix alpha build due too inconsistent kallsyms data. + + -- maximilian attems Fri, 27 Jun 2008 00:33:53 +0200 + +linux-2.6 (2.6.25-5) unstable; urgency=low + + [ maximilian attems ] + [ Bastian Blank ] + * Reenable VServer images. + + [ maximilian attems ] + * Add stable release 2.6.25.5: + - asn1: additional sanity checking during BER decoding (CVE-2008-1673) + * Add stable release 2.6.25.6: + - atl1: fix 4G memory corruption bug + - capabilities: remain source compatible with 32-bit raw legacy capability + support. + - usb-serial: Use ftdi_sio driver for RATOC REX-USB60F + - cpufreq: fix null object access on Transmeta CPU + - Smack: fuse mount hang fix + - cgroups: remove node_ prefix_from ns subsystem + - XFS: Fix memory corruption with small buffer reads + - x86: don't read maxlvt before checking if APIC is mapped + - USB: option: add new Dell 5520 HSDPA variant + - md: do not compute parity unless it is on a failed drive + - md: fix uninitialized use of mddev->recovery_wait + - md: fix prexor vs sync_request race + - HID: split Numlock emulation quirk from HID_QUIRK_APPLE_HAS_FN. + - USB: do not handle device 1410:5010 in 'option' driver + - USB: unusual_devs: Add support for GI 0401 SD-Card interface + - USB: add Telstra NextG CDMA id to option driver + - USB: fix build errors in ohci-omap.c and ohci-sm501.c + - USB: add TELIT HDSPA UC864-E modem to option driver + - memory_hotplug: always initialize pageblock bitmap + - x86: fix bad pmd ffff810000207xxx(9090909090909090) + - USB: add Zoom Telephonics Model 3095F V.92 USB Mini External modem to + cdc-acm + - x86: prevent PGE flush from interruption/preemption + - IPoIB: Test for NULL broadcast object in ipiob_mcast_join_finish() + - i386: fix asm constraint in do_IRQ() + - i2c-nforce2: Disable the second SMBus channel on the DFI Lanparty NF4 + Expert + - i2c/max6875: Really prevent 24RF08 corruption + - brk: make sys_brk() honor COMPAT_BRK when computing lower bound + - Revert "PCI: remove default PCI expansion ROM memory allocation" + - PS3: gelic: fix memory leak + - eCryptfs: remove unnecessary page decrypt call + - netfilter: nf_conntrack_expect: fix error path unwind in + nf_conntrack_expect_init() + - netfilter: xt_connlimit: fix accouning when receive RST packet in + ESTABLISHED state + - netfilter: nf_conntrack_ipv6: fix inconsistent lock state in + nf_ct_frag6_gather() + - POWERPC Bolt in SLB entry for kernel stack on secondary cpus + - netfilter: xt_iprange: module aliases for xt_iprange + - x86: user_regset_view table fix for ia32 on 64-bit + - x86: if we cannot calibrate the TSC, we panic. + - CIFS: Fix UNC path prefix on QueryUnixPathInfo to have correct slash + - x86, fpu: fix CONFIG_PREEMPT=y corruption of application's FPU stack + - libata: force hardreset if link is in powersave mode + - x86: fix setup of cyc2ns in tsc_64.c + - x86: distangle user disabled TSC from unstable + - x86: disable TSC for sched_clock() when calibration failed + - pagemap: fix bug in add_to_pagemap, require aligned-length reads of + /proc/pid/pagemap + - ext3/4: fix uninitialized bs in ext3/4_xattr_set_handle() + - proc: calculate the correct /proc/ link count + - CPUFREQ: Make acpi-cpufreq more robust against BIOS freq changes behind + our back. + - USB: remove PICDEM FS USB demo (04d8:000c) device from ldusb + - types.h: don't expose struct ustat to userspace + + [ Bastian Blank ] + * Ignore ABI change in internal XFS symbol. + + -- Bastian Blank Thu, 12 Jun 2008 08:47:11 +0200 + +linux-2.6 (2.6.25-4) unstable; urgency=low + + [ maximilian attems ] + * Fix arm Kconfig logic disabling random drivers. (closes: #481410) + * Add stable release 2.6.25.4: + - OHCI: fix regression upon awakening from hibernation + - V4L/DVB (7473): PATCH for various Dibcom based devices + - {nfnetlink, ip, ip6}_queue: fix skb_over_panic when enlarging packets + - dccp: return -EINVAL on invalid feature length + - md: fix raid5 'repair' operations + - sparc: Fix SA_ONSTACK signal handling. + - sparc: Fix fork/clone/vfork system call restart. + - sparc64: Stop creating dummy root PCI host controller devices. + - sparc64: Fix wedged irq regression. + - SPARC64: Fix args to 64-bit sys_semctl() via sys_ipc(). + - serial: Fix sparc driver name strings. + - sparc: Fix ptrace() detach. + - sparc: Fix mremap address range validation. + - sparc: Fix debugger syscall restart interactions. + - sparc32: Don't twiddle PT_DTRACE in exec. + - r8169: fix oops in r8169_get_mac_version + - SCSI: aha152x: Fix oops on module removal + - SCSI: aha152x: fix init suspiciously returned 1, it should follow + 0/-E convention + - sch_htb: remove from event queue in htb_parent_to_leaf() + - i2c-piix4: Blacklist two mainboards + - SCSI: qla1280: Fix queue depth problem + - ipvs: fix oops in backup for fwmark conn templates + - USB: airprime: unlock mutex instead of trying to lock it again + - rtc: rtc_time_to_tm: use unsigned arithmetic + - SCSI: libiscsi regression in 2.6.25: fix nop timer handling + - SCSI: libiscsi regression in 2.6.25: fix setting of recv timer + - can: Fix can_send() handling on dev_queue_xmit() failures + - macvlan: Fix memleak on device removal/crash on module removal + - nf_conntrack: padding breaks conntrack hash on ARM + - sparc: sunzilog uart order + - r8169: fix past rtl_chip_info array size for unknown chipsets + - x86: use defconfigs from x86/configs/* + - vt: fix canonical input in UTF-8 mode + - ata_piix: verify SIDPR access before enabling it + - serial: access after NULL check in uart_flush_buffer() + - x86: sysfs cpu?/topology is empty in 2.6.25 (32-bit Intel system) + - XFRM: AUDIT: Fix flowlabel text format ambibuity. + * Update userspace merged HZ alpha fixed version. + * Backport netfilter: Move linux/types.h inclusions outside of #ifdef + __KERNEL__. (closes: #479899) + * types.h: don't expose struct ustat to userspace. (closes: #429064) + + [ Bastian Blank ] + * Fix ABI changes from: ipvs: fix oops in backup for fwmark conn templates + + -- maximilian attems Tue, 27 May 2008 11:46:11 +0200 + +linux-2.6 (2.6.25-3) unstable; urgency=low + + [ Bastian Blank ] + * Add stable release 2.6.25.3: + - sit: Add missing kfree_skb() on pskb_may_pull() failure. + - sparc: Fix mmap VA span checking. + - CRYPTO: eseqiv: Fix off-by-one encryption + - CRYPTO: authenc: Fix async crypto crash in crypto_authenc_genicv() + - CRYPTO: cryptd: Correct kzalloc error test + - CRYPTO: api: Fix scatterwalk_sg_chain + - x86 PCI: call dmi_check_pciprobe() + - b43: Fix some TX/RX locking issues + - kprobes/arm: fix decoding of arithmetic immediate instructions + - kprobes/arm: fix cache flush address for instruction stub + - b43: Fix dual-PHY devices + - POWERPC: mpc5200: Fix unterminated of_device_id table + - reiserfs: Unpack tails on quota files + - sched: fix hrtick_start_fair and CPU-Hotplug + - vfs: fix permission checking in sys_utimensat + - md: fix use after free when removing rdev via sysfs + - mm: fix usemap initialization + - 2.6.25 regression: powertop says 120K wakeups/sec + + [ maximilian attems ] + * Redisable old dup prism54 driver. + * Reenable accidentaly disabled SIS190. (closes: #478773) + * Add lmkl patch to unbreak HZ userspace aka perl5.10 build fix. + (closes: #480130) + + [ Martin Michlmayr ] + * [armel] Disable some SCSI drives (that are disabled on arm) so the + ramdisk will fit in flash on NSLU2 (closes: #480310). + + -- maximilian attems Wed, 14 May 2008 11:16:56 +0200 + +linux-2.6 (2.6.25-2) unstable; urgency=low + + [ maximilian attems ] + * Add stable release 2.6.25.1: + - Fix dnotify/close race (CVE-2008-1375) + - V4L: Fix VIDIOCGAP corruption in ivtv + - USB: log an error message when USB enumeration fails + - USB: OHCI: fix bug in controller resume + - SCSI: qla2xxx: Correct regression in relogin code. + - rose: Socket lock was not released before returning to user space + - x86, pci: fix off-by-one errors in some pirq warnings + - hrtimer: timeout too long when using HRTIMER_CB_SOFTIRQ + - RDMA/nes: Fix adapter reset after PXE boot + - rtc-pcf8583 build fix + - JFFS2: Fix free space leak with in-band cleanmarkers + - SELinux: no BUG_ON(!ss_initialized) in selinux_clone_mnt_opts + - tehuti: check register size (CVE-2008-1675) + - IPSEC: Fix catch-22 with algorithm IDs above 31 + - alpha: unbreak OSF/1 (a.out) binaries + - tehuti: move ioctl perm check closer to function start (CVE-2008-1675) + - aio: io_getevents() should return if io_destroy() is invoked + - mm: fix possible off-by-one in walk_pte_range() + - TCP: Increase the max_burst threshold from 3 to tp->reordering. + - ssb: Fix all-ones boardflags + - cgroup: fix a race condition in manipulating tsk->cg_list + - drivers/net/tehuti: use proper capability check for raw IO access + - tg3: 5701 DMA corruption fix + - V4L: tea5761: bugzilla #10462: tea5761 autodetection code were broken + - b43: Workaround invalid bluetooth settings + - b43: Add more btcoexist workarounds + - b43: Workaround DMA quirks + - dm snapshot: fix chunksize sector conversion + - x86: Fix 32-bit x86 MSI-X allocation leakage + - RTNETLINK: Fix bogus ASSERT_RTNL warning + - net: Fix wrong interpretation of some copy_to_user() results. + - dz: test after postfix decrement fails in dz_console_putchar() + - RDMA/nes: Free IRQ before killing tasklet + - S2io: Fix memory leak during free_tx_buffers + - S2io: Version update for memory leak fix during free_tx_buffers + - USB: Add HP hs2300 Broadband Wireless Module to sierra.c + - V4L: cx88: enable radio GPIO correctly + - hrtimer: raise softirq unlocked to avoid circular lock dependency + - tcp: tcp_probe buffer overflow and incorrect return value + * [ide] Add upstream piix patch for asus eee pc. (closes: #479217) + + [ Christian T. Steigies ] + * [m68k] Add patches for 2.6.25. + * [m68k] Disable EXT4DEV_FS for now. + * [m68k] Enable SCSI_MAC_ESP for mac. + + [ Ian Campbell ] + * [x86]: Enable Xen guest support in all i386 flavours. + + [ Bastian Blank ] + * Add stable release 2.6.25.2: + - fix SMP ordering hole in fcntl_setlk() (CVE-2008-1669) + + -- Bastian Blank Thu, 08 May 2008 14:46:48 +0200 + +linux-2.6 (2.6.25-1) unstable; urgency=low + + * New upstream release (closes: #456799, #468440, #475161, #475134, #475441) + - Add oabi shim for fstatat64 (closes: #462677) + + [ maximilian attems ] + * topconfig set NOZOMI, CRYPTO_SEQIV, CRYPTO_CTR, CRYPTO_GCM, CRYPTO_CCM, + CRYPTO_SALSA20, CRYPTO_LZO, CRYPTO_DEV_HIFN_795X, USB_SI470X, + USB_STKWEBCAM, VIDEO_PVRUSB2_ONAIR_USB2, VIDEO_PVRUSB2_ONAIR_CREATOR, + VIDEO_EM28XX_ALSA, CRYPTO_DEV_HIFN_795X_RNG, PCF8575, TPS65010, RTL8180, + ENC28J60, R6040, CAN, NETFILTER_XT_MATCH_OWNER, MAC80211_RC_DEFAULT_PI, + NETFILTER_XT_TARGET_RATEEST, NETFILTER_XT_TARGET_TCPOPTSTRIP, + NETFILTER_XT_MATCH_IPRANGE, NETFILTER_XT_MATCH_RATEEST, SND_OXYGEN, + SND_HIFIER, SND_VIRTUOSO, USB_NET_RNDIS_WLAN, USB_ANNOUNCE_NEW_DEVICES, + USB_SERIAL_IUU, NET_CLS_FLOW, INFINIBAND_NES, RTC_DRV_R9701, + RTC_DRV_DS1511, MEMSTICK, SENSORS_W83L786NG, SENSORS_ADS7828, IPWIRELESS, + RISCOM8, IGB, UTS_NS, IPC_NS, IPV6_ROUTE_INFO, ENCLOSURE_SERVICES, + SCSI_ENCLOSURE, SENSORS_ADT7473, SCSI_MVSAS, REALTEK_PHY, RTC_DRV_S35390A, + MEMSTICK_JMICRON_38X, IWL4965_HT. + * [amd64] Enable CRYPTO_SALSA20_X86_64, EDAC_I3000, EFI, EFI_VARS, I8K, + PARAVIRT_GUEST, PARAVIRT, VIRTIO_PCI, VIRTIO_BALLOON, SPARSEMEM_VMEMMAP. + * [amd64, i386]: Enable LEDS_CLEVO_MAIL, INPUT_APANEL, ACER_WMI, + THINKPAD_ACPI_HOTKEY_POLL, HP_WATCHDOG, THINKPAD_ACPI_VIDEO, + VIRTION_CONSOLE, ACPI_WMI, IO_DELAY_0X80. + * topconfig disable PARPORT_PC_FIFO due to instabilities. + (closes: #366165, #388309, #406056, #407816, #453911) + * [amd64, i386]: Enable SONYPI_COMPAT for better sony laptop support. + * topconfig: Enable HID_FF for some HID devices. (closes: #441348) + * topconfig: Enable IPV6_ROUTER_PREF for multi-homed net. (closes: #449247) + * topconfig: Set UTF8 as default encoding. (closes: #417324) + * Tighten yaird dependency. (closes: #403171) + * Configs general cleanup, centralize USB_NET, disable IRDA_DEBUG. + * postinst: Nuke confusing postinst message. (closes: #465512) + * [sparc]: Enable SCSI_SCAN_ASYNC. + * [i386]: Enable TC1100_WMI, SND_SIS7019, CRYPTO_SALSA20_586. + * topconfig: Centralize old IEEE80211 stack options. (closes: #470558) + * control.source.in: Newer standard version without changes. + * copyright: adapt to latest lintian recommendation. + * input: Add 4 additional exports for modular speakup and braille support. + * firewire: Add firewire-git.patch for latest firewire tree features. + * 686: Set USB_PERSIST for eee pc suspend support. (closes: #468213) + * topconfig disable PATA_SIS as sis5513 enabled. (closes: #475525) + * [xen]: Support direct load of bzImage under Xen. (closes: #474509) + Thanks Ian Campbell for patches. + * [xen]: Module autoprobing support for frontend drivers. + * [arm]: Don't ovverride topconfig SENSORS_W83792D setting. + (closes: #477745) + + [ Martin Michlmayr ] + * [arm/armel] Add a kernel for Orion based devices, such as the QNAP + TS-109/TS-209. + * [mips(el)/sb1*] Enable SB1250_MAC (thanks Thomas Bogendoerfer). + * [mipsel/r5k-cobalt] Enable DUMMY_CONSOLE since this might + fix the debian-installer startup hang on Qube 2700. + * [arm/footbridge] Disable KEYS and SECURITY for smaller d-i image. + * [arm/footbridge] Build NFS as a module to make the image smaller. + * [mips/r5k-ip32] Don't build in NFS. + * [mips/r5k-ip32] Use the generic config options for NFS, which will + enable NFSv4. (closes: #471007) + * [mips/r5k-ip32] Enable R8169, requested by Giuseppe Sacco. + * [arm/iop32x] Enable MACH_EM7210. (closes: #473136) + * [arm/orion] Add patch to set the MAC address on QNAP TS-109/TS-209 + (Lennert Buytenhek). + * [arm/orion] Add support for Buffalo Linkstation Pro/Live (Byron Bradley). + * [arm/orion] Fix hang when Write Allocate is enabled (Lennert Buytenhek). + * [arm/orion] Add support for QNAP TS-409 (Sylver Bruneau). + * [arm/orion] Add preliminary support for HP mv2120. + + [ Daniel Baumann ] + * Added patch from unionfs upstream to export release_open_intent symbol. + + [ Gordon Farquharson ] + * [arm/ixp4xx] Use GPIO LED driver as opposed to ixp4xx LED driver. + * [arm/ixp4xx] Fix ixp4xx-beeper module so that udev loads it + automatically. + * [arm/iop32x] Enable support for the GLAN Tank flash chip (M29W400DB). + * [arm/iop32x] Do not build the ARTOP PATA driver (PATA_ARTOP). + * [arm/iop32x] Register the F75375 device in the GLAN Tank platform code. + * Prevent physmap from calling request_module() too early. + * [arm/ixp4xx] Fix used_sram_bitmap corruption in qmgr_release_queue(). + + [ Aurelien Jarno ] + * [mips/mipsel] Enable CONFIG_NO_HZ, CONFIG_HIGH_RES_TIMERS for dynticks + and true high-resolution timers on 4kc-malta and 5kc-malta flavours. + * [i386, amd64] Set modular VIRTIO, VIRTIO_RING, VIRTIO_BLK, VIRTIO_NET. + + [ Bastian Blank ] + * Remove binary only firmwares for: + - Broadcom NetXtremeII 10Gb support + * Disable now broken drivers: + - Broadcom NetXtremeII 10Gb support + * Fix broken drivers: + - Broadcom NetXtremeII support + * [powerpc] Use new wrapper install support. + * [s390] Enable DM_MULTIPATH_EMC. + * Enable AF_RXRPC, RXKAD, PRINTK_TIME, DEBUG_KERNEL, SCHED_DEBUG, + TIMER_STATS, DEBUG_FS. + * Disable R3964, USB_GADGET. + * [hppa] Enable several filesystems. + * Make NLS modular. + * [i386/486] Make ext2 modular. + * [alpha,amd64,i386] Make ATM modular. + * [powerpc/powerpc64] Support PA Semi based plattforms. (closes: #463200) + * Follow upstream change for default TCP congestion control. + (closes: #477589) + + [ Steve Langasek ] + * topconfig: Enable CONFIG_CIFS_WEAK_PW_HASH, required for compatibility + with legacy (pre-NTLM) fileservers. + + [ Christian Perrier ] + * Debconf template rewrite + mark them as translatable. + Thanks to Justin B Rye for review. + + -- Bastian Blank Fri, 25 Apr 2008 16:27:23 +0200 + +linux-2.6 (2.6.24-6) unstable; urgency=high + + [ Martin Michlmayr ] + * [armel] Fix FTBFS on armel by enabling CONFIG_USB_USBNET=m in + armel/config, as it was done for arm/config already. + * [armel] Add oabi shim for fstatat64 (Riku Voipio) + + [ Gordon Farquharson ] + * [arm/iop32x] Do not build the ARTOP PATA driver (PATA_ARTOP). + * [arm/iop32x] Enable MTD_CMDLINE_PARTS. + + [ Kyle McMartin ] + * [hppa] fix pdc_console panic at boot (closes: #476292). + * [hppa] properly flush user signal tramps + * [hppa] special case futex cmpxchg on kernel space NULL (closes: 476285). + + -- Bastian Blank Fri, 18 Apr 2008 19:41:30 +0200 + +linux-2.6 (2.6.24-5) unstable; urgency=low + + [ Gordon Farquharson ] + * [arm] Enable asix driver (USB_NET_AX8817X). + * [arm] Enable CONFIG_USB_CATC, CONFIG_USB_KAWETH, CONFIG_USB_PEGASUS, + and CONFIG_USB_RTL8150. + * [arm/ixp4xx] Update Ethernet driver (closes: #471062). + * [arm/ixp4xx] Add HSS driver. + + [ Bastian Blank ] + * [s390/s390-tape]: Override localversion correctly. + * Add stable release 2.6.24.3: + - x86_64: CPA, fix cache attribute inconsistency bug + - bonding: fix NULL pointer deref in startup processing + - POWERPC: Revert chrp_pci_fixup_vt8231_ata devinit to fix libata on pegasos + - PCMCIA: Fix station address detection in smc + - SCSI: gdth: scan for scsi devices + - USB: fix pm counter leak in usblp + - S390: Fix futex_atomic_cmpxchg_std inline assembly. + - genirq: do not leave interupts enabled on free_irq + - hrtimer: catch expired CLOCK_REALTIME timers early + - hrtimer: check relative timeouts for overflow + - SLUB: Deal with annoying gcc warning on kfree() + - hrtimer: fix *rmtp/restarts handling in compat_sys_nanosleep() + - hrtimer: fix *rmtp handling in hrtimer_nanosleep() + - Disable G5 NAP mode during SMU commands on U3 + - Be more robust about bad arguments in get_user_pages() + - AUDIT: Increase skb->truesize in audit_expand + - BLUETOOTH: Add conn add/del workqueues to avoid connection fail. + - INET: Prevent out-of-sync truesize on ip_fragment slow path + - INET_DIAG: Fix inet_diag_lock_handler error path. + - IPCOMP: Fetch nexthdr before ipch is destroyed + - IPCOMP: Fix reception of incompressible packets + - IPV4: fib: fix route replacement, fib_info is shared + - IPV4: fib_trie: apply fixes from fib_hash + - PKT_SCHED: ematch: oops from uninitialized variable (resend) + - SELinux: Fix double free in selinux_netlbl_sock_setsid() + - TC: oops in em_meta + - TCP: Fix a bug in strategy_allowed_congestion_control + - SCSI: sd: handle bad lba in sense information + - Fix dl2k constants + - XFS: Fix oops in xfs_file_readdir() + - hugetlb: add locking for overcommit sysctl + - inotify: fix check for one-shot watches before destroying them + - NFS: Fix a potential file corruption issue when writing + - NETFILTER: nf_conntrack_tcp: conntrack reopening fix + - SPARC/SPARC64: Fix usage of .section .sched.text in assembler code. + * Add stable release 2.6.24.4: + - S390 futex: let futex_atomic_cmpxchg_pt survive early functional tests. + - slab: NUMA slab allocator migration bugfix + - relay: fix subbuf_splice_actor() adding too many pages + - BLUETOOTH: Fix bugs in previous conn add/del workqueue changes. + - SCSI advansys: Fix bug in AdvLoadMicrocode + - async_tx: avoid the async xor_zero_sum path when src_cnt > device->max_xor + - aio: bad AIO race in aio_complete() leads to process hang + - jbd: correctly unescape journal data blocks + - jbd2: correctly unescape journal data blocks + - zisofs: fix readpage() outside i_size + - NETFILTER: nfnetlink_log: fix computation of netlink skb size + - NETFILTER: nfnetlink_queue: fix computation of allocated size for netlink skb + - NETFILTER: xt_time: fix failure to match on Sundays + - sched_nr_migrate wrong mode bits + - nfsd: fix oops on access from high-numbered ports + - sched: fix race in schedule() + - SCSI: mpt fusion: don't oops if NumPhys==0 + - SCSI: gdth: fix to internal commands execution + - SCSI: gdth: bugfix for the at-exit problems + - Fix default compose table initialization + - x86: don't use P6_NOPs if compiling with CONFIG_X86_GENERIC + - SCSI: fix BUG when sum(scatterlist) > bufflen + - USB: ehci: handle large bulk URBs correctly (again) + - USB: ftdi_sio - really enable EM1010PC + - USB: ftdi_sio: Workaround for broken Matrix Orbital serial port + - VT notifier fix for VT switch + - eCryptfs: make ecryptfs_prepare_write decrypt the page + - ioat: fix 'ack' handling, driver must ensure that 'ack' is zero + - macb: Fix speed setting + - x86: move out tick_nohz_stop_sched_tick() call from the loop + - atmel_spi: fix clock polarity + - b43: Backport bcm4311 fix + - arcmsr: fix IRQs disabled warning spew + - e1000e: Fix CRC stripping in hardware context bug + - PCI x86: always use conf1 to access config space below 256 bytes + - moduleparam: fix alpha, ia64 and ppc64 compile failures + - pata_hpt*, pata_serverworks: fix UDMA masking + - SCSI advansys: fix overrun_buf aligned bug + - NETFILTER: fix ebtable targets return + - NETFILTER: Fix incorrect use of skb_make_writable + - NETFILTER: nfnetlink_queue: fix SKB_LINEAR_ASSERT when mangling packet data + - spi: pxa2xx_spi clock polarity fix + - ufs: fix parenthesisation in ufs_set_fs_state() + - hugetlb: ensure we do not reference a surplus page after handing it to buddy + - file capabilities: simplify signal check + - futex: runtime enable pi and robust functionality + - futex: fix init order + - ARM pxa: fix clock lookup to find specific device clocks + - x86: replace LOCK_PREFIX in futex.h + - SCSI aic94xx: fix REQ_TASK_ABORT and REQ_DEVICE_RESET + - SCSI gdth: don't call pci_free_consistent under spinlock + - SCSI ips: fix data buffer accessors conversion bug + - usb-storage: don't access beyond the end of the sg buffer + - fuse: fix permission checking + - CRYPTO xts: Use proper alignment + - CRYPTO xcbc: Fix crash with IPsec + - SCSI ips: handle scsi_add_host() failure, and other err cleanups + - x86: adjust enable_NMI_through_LVT0() + - drivers: fix dma_get_required_mask + - iov_iter_advance() fix + - x86: Clear DF before calling signal handler (closes: #469058) + - ub: fix up the conversion to sg_init_table() + - MIPS: Mark all but i8259 interrupts as no-probe. + - IRQ_NOPROBE helper functions + - IPCOMP: Disable BH on output when using shared tfm + - IPCONFIG: The kernel gets no IP from some DHCP servers + - IPV4: Remove IP_TOS setting privilege checks. + - IPV6: dst_entry leak in ip4ip6_err. + - IPV6: Fix IPsec datagram fragmentation + - NET: Fix race in dev_close(). (Bug 9750) + - NET: Messed multicast lists after dev_mc_sync/unsync (closes: #466719) + - NIU: Bump driver version and release date. + - NIU: Fix BMAC alternate MAC address indexing. + - NIU: More BMAC alt MAC address fixes. + - TCP: Improve ipv4 established hash function. + - SPARC: Fix link errors with gcc-4.3 + - SPARC64: Loosen checks in exception table handling. + + [ Martin Michlmayr ] + * [mips/r4k-ip22] Enable BLK_DEV_LOOP and BLK_DEV_CRYPTOLOOP. + * [mips/r5k-ip32] Enable BLK_DEV_LOOP and BLK_DEV_CRYPTOLOOP. + * [mips/r4k-ip22] Enable PPP, PPPOE and SLIP. + * [mips/r5k-ip32] Enable PPP, PPPOE and SLIP. + * Don't check the section size when we're cross compiling. + + [ dann frazier ] + * Remove cap_task_kill (closes: #463669) + + -- Bastian Blank Thu, 27 Mar 2008 12:40:16 +0100 + +linux-2.6 (2.6.24-4) unstable; urgency=low + + * Add stable release 2.6.24.1: + - splice: missing user pointer access verification (CVE-2008-0009/10) + - drm: the drm really should call pci_set_master.. + - Driver core: Revert "Fix Firmware class name collision" + - fix writev regression: pan hanging unkillable and un-straceable + - sched: fix high wake up latencies with FAIR_USER_SCHED + - sched: let +nice tasks have smaller impact + - b43: Reject new firmware early + - selinux: fix labeling of /proc/net inodes + - b43legacy: fix DMA slot resource leakage + - b43legacy: drop packets we are not able to encrypt + - b43legacy: fix suspend/resume + - b43legacy: fix PIO crash + - b43: Fix dma-slot resource leakage + - b43: Drop packets we are not able to encrypt + - b43: Fix suspend/resume + - sky2: fix for WOL on some devices + - sky2: restore multicast addresses after recovery + - x86: restore correct module name for apm + - ACPI: update ACPI blacklist + - PCI: Fix fakephp deadlock + - sys_remap_file_pages: fix ->vm_file accounting + - lockdep: annotate epoll + - forcedeth: mac address mcp77/79 + - USB: Fix usb_serial_driver structure for Kobil cardreader driver. + - USB: handle idVendor of 0x0000 + - USB: fix usbtest halt check on big endian systems + - USB: storage: Add unusual_dev for HP r707 + - USB: Variant of the Dell Wireless 5520 driver + - USB: use GFP_NOIO in reset path + - USB: ftdi driver - add support for optical probe device + - USB: pl2303: add support for RATOC REX-USB60F + - USB: remove duplicate entry in Option driver and Pl2303 driver for Huawei modem + - USB: sierra: add support for Onda H600/Zte MF330 datacard to USB Driver for Sierra Wireless + - USB: ftdi-sio: Patch to add vendor/device id for ATK_16IC CCD + - USB: ftdi_sio - enabling multiple ELV devices, adding EM1010PC + - USB: sierra driver - add devices + - USB: Adding YC Cable USB Serial device to pl2303 + - USB: Sierra - Add support for Aircard 881U + - USB: add support for 4348:5523 WinChipHead USB->RS 232 adapter + - USB: CP2101 New Device IDs + - usb gadget: fix fsl_usb2_udc potential OOPS + - USB: keyspan: Fix oops + - vm audit: add VM_DONTEXPAND to mmap for drivers that need it (CVE-2008-0007) + - slab: fix bootstrap on memoryless node + - DVB: cx23885: add missing subsystem ID for Hauppauge HVR1800 Retail + + [ Martin Michlmayr ] + * [arm/ixp4xx] Enble ATA_OVER_ETH, requested by Nicola Fankhauser. + * [arm/iop32x] Enble ATA_OVER_ETH. + + [ Bastian Blank ] + * Add stable release 2.6.24.2: + - splice: fix user pointer access in get_iovec_page_array() + (CVE-2008-0600, closes: #464945) + + -- Bastian Blank Mon, 11 Feb 2008 12:29:23 +0100 + +linux-2.6 (2.6.24-3) unstable; urgency=low + + [ maximilian attems ] + * [scsi]: hptiop: add more adapter models and fixes. + * [amd64, i386]: Reenable ACPI_PROCFS_POWER. (closes: #463253) + + [ Gordon Farquharson ] + * [arm/ixp4xx] Update Ethernet driver so that it can be loaded by udev + automatically. + + [ Martin Michlmayr ] + * [mips/r5k-ip32] Enable R8169, requested by Giuseppe Sacco. (Closes: + #463705) + + -- Bastian Blank Wed, 06 Feb 2008 13:05:18 +0100 + +linux-2.6 (2.6.24-2) unstable; urgency=low + + [ Bastian Blank ] + * Fix broken merge of flavour specific settings. + - [i386]: Recommends are fixed. + - [s390/s390-tape]: Built as small image again. + + [ maximilian attems ] + * Disable old dup prism54 driver. + * Stable queue: slab: fix bootstrap on memoryless node. + + [ Aurelien Jarno ] + * [arm]: Remove options that are present in topconfig from config.versatile. + * [arm]: Turn off B44 since it fails to compile on armel. + + -- Bastian Blank Thu, 31 Jan 2008 17:37:00 +0100 + +linux-2.6 (2.6.24-1) unstable; urgency=low + + * New upstream release + (closes: #461639) + + [ Martin Michlmayr ] + * Don't build the AdvanSys driver on ARM since it fails to compile. + * Disable ATH5K on ARM since it fails to compile. + * [arm/iop32x] Activate DMADEVICES. + * [mips/mipsel] Turn off CONFIG_NIU since it fails to compile. + + [ maximilian attems ] + * [amd64, i386]: Enable ACPI_SYSFS_POWER and disable ACPI_PROCFS_POWER. + * [fw] Sync with latest git-ieee1394 for sbp2 fixes. + + [ Bastian Blank ] + * Kill reboot warning from old templates. + * Fix strange default value for link_in_boot. (closes: #425056) + * [powerpc/powerpc]: Enable Efika support. + * [powerpc]: Lower mkvmlinuz to the state of a bootloader. + * [powerpc]: Remove ppc and m68k include dirs from headers. + * Remove versions from relations fullfilled in stable. + + [ Aurelien Jarno ] + * [arm]: Update versatile config. + + [ Gordon Farquharson ] + * [arm/ixp4xx] Change the ixp4xx network driver from the driver + written by Christian Hohnstaedt to the driver written by Krzysztof + Hasala which has partially been accepted upstream. + + -- Bastian Blank Sat, 26 Jan 2008 11:35:11 +0100 + +linux-2.6 (2.6.24~rc8-1~experimental.1) experimental; urgency=low + + * New upstream release + (closes: #454776, #458142, #457992, #458899, #426124, #459732, #455566). + + [ maximilian attems ] + * New upstream release, rebase dfsg stuff plus drivers-atm.patch, + scripts-kconfig-reportoldconfig.patch. + * [amd64, powerpc] Set HIGH_RES_TIMERS and NO_HZ (closes: #458312). + * topconfig set NETFILTER_XT_MATCH_TIME, NET_ACT_NAT, KSDAZZLE_DONGLE, + KS959_DONGLE, NET_9P_FD, IP1000, VETH, IXGBE, NIU, TEHUTI, LIBERTAS_CS, + LIBERTAS_SDIO, RT2X00, SENSORS_ADT7470, SENSORS_I5K_AMB, SENSORS_F71882FG, + SENSORS_FSCHMD, SENSORS_IBMPEX, CRYPTO_XTS, CRYPTO_SEED, CRYPTO_AUTHENC, + DVB_S5H1409, DVB_TUNER_MT2131, INET_LRO, MMC_RICOH_MMC, MMC_SPI, + RTC_DRV_DS1374, VIDEO_CX23885, VIDEO_FB_IVTV, USB_SERIAL_CH341, + SCSI_SRP_TGT_ATTRS, ADM8211, MTD_INTEL_VR_NOR, MTD_ALAUDA, + MTD_ONENAND_2X_PROGRAM, MTD_ONENAND_SIM, DM_MULTIPATH_HP, FUJITSU_LAPTOP, + QUOTA_NETLINK_INTERFACE, DM_UEVENT, SCSI_FC_TGT_ATTRS, SSB, BT_HCIUART_LL, + BT_HCIBTSDIO, MTD_OOPS, CGROUPS, MDIO_BITBANG, HIDRAW, P54, SDIO_UART, + NETCONSOLE_DYNAMIC, SECURITY_FILE_CAPABILITIES. + * Disable smbfs in topconfig, not supported upstream, use cifs. + * Disable bcm43xx, deprecated by upstream. Enable B43 (needs v4 firmware) + and B43LEGACY (needs v3 firmware). + * [i386]: Set SND_SC6000, EDAC_I3000, EDAC_I5000, SBC7240_WDT, + NET_9P_VIRTIO, FB_GEODE_LX, VIRTIO_NET, VIRTIO_BLK. + * Set USB_EHCI_TT_NEWSCHED fills USB 2.0 bandwith better. (closes: #454797) + * postrm: Nuke initramfs sha1sum on linux-image removal. (closes: #420245) + * Unifiy BSD_PROCESS_ACCT settings across configs. (closes: #455892) + * Reenable DABUSB as firmware is BSD licensed. + * [hppa]: Disable OCFS2, due build trouble. + * topconfig: Enable delay accounting TASKSTATS. (closes: #433204) + * Add git-ieee1394.patch for latest firewire fixes. + * [i386] Enable PARAVIRT_GUEST. (closes: #457562) + * [amd64, i386] Enable CPU_IDLE for software-controlled idle pm. + * [amd64, i386] Enable IT8712F_WDT, FB_EFI. + * Add and enable at76.patch wireless driver for Atmel USB cards. + * Add and enable ath5k.patch wireless driver for Atheros 5xxx cards. + * Unify VLAN_8021Q setting, needed also on r5k-cobalt. + * Double max SERIAL_8250_NR_UARTS to 32. (closes: #440807) + * topconfig: Enable AUDITSYSCALL for better SELinux support. + + [ Bastian Blank ] + * [amd64, i386]: Set kernel architecture to x86. + * [i386]: Remove linux-libc-dev arch override. + + [ Martin Michlmayr ] + * [mipsel/r5k-cobalt] Enable the new LEDs driver for Cobalt RaQ. + * [arm/iop32x] Re-enable USB_NET and PPP, thanks Daniel Hess (closes: + #456416). + * [arm/iop32x] Enable BSD_PROCESS_ACCT and POSIX_MQUEUE (closes: #455892). + * [mips] Disable AdvanSys SCSI since it doesn't compile. + * [arm/ixp4xx] Enable IP_ADVANCED_ROUTER, requested by Oliver Urbann. + * [arm/iop32x] Enable IP_ADVANCED_ROUTER. + + [ dann frazier ] + * [ia64]: Enable BLK_CPQ_DA + + [ Frederik Schüler ] + * Add GFS2 locking symbols export patch. + + [ Aurelien Jarno ] + * [mips/mipsel] Remove QEMU flavour, as the Malta platform is now correctly + emulated in QEMU. + + [ Christian T. Steigies ] + * [m68k]: Update patches from linux-m68k CVS + * [m68k]: Enable building for bvme6000, mvme147, and mvme16x again + + -- Bastian Blank Fri, 18 Jan 2008 12:23:26 +0100 + +linux-2.6 (2.6.23-2) unstable; urgency=low + + [ dann frazier ] + * [ia64]: Enable BLK_CPQ_DA + + [ Gordon Farquharson ] + * [arm/iop32x] Use the new i2c framework to load rtc-rs5c372 for the + GLAN Tank. + + [ Frederik Schüler ] + * Export gfs2 locking symbols required to build gfs1 module. + + [ maximilian attems ] + * [ppc] Reenable PMAC_BACKLIGHT. + * [sparc] Add davem get_cpu() SunFire boot patch. (closes: #440720) + * Add stable release 2.6.23.10: + - IPV4: Remove bogus ifdef mess in arp_process + - KVM: x86 emulator: Use emulator_write_emulated and not emulator_write_std + - KVM: SVM: Fix FPU leak while emulating clts + - revert "dpt_i2o: convert to SCSI hotplug model" + - KVM: x86 emulator: fix access registers for instructions with ModR/M + byte and Mod = 3 + - KVM: x86 emulator: invd instruction + - KVM: SVM: Intercept the 'invd' and 'wbinvd' instructions + - KVM: Skip pio instruction when it is emulated, not executed + - KVM: VMX: Force vm86 mode if setting flags during real mode + - forcedeth: new mcp79 pci ids + - forcedeth boot delay fix + - PFKEY: Sending an SADB_GET responds with an SADB_GET + - rd: fix data corruption on memory pressure. + - create /sys/.../power when CONFIG_PM is set + - USB: fix up EHCI startup synchronization + - RXRPC: Add missing select on CRYPTO + - KVM: VMX: Reset mmu context when entering real mode + - NET: random : secure_tcp_sequence_number should not assume + CONFIG_KTIME_SCALAR + - NET: Corrects a bug in ip_rt_acct_read() + - NETFILTER: Fix NULL pointer dereference in nf_nat_move_storage() + - netfilter: Fix kernel panic with REDIRECT target. + - IPV6: Restore IPv6 when MTU is big enough + - UNIX: EOF on non-blocking SOCK_SEQPACKET + - x86 setup: add a near jump to serialize %cr0 on 386/486 + - Fix synchronize_irq races with IRQ handler + - CRYPTO api: Fix potential race in crypto_remove_spawn + - TCP: Fix TCP header misalignment + - tmpfs: restore missing clear_highpage (CVE-2007-6417) + - TCP: MTUprobe: fix potential sk_send_head corruption + - NETFILTER: fix forgotten module release in xt_CONNMARK and xt_CONNSECMARK + - fb_ddc: fix DDC lines quirk + - VLAN: Fix nested VLAN transmit bug + - I4L: fix isdn_ioctl memory overrun vulnerability (CVE-2007-6151) + - isdn: avoid copying overly-long strings + - nf_nat: fix memset error + - esp_scsi: fix reset cleanup spinlock recursion + - libertas: properly account for queue commands + - KVM: Fix hang on uniprocessor + - USB: make the microtek driver and HAL cooperate + - TEXTSEARCH: Do not allow zero length patterns in the textsearch + infrastructure + - XFRM: Fix leak of expired xfrm_states + - NETFILTER: xt_TCPMSS: remove network triggerable WARN_ON + - BRIDGE: Lost call to br_fdb_fini() in br_init() error path + - DECNET: dn_nl_deladdr() almost always returns no error + - BRIDGE: Properly dereference the br_should_route_hook + - PKT_SCHED: Check subqueue status before calling hard_start_xmit + - Freezer: Fix APM emulation breakage + - XFS: Make xfsbufd threads freezable + - TCP: Problem bug with sysctl_tcp_congestion_control function + - wait_task_stopped(): pass correct exit_code to wait_noreap_copyout() + - KVM: x86 emulator: implement 'movnti mem, reg' + - TCP: illinois: Incorrect beta usage + - futex: fix for futex_wait signal stack corruption + - libata: kill spurious NCQ completion detection + - hrtimers: avoid overflow for large relative timeouts (CVE-2007-5966) + - Input: ALPS - add support for model found in Dell Vostro 1400 + (closes: #448818) + - PNP: increase the maximum number of resources + - sched: some proc entries are missed in sched_domain sys_ctl debug code + - ATM: [he] initialize lock and tasklet earlier + * Add stable release 2.6.23.11: + - BRIDGE: Section fix. + - Revert "Freezer: Fix APM emulation breakage" + * Backport fix for CVE-2007-5938 + - iwlwifi: fix possible NULL dereference in iwl_set_rate() + * Add stable release 2.6.23.12: + - Revert "PNP: increase the maximum number of resources" + * VM/Security: add security hook to do_brk (CVE-2007-6434) + * security: protect from stack expantion into low vm addresses + * [hppa]: Disable OCFS2, due build trouble. + + [ Aurelien Jarno ] + * [arm/versatile] Disable ACENIC and MYRI10GE as they are useless on this + platform. + * Add em28xx-dv100.patch to add support for Pinnacle Dazzle DVC 100. + + [ Bastian Blank ] + * Fix abi change in 2.6.23.10. + + -- maximilian attems Fri, 21 Dec 2007 11:47:55 +0100 + +linux-2.6 (2.6.23-1) unstable; urgency=low + + * New upstream release (closes: #447682). + - r8169: fix confusion between hardware and IP header alignment + (closes: #452069). + + [ maximilian attems ] + * [ppc] Enable for powerpc config the ams (Apple Motion Sensor). + (closes: #426210) + * Add to linux-doc the missing toplevel text files. + (closes: #360876, #438697) + * Set CONFIG_BLK_DEV_IO_TRACE for blktrace(8) support. (closes: #418442) + * ipw2200: Enable IPW2200_RADIOTAP and IPW2200_PROMISCUOUS for optional + rtap interface. (closes: #432555) + * Enable in topconfig NF_CT_PROTO_UDPLITE, NETFILTER_XT_TARGET_TRACE, + NETFILTER_XT_MATCH_CONNLIMIT, NETFILTER_XT_MATCH_U32, SENSORS_ABITUGURU3, + SENSORS_LM93, SENSORS_DME1737, SENSORS_THMC50, DVB_USB_AF9005, + DVB_USB_AF9005_REMOTE, CRC7, I2C_TAOS_EVM, DS1682, SENSORS_TSL2550, + SPI_LM70_LLP, SPI_TLE62X0, W1_SLAVE_DS2760, TUNER_TEA5761, NET_9P, + DM_MULTIPATH_RDAC, NET_SCH_RR, EEPROM_93CX6, PPPOL2TP, CRYPTO_HW, UIO, + UIO_CIF, SND_CS5530, RTL8187, PC300TOO, TCG_TIS, SCSI_SAS_ATA, + PATA_MARVELL. + * [i386] Enable lguest. + * [amd64, i386] Enable VIDEO_OUTPUT_CONTROL, NETDEVICES_MULTIQUEUE. + * linux-image bugscript add cmdline. + * [amd64, i386, ia64]: Enable DMIID, ACPI_PROC_EVENT. + * Enable TCG_TPM various userspace accesses it. (closes: #439020) + * Add and enable IWLWIFI. + * Add git-ieee1394.patch for latest firewire fixes. + * [ipv6] Enable IPV6_MULTIPLE_TABLES, IPV6_SUBTREES. (closes: #441226) + * Add and enable E1000E. + * Add stable release 2.6.23.1: + - libata: sata_mv: more S/G fixes + + [ Martin Michlmayr ] + * [mips] Add a bcm1480 PCI build fix. + * Update Riku Voipio's Fintek F75375/SP driver to the latest version. + * [arm/iop32x] Set the fan on Thecus N2100 to full speed (Riku Voipio). + * [arm/iop32x] Remove the IPv6 and filesystem info from the config file + so we will get the values from the main config file. This should + enable NFSv4 and ip6tables support requested by Wouter Verhelst. + * [arm/iop32x] Remove even more options to receive the default options. + * [arm/ixp4xx] Remove a lot of options to receive the default options. + * [mips/r4k-ip22] Remove a lot of options to receive the default options. + This will enable ISCSI requested by Martin Zobel-Helas. + * [mips/r5k-ip32] Remove a lot of options to receive the default options. + This will enable PCI Ethernet devices requested by Giuseppe Sacco. + * [mipsel/r5k-cobalt] Remove a lot of options to receive the default + options. + * [mipsel/r5k-cobalt] Enable the modern Cobalt LEDs driver. + * [arm/iop32x] Enable Intel IOP ADMA support. + * [arm] Mark BCM43XX as broken on ARM. + * [mips/r4k-ip22] Disable EARLY PRINTK because it breaks serial console. + * [mips] Add some IP22 fixes from Thomas Bogendoerfer: + - Fix broken EISA interrupt setup by switching to generic i8259 + - Fix broken eeprom access by using __raw_readl/__raw_writel + + [ Bastian Blank ] + * Add unpriviledged only Xen support. + * [i386] Drop k7 images. + * Drop maybe IETF document. (closes: #423040) + * Drop drivers because of binary only firmwares: + - DABUSB driver + - COPS LocalTalk PC support + - Digi Intl. RightSwitch SE-X support + - 3Com 3C359 Token Link Velocity XL adapter support + - SMC ISA/MCA adapter support + - EMI 6|2m USB Audio interface support + - EMI 2|6 USB Audio interface support + - Computone IntelliPort Plus serial support + * Remove binary only firmwares for: + - Alteon AceNIC/3Com 3C985/NetGear GA620 Gigabit support + - Broadcom Tigon3 support + - USB Keyspan USA-xxx Serial Driver + - Korg 1212 IO + - ESS Allegro/Maestro3 + - Yamaha YMF724/740/744/754 + - Technotrend/Hauppauge Nova-USB devices + - YAM driver for AX.25 + - MyriCOM Gigabit Ethernet support + - PTI Qlogic, ISP Driver + - Cirrus Logic (Sound Fusion) CS4280/CS461x/CS462x/CS463x + - Madge Ambassador (Collage PCI 155 Server) + - PCA-200E support + - SBA-200E support + - Broadcom NetXtremeII support + * Disable now broken drivers: + - Alteon AceNIC/3Com 3C985/NetGear GA620 Gigabit support + - USB Keyspan USA-xxx Serial Driver + - Technotrend/Hauppauge Nova-USB devices + - YAM driver for AX.25 + - MyriCOM Gigabit Ethernet support + - PTI Qlogic, ISP Driver + - Cirrus Logic (Sound Fusion) CS4280/CS461x/CS462x/CS463x + - Madge Ambassador (Collage PCI 155 Server) + - PCA-200E support + - SBA-200E support + - Broadcom NetXtremeII support + * Add -common to common header package names. + * Drop provides from common header packages. + * Update plain image type. + * Put only a config dump into linux-support. + + [ Aurelien Jarno ] + * [mips, mipsel] Add a 64-bit image (5kc-malta) for the MIPS Malta board. + (closes: #435677) + [sparc] Enable r8169 module on sparc64 and sparc64-smp flavours (closes: + #431977) + + [ Frederik Schüler ] + * Move all PATA options into the global config file, exept PATA_ARTOP + (arm/ixp4xx) and PATA_MPC52xx (powerpc). + * Move new global options into the global config file + * Clean up new amd64 options + + [ dann frazier ] + * [ia64] Re-enable various unintentionally disabled config options + * Enable hugetlbfs on i386, amd64, sparc64 and powerpc64. Closes: #450939 + + [ Bastian Blank ] + * Add stable release 2.6.23.2: + - BLOCK: Fix bad sharing of tag busy list on queues with shared tag maps + - fix tmpfs BUG and AOP_WRITEPAGE_ACTIVATE + - Fix compat futex hangs. (closes: #433187) + - sched: keep utime/stime monotonic + - fix the softlockup watchdog to actually work + - splice: fix double kunmap() in vmsplice copy path + - writeback: don't propagate AOP_WRITEPAGE_ACTIVATE + - SLUB: Fix memory leak by not reusing cpu_slab + - HOWTO: update ja_JP/HOWTO with latest changes + - fix param_sysfs_builtin name length check + - param_sysfs_builtin memchr argument fix + - Remove broken ptrace() special-case code from file mapping + - locks: fix possible infinite loop in posix deadlock detection + - lockdep: fix mismatched lockdep_depth/curr_chain_hash + * Add stable release 2.6.23.3: + - revert "x86_64: allocate sparsemem memmap above 4G" + - x86: fix TSC clock source calibration error + - x86 setup: sizeof() is unsigned, unbreak comparisons + - x86 setup: handle boot loaders which set up the stack incorrectly + - x86: fix global_flush_tlb() bug + - xfs: eagerly remove vmap mappings to avoid upsetting Xen + - xen: fix incorrect vcpu_register_vcpu_info hypercall argument + - xen: deal with stale cr3 values when unpinning pagetables + - xen: add batch completion callbacks + - UML - kill subprocesses on exit + - UML - stop using libc asm/user.h + - UML - Fix kernel vs libc symbols clash + - UML - Stop using libc asm/page.h + - POWERPC: Make sure to of_node_get() the result of pci_device_to_OF_node() + - POWERPC: Fix handling of stfiwx math emulation + - MIPS: R1: Fix hazard barriers to make kernels work on R2 also. + - MIPS: MT: Fix bug in multithreaded kernels. + - Fix sparc64 MAP_FIXED handling of framebuffer mmaps + - Fix sparc64 niagara optimized RAID xor asm + * Add stable release 2.6.23.4: + - mac80211: make ieee802_11_parse_elems return void + - mac80211: only honor IW_SCAN_THIS_ESSID in STA, IBSS, and AP modes + - mac80211: honor IW_SCAN_THIS_ESSID in siwscan ioctl + - mac80211: store SSID in sta_bss_list + - mac80211: store channel info in sta_bss_list + - mac80211: reorder association debug output + - ieee80211: fix TKIP QoS bug + - NETFILTER: nf_conntrack_tcp: fix connection reopening + - Fix netlink timeouts. + - Fix crypto_alloc_comp() error checking. + - Fix SET_VLAN_INGRESS_PRIORITY_CMD error return. + - Fix VLAN address syncing. + - Fix endianness bug in U32 classifier. + - Fix TEQL oops. + - Fix error returns in sys_socketpair() + - softmac: fix wext MLME request reason code endianness + - Fix kernel_accept() return handling. + - TCP: Fix size calculation in sk_stream_alloc_pskb + - Fix SKB_WITH_OVERHEAD calculations. + - Fix 9P protocol build + - Fix advertised packet scheduler timer resolution + - Add get_unaligned to ieee80211_get_radiotap_len + - mac80211: Improve sanity checks on injected packets + - mac80211: filter locally-originated multicast frames + * Add stable release 2.6.23.5: + - zd1211rw, fix oops when ejecting install media + - rtl8187: Fix more frag bit checking, rts duration calc + - ipw2100: send WEXT scan events + - zd1201: avoid null ptr access of skb->dev + - sky2: fix power settings on Yukon XL + - sky2: ethtool register reserved area blackout + - sky2: status ring race fix + - skge: XM PHY handling fixes + - Fix L2TP oopses. + - TG3: Fix performance regression on 5705. + - forcedeth: add MCP77 device IDs + - forcedeth msi bugfix + - ehea: 64K page kernel support fix + - libertas: fix endianness breakage + - libertas: more endianness breakage + * Add stable release 2.6.23.6: + - ACPI: suspend: Wrong order of GPE restore. + - ACPI: sleep: Fix GPE suspend cleanup + - libata: backport ATA_FLAG_NO_SRST and ATA_FLAG_ASSUME_ATA, part 2 + - libata: backport ATA_FLAG_NO_SRST and ATA_FLAG_ASSUME_ATA + - libata: add HTS542525K9SA00 to NCQ blacklist + - radeon: set the address to access the GART table on the CPU side correctly + - Char: moxa, fix and optimise empty timer + - Char: rocket, fix dynamic_dev tty + - hptiop: avoid buffer overflow when returning sense data + - ide: Fix cs5535 driver accessing beyond array boundary + - ide: Fix siimage driver accessing beyond array boundary + - ide: Add ide_get_paired_drive() helper + - ide: fix serverworks.c UDMA regression + - i4l: fix random freezes with AVM B1 drivers + - i4l: Fix random hard freeze with AVM c4 card + - ALSA: hda-codec - Add array terminator for dmic in STAC codec + - USB: usbserial - fix potential deadlock between write() and IRQ + - USB: add URB_FREE_BUFFER to permissible flags + - USB: mutual exclusion for EHCI init and port resets + - usb-gadget-ether: prevent oops caused by error interrupt race + - USB: remove USB_QUIRK_NO_AUTOSUSPEND + - MSI: Use correct data offset for 32-bit MSI in read_msi_msg() + - md: raid5: fix clearing of biofill operations + - md: fix an unsigned compare to allow creation of bitmaps with v1.0 metadata + - dm: fix thaw_bdev + - dm delay: fix status + - libata: sync NCQ blacklist with upstream + - ALSA: hdsp - Fix zero division + - ALSA: emu10k1 - Fix memory corruption + - ALSA: Fix build error without CONFIG_HAS_DMA + - ALSA: fix selector unit bug affecting some USB speakerphones + - ALSA: hda-codec - Avoid zero NID in line_out_pins[] of STAC codecs + - IB/mthca: Use mmiowb() to avoid firmware commands getting jumbled up + - IB/uverbs: Fix checking of userspace object ownership + - hwmon/lm87: Disable VID when it should be + - hwmon/lm87: Fix a division by zero + - hwmon/w83627hf: Don't assume bank 0 + - hwmon/w83627hf: Fix setting fan min right after driver load + - i915: fix vbl swap allocation size. + - POWERPC: Fix platinumfb framebuffer + * Add stable release 2.6.23.7: + - NFS: Fix a writeback race... + - ocfs2: fix write() performance regression + - minixfs: limit minixfs printks on corrupted dir i_size (CVE-2006-6058) + * Add stable release 2.6.23.8: + - wait_task_stopped: Check p->exit_state instead of TASK_TRACED (CVE-2007-5500) + - TCP: Make sure write_queue_from does not begin with NULL ptr (CVE-2007-5501) + * Add stable release 2.6.23.9: + - ipw2200: batch non-user-requested scan result notifications + - USB: Nikon D40X unusual_devs entry + - USB: unusual_devs modification for Nikon D200 + - softlockup: use cpu_clock() instead of sched_clock() + - softlockup watchdog fixes and cleanups + - x86: fix freeze in x86_64 RTC update code in time_64.c + - ntp: fix typo that makes sync_cmos_clock erratic + - x86: return correct error code from child_rip in x86_64 entry.S + - x86: NX bit handling in change_page_attr() + - x86: mark read_crX() asm code as volatile + - x86: fix off-by-one in find_next_zero_string + - i386: avoid temporarily inconsistent pte-s + - libcrc32c: keep intermediate crc state in cpu order + - geode: Fix not inplace encryption + - Fix divide-by-zero in the 2.6.23 scheduler code + - ACPI: VIDEO: Adjust current level to closest available one. + - libata: sata_sis: use correct S/G table size + - sata_sis: fix SCR read breakage + - reiserfs: don't drop PG_dirty when releasing sub-page-sized dirty file + - x86: disable preemption in delay_tsc() + - dmaengine: fix broken device refcounting + - nfsd4: recheck for secure ports in fh_verify + - knfsd: fix spurious EINVAL errors on first access of new filesystem + - raid5: fix unending write sequence + - oProfile: oops when profile_pc() returns ~0LU + - drivers/video/ps3fb: fix memset size error + - i2c/eeprom: Hide Sony Vaio serial numbers + - i2c/eeprom: Recognize VGN as a valid Sony Vaio name prefix + - i2c-pasemi: Fix NACK detection + + -- maximilian attems Fri, 30 Nov 2007 11:40:09 +0100 + +linux-2.6 (2.6.22-6) unstable; urgency=low + + [ Martin Michlmayr ] + * [mips] Add IP22 (SGI Indy) patches from Thomas Bogendoerfer: + - Disable EARLY PRINTK because it breaks serial. + - fix wrong argument order. + - wrong check for second HPC. Closes: #448488 + + [ maximilian attems ] + * Add stable release 2.6.22.11 - minus ipv6 abi breaker: + - libertas: fix endianness breakage + - libertas: more endianness breakage + - Fix ROSE module unload oops. + - Add get_unaligned to ieee80211_get_radiotap_len + - Fix ipv6 redirect processing, leads to TAHI failures. + - i915: fix vbl swap allocation size. + - Fix ESP host instance numbering. + - Fix TCP MD5 on big-endian. + - Fix zero length socket write() semantics. + - Fix sys_ipc() SEMCTL on sparc64. + - Fix TCP initial sequence number selection. + - lockdep: fix mismatched lockdep_depth/curr_chain_hash + - V4L: ivtv: fix udma yuv bug + - Fix TCP's ->fastpath_cnt_hit handling. + - hwmon/lm87: Fix a division by zero + - hwmon/lm87: Disable VID when it should be + - hwmon/w83627hf: Fix setting fan min right after driver load + - hwmon/w83627hf: Don't assume bank 0 + - netdrvr: natsemi: Fix device removal bug + - Fix ieee80211 handling of bogus hdrlength field + - mac80211: filter locally-originated multicast frames + - POWERPC: Fix handling of stfiwx math emulation + - dm9601: Fix receive MTU + - firewire: fix unloading of fw-ohci while devices are attached + - Fix cls_u32 error return handling. + - ACPI: disable lower idle C-states across suspend/resume + * Add stable release 2.6.22.12-rc1: + - genirq: cleanup mismerge artifact + - genirq: suppress resend of level interrupts + - genirq: mark io_apic level interrupts to avoid resend + - IB/uverbs: Fix checking of userspace object ownership + - minixfs: limit minixfs printks on corrupted dir i_size (CVE-2006-6058) + - param_sysfs_builtin memchr argument fix + - x86: fix global_flush_tlb() bug + - dm snapshot: fix invalidation deadlock + - Revert "x86_64: allocate sparsemem memmap above 4G" + + [ Bastian Blank ] + * Update vserver patch to 2.2.0.5. + - Ignore symbols from never to be merged patch. + + -- maximilian attems Sun, 4 Nov 2007 17:35:51 +0100 + +linux-2.6 (2.6.22-5) unstable; urgency=low + + [ maximilian attems ] + * Add stable release 2.6.22.6: + - USB: allow retry on descriptor fetch errors + - PCI: lets kill the 'PCI hidden behind bridge' message + - Netfilter: Missing Kbuild entry for netfilter + - Fix soft-fp underflow handling. + - SPARC64: Fix sparc64 task stack traces. + - TCP: Do not autobind ports for TCP sockets + - DCCP: Fix DCCP GFP_KERNEL allocation in atomic context + - NET: Share correct feature code between bridging and bonding + - SNAP: Fix SNAP protocol header accesses. + - NET: Fix missing rcu unlock in __sock_create() + - IPv6: Invalid semicolon after if statement + - TCP: Fix TCP rate-halving on bidirectional flows. + - TCP: Fix TCP handling of SACK in bidirectional flows. + - uml: fix previous request size limit fix + - usb: add PRODUCT, TYPE to usb-interface events + - PPP: Fix PPP buffer sizing. + - ocfs2: Fix bad source start calculation during kernel writes + - signalfd: fix interaction with posix-timers + - signalfd: make it group-wide, fix posix-timers scheduling + - USB: fix DoS in pwc USB video driver + - sky2: don't clear phy power bits + - PCI: disable MSI on RS690 + - PCI: disable MSI on RD580 + - PCI: disable MSI on RX790 + - IPV6: Fix kernel panic while send SCTP data with IP fragments + - i386: fix lazy mode vmalloc synchronization for paravirt + * Set abi to 3. + * Add stable release 2.6.22.7: (CVE-2007-4573) + - x86_64: Zero extend all registers after ptrace in 32bit entry path. + * Add stable release 2.6.22.8: (CVE-2007-4571) + - Convert snd-page-alloc proc file to use seq_file + * Add stable release 2.6.22.9: + - 3w-9xxx: Fix dma mask setting + - Fix pktgen src_mac handling. + - nfs: fix oops re sysctls and V4 support + - DVB: get_dvb_firmware: update script for new location of tda10046 firmware + - afs: mntput called before dput + - disable sys_timerfd() + - Fix "Fix DAC960 driver on machines which don't support 64-bit DMA" + - futex_compat: fix list traversal bugs + - MTD: Initialise s_flags in get_sb_mtd_aux() + - Fix sparc64 v100 platform booting. + - Fix IPV6 DAD handling + - ext34: ensure do_split leaves enough free space in both blocks + - dir_index: error out instead of BUG on corrupt dx dirs + - Fix oops in vlan and bridging code + - V4L: ivtv: fix VIDIOC_S_FBUF: new OSD values were never set + - crypto: blkcipher_get_spot() handling of buffer at end of page + - Fix datagram recvmsg NULL iov handling regression. + - Handle snd_una in tcp_cwnd_down() + - Fix TCP DSACK cwnd handling + - JFFS2: fix write deadlock regression + - hwmon: End of I/O region off-by-one + - Fix debug regression in video/pwc + - splice: fix direct splice error handling + - Fix race with shared tag queue maps + - Fix ipv6 source address handling. + - POWERPC: Flush registers to proper task context + - bcm43xx: Fix cancellation of work queue crashes + - Fix DAC960 driver on machines which don't support 64-bit DMA + - DVB: get_dvb_firmware: update script for new location of sp8870 firmware + - USB: fix linked list insertion bugfix for usb core + - Correctly close old nfsd/lockd sockets. + - Fix IPSEC AH4 options handling + - setpgid(child) fails if the child was forked by sub-thread + - sigqueue_free: fix the race with collect_signal() + - Fix decnet device address listing. + - Fix inet_diag OOPS. + - Leases can be hidden by flocks + - kconfig: oldconfig shall not set symbols if it does not need to + - MTD: Makefile fix for mtdsuper + - firewire: fw-ohci: ignore failure of pci_set_power_state + (fix suspend regression) + - ieee1394: ohci1394: fix initialization if built non-modular + - Fix device address listing for ipv4. + - Fix tc_ematch kbuild + - V4L: cx88: Avoid a NULL pointer dereference during mpeg_open() + - DVB: b2c2-flexcop: fix Airstar HD5000 tuning regression + - fix realtek phy id in forcedeth + - rpc: fix garbage in printk in svc_tcp_accept() + - Fix IPV6 append OOPS. + - Fix ipv6 double-sock-release with MSG_CONFIRM + - ACPI: Validate XSDT, use RSDT if XSDT fails + * Update vserver patch to 2.2.0.4. + * Add stable release 2.6.22.10: + - i386: Use global flag to disable broken local apic timer on AMD CPUs. + - Fix timer_stats printout of events/sec + - libata: update drive blacklists + - i2c-algo-bit: Read block data bugfix + - scsi_transport_spi: fix domain validation failure from incorrect width + setting + - Fix SMP poweroff hangs + - Fix ppp_mppe kernel stack usage. + - sky2: reduce impact of watchdog timer + - sky2: fix VLAN receive processing + - sky2: fix transmit state on resume + - SELinux: clear parent death signal on SID transitions + - NLM: Fix a circular lock dependency in lockd + - NLM: Fix a memory leak in nlmsvc_testlock + + [ Martin Michlmayr ] + * [mips] Add a fix so qemu NE2000 will work again. + * [mipsel/r5k-cobalt] Enable MTD. + * [mips] Backport "Fix CONFIG_BUILD_ELF64 kernels with symbols in + CKSEG0" to fix crash on boot on IP32 (SGI O2). Closes: #444104. + + [ Steve Langasek ] + * Set CONFIG_MATHEMU=y on alpha, which is required for proper fp math on + at least ev4-ev56 systems. Closes: #411813. + * linux-image packages need to depend on a newer version of coreutils, + because of the use of readlink -q -m inherited from kernel-package. + Closes: #413311. + + [ Bastian Blank ] + * Fix tainted check in bug scripts. + + [ dann frazier ] + * [ia64] Re-enable various unintentionally disabled config options + + -- Maximilian Attems Thu, 11 Oct 2007 13:31:38 +0000 + +linux-2.6 (2.6.22-4) unstable; urgency=low + + [ dann frazier ] + * [hppa] Use generic compat_sys_getdents (closes: #431773) + + [ Martin Michlmayr ] + * [powerpc] Fix PS/2 keyboard detection on Pegasos (closes: #435378). + + [ Emanuele Rocca ] + * [sparc] Add patch to fix PCI config space accesses on sun4u. + * [sparc] Disable CONFIG_SCSI_SCAN_ASYNC. + + [ maximilian attems ] + * Add stable release 2.6.22.2: + - usb-serial: Fix edgeport regression on non-EPiC devices + - Missing header include in ipt_iprange.h + - drivers/video/macmodes.c:mac_find_mode() mustn't be __devinit + - Fix ipv6 tunnel endianness bug. + - aacraid: fix security hole + - USB: cdc-acm: fix sysfs attribute registration bug + - USB: fix warning caused by autosuspend counter going negative + - Fix sparc32 memset() + - Fix leak on /proc/lockdep_stats + - Fix leaks on /proc/{*/sched, sched_debug, timer_list, timer_stats} + - futex: pass nr_wake2 to futex_wake_op + - md: handle writes to broken raid10 arrays gracefully + - forcedeth bug fix: cicada phy + - forcedeth bug fix: vitesse phy + - forcedeth bug fix: realtek phy + - ACPI: dock: fix opps after dock driver fails to initialize + - pcmcia: give socket time to power down + - drm/i915: Fix i965 secured batchbuffer usage (CVE-2007-3851) + - Fix console write locking in sparc drivers. + - Sparc64 bootup assembler bug + - IPV6: /proc/net/anycast6 unbalanced inet6_dev refcnt + - make timerfd return a u64 and fix the __put_user + - Fix error queue socket lookup in ipv6 + - Input: lifebook - fix an oops on Panasonic CF-18 + - readahead: MIN_RA_PAGES/MAX_RA_PAGES macros + - V4L: Add check for valid control ID to v4l2_ctrl_next + - V4L: ivtv: fix broken VBI output support + - V4L: ivtv: fix DMA timeout when capturing VBI + another stream + - V4L: ivtv: Add locking to ensure stream setup is atomic + - V4L: wm8775/wm8739: Fix memory leak when unloading module + - do not limit locked memory when RLIMIT_MEMLOCK is RLIM_INFINITY + - Include serial_reg.h with userspace headers (closes: #433755) + - TCP FRTO retransmit bug fix + - Fix rfkill IRQ flags. + - nfsd: fix possible read-ahead cache and export table corruption + - nfsd: fix possible oops on re-insertion of rpcsec_gss modules + - jbd commit: fix transaction dropping + - jbd2 commit: fix transaction dropping + - softmac: Fix ESSID problem + - uml: limit request size on COWed devices + - UML: exports for hostfs + - splice: fix double page unlock + - cfq-iosched: fix async queue behaviour + - cr_backlight_probe() allocates too little storage for struct cr_panel + - sx: switch subven and subid values + - hugetlb: fix race in alloc_fresh_huge_page() + - KVM: SVM: Reliably detect if SVM was disabled by BIOS + - dm io: fix another panic on large request + - md: raid10: fix use-after-free of bio + - fs: 9p/conv.c error path fix + - Fix sparc32 udelay() rounding errors. + - sony-laptop: fix bug in event handling + - eCryptfs: ecryptfs_setattr() bugfix + - Hangup TTY before releasing rfcomm_dev + - dm io: fix panic on large request + - dm raid1: fix status + - dm snapshot: permit invalid activation + - "ext4_ext_put_in_cache" uses __u32 to receive physical block number + - destroy_workqueue() can livelock + - USB: fix for ftdi_sio quirk handling + - Fix TC deadlock. + - Fix IPCOMP crashes. + - gen estimator timer unload race + - Netfilter: Fix logging regression + - Fix user struct leakage with locked IPC shem segment + - Fix reported task file values in sense data + - gen estimator deadlock fix + - Netpoll leak + - dm: disable barriers + - firewire: fw-sbp2: set correct maximum payload (fixes CardBus adapters) + - fw-ohci: fix "scheduling while atomic" + - firewire: fix memory leak of fw_request instances + - ieee1394: revert "sbp2: enforce 32bit DMA mapping" + - libata: add FUJITSU MHV2080BH to NCQ blacklist + - i386: HPET, check if the counter works + - CPU online file permission + - acpi-cpufreq: Proper ReadModifyWrite of PERF_CTL MSR + - Keep rfcomm_dev on the list until it is freed + - SCTP scope_id handling fix + - Fix ipv6 link down handling. + - Fix TCP IPV6 MD5 bug. + - sysfs: release mutex when kmalloc() failed in sysfs_open_file(). + - nf_conntrack: don't track locally generated special ICMP error + * Bump abi due to firewire, ivtv and xrfm changes. + * Add stable release 2.6.22.3: + - fix oops in __audit_signal_info() + - direct-io: fix error-path crashes + - powerpc: Fix size check for hugetlbfs + - stifb: detect cards in double buffer mode more reliably + - pata_atiixp: add SB700 PCI ID + - PPC: Revert "[POWERPC] Add 'mdio' to bus scan id list for platforms + with QE UEC" + - random: fix bound check ordering (CVE-2007-3105) + - softmac: Fix deadlock of wx_set_essid with assoc work + - PPC: Revert "[POWERPC] Don't complain if size-cells == 0 in prom_parse()" + - ata_piix: update map 10b for ich8m + - CPUFREQ: ondemand: fix tickless accounting and software coordination bug + - CPUFREQ: ondemand: add a check to avoid negative load calculation + * Add stable release 2.6.22.4: + - Reset current->pdeath_signal on SUID binary execution (CVE-2007-3848) + * Add stable release 2.6.22.5: + - x86_64: Check for .cfi_rel_offset in CFI probe + - x86_64: Change PMDS invocation to single macro + - i386: Handle P6s without performance counters in nmi watchdog + - revert "x86, serial: convert legacy COM ports to platform devices" + - ACPICA: Fixed possible corruption of global GPE list + - ACPICA: Clear reserved fields for incoming ACPI 1.0 FADTs + - i386: Fix double fault handler + - JFFS2 locking regression fix. + - r8169: avoid needless NAPI poll scheduling + - Linux 2.6.22.5 + - AVR32: Fix atomic_add_unless() and atomic_sub_unless() + - i386: allow debuggers to access the vsyscall page with compat vDSO + - hwmon: (smsc47m1) restore missing name attribute + - hwmon: fix w83781d temp sensor type setting + - Hibernation: do not try to mark invalid PFNs as nosave + - sky2: restore workarounds for lost interrupts + - sky2: carrier management + - sky2: check for more work before leaving NAPI + - sky2: check drop truncated packets + - forcedeth: fix random hang in forcedeth driver when using netconsole + - libata: add ATI SB700 device IDs to AHCI driver + + [ dann frazier ] + * [ia64] Restore config cleanup now that its safe to break the ABI + + [ Bastian Blank ] + * Update vserver patch to 2.2.0.3. + + -- Bastian Blank Thu, 30 Aug 2007 20:19:44 +0200 + +linux-2.6 (2.6.22-3) unstable; urgency=low + + [ dann frazier ] + * [ia64] Config cleanup in 2.6.22-2 broke the ABI; revert most of it + for now (everything but the efivars and sym53c8xx modules) + + [ Martin Michlmayr ] + * [mipsel/r5k-cobalt] Fix a typo in the config file. + * [mipsel/4kc-malta] Update the config file, thanks Aurelien Jarno. + * [mipsel] Add patch from Yoichi Yuasa to fix IDE on Cobalt. + + -- Bastian Blank Sun, 29 Jul 2007 13:47:38 +0200 + +linux-2.6 (2.6.22-2) unstable; urgency=low + + [ Steve Langasek ] + * [alpha] request_irq-retval.patch: capture the return value of all + request_irq() calls in sys_titan.c to suppress the warning (and + build failure with -Werror); failures still aren't being handled, but + there's nothing that needs to be done -- or nothing that can be done + -- if these requests fail anyway. + + [ Christian T. Steigies ] + * Add module.lds to kernel headers (closes: #396220) + * Enable INPUT_UINPUT on mac + * Add 2.6.22 patches from linux-m68k CVS + + [ maximilian attems ] + * Add stable release 2.6.22.1: + - nf_conntrack_h323: add checking of out-of-range on choices' index values + (CVE-2007-3642) + + [ dann frazier ] + * [ia64] Re-enable various config options which were unintentionally + disabled somewhere between 2.6.21 and 2.6.22 + * [ia64] Re-enable vserver flavour - this was somehow lost when 2.6.22 + was merged from trunk to the sid branch + + [ Bastian Blank ] + * Update vserver patch to 2.2.0.3-rc1. + + -- Bastian Blank Mon, 23 Jul 2007 09:38:01 +0200 + +linux-2.6 (2.6.22-1) unstable; urgency=low + + [ Bastian Blank ] + * Drop asfs options. + * Drop linux-libc-headers references. + * Update vserver patch to 2.2.0-rc5. + + [ maximilian attems ] + * Fullfils policy 3.7.2.2. + * Add Sempron to the k7 image description (closes: #384737) + Thanks Robert Millan . + * [powerpc] Enable CONFIG_ADB_PMU_LED. + * [hppa] Disable a bunch of topconfig enabled fb devices. Thanks Frank + Lichtenheld for build fix. + + [ Christian T. Steigies ] + * Add module.lds to kernel headers + * Enable INPUT_UINPUT on mac + * Add 2.6.22 patches from linux-m68k CVS + + [ dann frazier ] + * Enable vserver flavour for ia64 (closes: #423232) + + -- Bastian Blank Sun, 15 Jul 2007 15:03:40 +0200 + +linux-2.6 (2.6.22~rc5-1~experimental.1) experimental; urgency=low + + [ Bastian Blank ] + * [powerpc]: Disable prep. + * [powerpc]: Disable apm emulation. + * Drop inactive members from Uploaders. + + [ maximilian attems ] + * Cleanup configs of old unused variables. + * Enable TCP_CONG_YEAH, TCP_CONG_ILLINOIS, NF_CONNTRACK_SANE, DM_DELAY, + GIGASET_M101, SATA_INIC162X, VIDEO_IVTV, USB_ZR364XX, INFINIBAND_CXGB3, + MLX4_INFINIBAND, SPI_AT25, MFD_SM501, DVB_USB_M920X, DVB_USB_GL861, + DVB_USB_AU6610, DVB_USB_OPERA1, SENSORS_AD7418, SENSORS_ADM1029, + SENSORS_F75375S, SENSORS_CORETEMP, SENSORS_MAX6650, SENSORS_APPLESMC, + I2C_SIMTEC, I2C_TINY_USB, SC92031, LIBERTAS_USB, RFKILL, RFKILL_INPUT, + MTD_UBI, SND_USB_CAIAQ, SND_USB_CAIAQ_INPUT, USB_BERRY_CHARGE, + RTC_DRV_MAX6900, SUNRPC_BIND34, SND_PORTMAN2X4, FB_VT8623, FUSION_LAN, + DISPLAY_SUPPORT, FB_ARK, FB_SM501 + and disable SCSI_ESP_CORE, SPI_SPIDEV, CRYPT_CRYPTD, SYSV68_PARTITION, + MOUSE_PS2_TOUCHKIT, INPUT_POLLDEV in topconfig. + * [amd64, i386]: Take care of the renaming acpi-ibm to thinkpad-acpi. + Enable KINGSUN_DONGLE, AF_RXRPC, RXKAD, MTD_NAND_PLATFORM, BLINK, PHANTOM, + BACKLIGHT_PROGEAR, FB_HECUBA, FB_LE80578, FB_CARILLO_RANCH. + Disable OSS_OBSOLETE. + * Enable WLAN_PRE80211 and WLAN_80211 on all archs with NET_RADIO enabled. + * Fix RTC_INTF_{DEV,SYSFS,PROC}=y where enabled modular. + * Enable new wirless stack mac80211 and improved wireless conf api. + * Enable new USB Touchscreen Driver on all configs with touchscreens. + * Enable the newly added crypto algorythm: fcrypt, pcbc and camellia. + * Unify CONFIG_TR to toplevel config, also enable new drivers 3C359 + and SMCTR. + * Enable the moved USB tablets config options where wacom is enabled. + * [i386] Enable driver for Crystalfontz 128x64 2-color LCD. + * [amd64] Enable KS0108 LCD controller. + * Enable the new firewire stack labeled to be more simple and robust. + * [i386] Enable VMI paravirtualized interface. + * [powerpc] Enable fb for IBM GXT4500P adaptor. + * [amd64] Enable timerstats too. + + [ Martin Michlmayr ] + * mipsel/r5k-cobalt: Use the new RTC system. + + [ dann frazier ] + * Add Xen licensing info to the copyright file. (closes: #368912) + + [ Gordon Farquharson ] + * arm: Mark CHELSIO_T3, NETXEN_NIC, BCM43XX, VIDEO_BT848, + DVB_B2C2_FLEXCOP, and DVB_BUDGET as broken on ARM. + * arm/ixp4xx: Add support for the new generic I2C GPIO driver on the + NSLU2 and the NAS100D. Thanks to Michael-Luke Jones and Rod Whitby. + * arm/ixp4xx: Update Artop PATA support patch for the NAS 100d. + + [ Christian T. Steigies ] + * m68k: Disable already included patches (611, 618, 630) + + -- Bastian Blank Tue, 19 Jun 2007 17:49:52 +0200 + +linux-2.6 (2.6.21-6) unstable; urgency=low + + * Add stable release 2.6.21.6: + - nf_conntrack_h323: add checking of out-of-range on choices' index values + (CVE-2007-3642) + * Update vserver patch to 2.2.0. + + -- Bastian Blank Tue, 10 Jul 2007 18:36:17 +0200 + +linux-2.6 (2.6.21-5) unstable; urgency=low + + [ Christian T. Steigies ] + * [m68k] Add atari isa and scsi fixes + + [ maximilian attems ] + * Add stable release 2.6.21.4: + - cpuset: prevent information leak in cpuset_tasks_read (CVE-2007-2875) + - random: fix error in entropy extraction (CVE-2007-2453 1 of 2) + - random: fix seeding with zero entropy (CVE-2007-2453 2 of 2) + - NETFILTER: {ip, nf}_conntrack_sctp: fix remotely triggerable NULL ptr + dereference (CVE-2007-2876) + * Add stable release 2.6.21.5: + - acpi: fix potential call to a freed memory section. + - USB: set the correct Interrupt interval in usb_bulk_msg + - i386: Fix K8/core2 oprofile on multiple CPUs + - ntfs_init_locked_inode(): fix array indexing + - ALSA: wm8750 typo fix + - neofb: Fix pseudo_palette array overrun in neofb_setcolreg + - e1000: disable polling before registering netdevice + - timer statistics: fix race + - x86: fix oprofile double free + - ALSA: usb-audio: explicitly match Logitech QuickCam + - zd1211rw: Add AL2230S RF support + - IPV4: Correct rp_filter help text. + - Fix AF_UNIX OOPS + - ICMP: Fix icmp_errors_use_inbound_ifaddr sysctl + - NET: Fix BMSR_100{HALF,FULL}2 defines in linux/mii.h + - SPARC64: Fix _PAGE_EXEC_4U check in sun4u I-TLB miss handler. + - SPARC64: Don't be picky about virtual-dma values on sun4v. + - SPARC64: Fix two bugs wrt. kernel 4MB TSB. + - cciss: fix pci_driver.shutdown while device is still active + - fix compat console unimap regression + - timer stats: speedups + - SPARC: Linux always started with 9600 8N1 + - pci_ids: update patch for Intel ICH9M + - PCI: quirk disable MSI on via vt3351 + - UML - Improve host PTRACE_SYSEMU check + - NET: parse ip:port strings correctly in in4_pton + - Char: cyclades, fix deadlock + - IPSEC: Fix panic when using inter address familiy IPsec on loopback. + - TCP: Use default 32768-61000 outgoing port range in all cases. + - TG3: Fix link problem on Dell's onboard 5906. + - fuse: fix mknod of regular file + - md: Avoid overflow in raid0 calculation with large components. + - md: Don't write more than is required of the last page of a bitmap + - make freezeable workqueues singlethread + - tty: fix leakage of -ERESTARTSYS to userland + - V4L/DVB (5593): Budget-ci: Fix tuning for TDM 1316 (160..200 MHz) + - Input: i8042 - fix AUX port detection with some chips + - SCSI: aacraid: Correct sa platform support. + (Was: [Bug 8469] Bad EIP value on pentium3 SMP kernel-2.6.21.1) + - BLUETOOTH: Fix locking in hci_sock_dev_event(). + - hpt366: don't check enablebits for HPT36x + - ieee1394: eth1394: bring back a parent device + - NET: Fix race condition about network device name allocation. + - ALSA: hda-intel - Probe additional slots only if necessary + - ALSA: hda-intel - Fix detection of audio codec on Toshiba A100 + - ahci: disable 64bit dma on sb600 + - i386: HPET, check if the counter works + - Ignore bogus ACPI info for offline CPUs + - NOHZ: Rate limit the local softirq pending warning output + - Prevent going idle with softirq pending + - Work around Dell E520 BIOS reboot bug + - NET: "wrong timeout value" in sk_wait_data() v2 + - IPV6 ROUTE: No longer handle ::/0 specially. + - x86_64: allocate sparsemem memmap above 4G + * Bump ABI to 2. + + [ Bastian Blank ] + * Back out ABI fixing changes. + * Update vserver patch to 2.2.0-rc3. + + -- Bastian Blank Fri, 22 Jun 2007 12:39:47 +0200 + +linux-2.6 (2.6.21-4) unstable; urgency=low + + * [powerpc] Fix mkvmlinuz support. + * [s390] Add exception handler for diagnose 224. + + -- Bastian Blank Sat, 26 May 2007 14:08:44 +0200 + +linux-2.6 (2.6.21-3) unstable; urgency=low + + [ Gordon Farquharson ] + * arm/ixp4xx: Add patch to set NSLU2 timer frequency. + + [ maximilian attems ] + * sparc64: enable USB_SERIAL. (closes: #412740) + * Apply stable 2.6.21.1. + * Add stable release 2.6.21.2: + - slob: fix page order calculation on not 4KB page + - libata-sff: Undo bug introduced with pci_iomap changes + - kbuild: fixdep segfault on pathological string-o-death + - IPMI: fix SI address space settings + - IPV6: Reverse sense of promisc tests in ip6_mc_input + - iop: fix iop_getttimeoffset + - iop13xx: fix i/o address translation + - arm: fix handling of svc mode undefined instructions + - CPUFREQ: powernow-k7: fix MHz rounding issue with perflib + - CPUFREQ: Support rev H AMD64s in powernow-k8 + - CPUFREQ: Correct revision mask for powernow-k8 + - JFS: Fix race waking up jfsIO kernel thread + - IPV6: Send ICMPv6 error on scope violations. + - SPARC64: Add missing cpus_empty() check in hypervisor xcall handling. + - SPARC64: Fix recursion in PROM tree building. + - SERIAL SUNHV: Add an ID string. + - SPARC64: Bump PROMINTR_MAX to 32. + - SPARC64: Be more resiliant with PCI I/O space regs. + - oom: fix constraint deadlock + - fix for bugzilla 8426: massive slowdown on SCSI CD/DVD drive connected to + mptspi driver + - x86_64 : Fix vgettimeofday() + - IPV6: Fix slab corruption running ip6sic + - IPSEC: Check validity of direction in xfrm_policy_byid + - CRYPTO: api: Read module pointer before freeing algorithm + - NET_SCHED: prio qdisc boundary condition + - reiserfs: suppress lockdep warning + - USB HID: hiddev - fix race between hiddev_send_event() and + hiddev_release() + - NETFILTER: {ip,nf}_nat_proto_gre: do not modify/corrupt GREv0 packets + through NAT + - fix leaky resv_huge_pages when cpuset is in use + - ACPI: Fix 2.6.21 boot regression on P4/HT + - TG3: Fix TSO bugs. + - TG3: Remove reset during MAC address changes. + - TG3: Update version and reldate. + - BNX2: Fix TSO problem with small MSS. + - BNX2: Block MII access when ifdown. + - BNX2: Save PCI state during suspend. + - BNX2: Update version and reldate. + - sis900: Allocate rx replacement buffer before rx operation + - knfsd: Avoid use of unitialised variables on error path when nfs exports. + - knfsd: rpc: fix server-side wrapping of krb5i replies + - md: Avoid a possibility that a read error can wrongly propagate through + - md/raid1 to a filesystem. + - fat: fix VFAT compat ioctls on 64-bit systems + - NETFILTER: {ip,nf}_conntrack: fix use-after-free in helper destroy + callback invocation + - ppp: Fix ppp_deflate issues with recent zlib_inflate changes + - NETPOLL: Fix TX queue overflow in trapped mode. + - NETPOLL: Remove CONFIG_NETPOLL_RX + - cxacru: Fix infinite loop when trying to cancel polling task + - TCP: zero out rx_opt in tcp_disconnect() + - ipv6: track device renames in snmp6 + - skge: default WOL should be magic only (rev2) + - skge: allow WOL except for known broken chips + - sky2: allow 88E8056 + - sky2: 88e8071 support not ready + - skge: crash on shutdown/suspend + - sky2: fix oops on shutdown + - udf: decrement correct link count in udf_rmdir + - ALSA: hda-codec - Fix resume of STAC92xx codecs + - sata_via: add missing PM hooks + - driver-core: don't free devt_attr till the device is released + - pci-quirks: disable MSI on RS400-200 and RS480 + - highres/dyntick: prevent xtime lock contention + - clocksource: fix resume logic + - smc911x: fix compilation breakage wjen debug is on + - SCTP: Fix sctp_getsockopt_local_addrs_old() to use local storage. + - SCTP: Correctly copy addresses in sctp_copy_laddrs + - SCTP: Prevent OOPS if hmac modules didn't load + - IPV6: Do no rely on skb->dst before it is assigned. + - IPV6 ROUTE: Assign rt6i_idev for ip6_{prohibit,blk_hole}_entry. + + [ Christian T. Steigies ] + * m68k: enable ATARI_SCSI and ATARI_ROM_ISA + + [ Bastian Blank ] + * Fix linux/version.h in linux-libc-dev. + * Make it possible to specifiy special CFLAGS. + * [hppa] Reenable. + * [hppa] Workaround hppa64 failure. + * [hppa] Fix debugging in lws syscalls. + * Fix abi change. + * Add stable release 2.6.21.3: + - [PATCH] GEODE-AES: Allow in-place operations [CVE-2007-2451] + + -- Bastian Blank Fri, 25 May 2007 10:57:48 +0200 + +linux-2.6 (2.6.21-2) unstable; urgency=low + + [ Christian T. Steigies ] + * m68k: fix atari scc patch + * m68k: install compressed vmlinuz images so the post-inst script can find it + + [ Steve Langasek ] + * [alpha] isa-mapping-support.patch: add isa_page_to_bus and + isa_bus_to_virt defines to complement the existing isa_virt_to_bus + define; untested, but these should all be straightforward on alpha and + defining them is certainly a better option for getting user feedback + than disabling the affected drivers. + + [ Bastian Blank ] + * [powerpc] Readd mkvmlinuz support. (closes: #419033) + * [sparc]: Disable sparc32 image. + * [hppa]: Temporary disable all images. + + -- Bastian Blank Fri, 18 May 2007 19:52:36 +0200 + +linux-2.6 (2.6.21-1) unstable; urgency=low + + [ maximilian attems ] + * New upstream release see http://kernelnewbies.org/Linux_2_6_21 + (closes: #423874) + * Disable CONFIG_IP_ROUTE_MULTIPATH_CACHED in topconfig. + * Enable CONFIG_IP6_NF_MATCH_MH, CONFIG_CHELSIO_T3, CONFIG_USB_NET_DM9601, + CONFIG_NETFILTER_XT_TARGET_TCPMSS, CONFIG_RTC_DRV_CMOS, + CONFIG_ASUS_LAPTOP, CONFIG_SONY_LAPTOP, CONFIG_DVB_TUNER_QT1010, + CONFIG_USB_IOWARRIOR, CONFIG_ATL1 in topconfig. + * [i386] Enable CONFIG_ACPI_BAY, CONFIG_X86_LONGHAUL, CONFIG_BLK_DEV_DELKIN, + CONFIG_BLK_DEV_IT8213, CONFIG_BLK_DEV_TC86C001, CONFIG_INPUT_ATLAS_BTNS, + CONFIG_SENSORS_ADM1029, CONFIG_FB_SVGALIB, CONFIG_FB_S3, + CONFIG_USB_KC2190, CONFIG_KS0108. + * Add stable release 2.6.21.1: + - IPV4: Fix OOPS'er added to netlink fib. + - IPV6: Fix for RT0 header ipv6 change. + * [i386] Enable CONFIG_NO_HZ, CONFIG_HIGH_RES_TIMERS for dynticks and true + high-resolution timers. + * [i386] Enable CONFIG_TIMER_STATS to collect stats about kernel/userspace + timer aka power usage (see powertop). (closes: #423694) + * [i386] Disable obsolete CONFIG_IRQBALANCE due to bad timer behaviour. + + [ Martin Michlmayr ] + * Add armel (arm with EABI) support. Thanks, Lennert Buytenhek and + Joey Hess. (closes: #410853) + * Mark CHELSIO_T3 as broken on ARM. + * Take arch/arm/tools/mach-types from current git to fix build failure + because MACH_TYPE_EP80219 is not defined. + * mips/sb1: Don't build CONFIG_ATA into the kernel. + * mips/sb1: Unset CONFIG_USB_{KBD,MOUSE} since the generic HID is used. + * arm/iop32x: Don't build CONFIG_ATA into the kernel. + * arm/ixp4xx: Enable more SATA drivers. + * arm/ixp4xx: Enable PATA_ARTOP which is needed by the nas100d. + * arm/ixp4xx: Set CONFIG_USB_EHCI_TT_NEWSCHED. + * mips/4kc-malta: Add an image for the MIPS Malta board. Thanks, + Aurelien Jarno. (closes: #421377) + + [ Emanuele Rocca ] + * sparc: Enable CONFIG_SCSI_QLOGIC_1280. (closes: #423177) + + [ Christian T. Steigies ] + * Add m68k patches for 2.6.21 + * Add type: plain to [image] in arch/m68k/defines to fix missing + Modules.symvers problem + + [ Steve Langasek ] + * Revert change to disable image building on alpha. + + [ Bastian Blank ] + * Update vserver patch to 2.2.0-rc1. + + -- Bastian Blank Wed, 16 May 2007 13:46:38 +0200 + +linux-2.6 (2.6.20-3) unstable; urgency=low + + [ Gordon Farquharson ] + * arm: Mark CONFIG_MTD_NAND_CAFE and CONFIG_NETXEN_NIC as broken to + fix FTBFS. + + [ Bastian Blank ] + * Disable new pata drivers. (closes: #419458) + * Disable pata in ata_piix. + + -- Bastian Blank Tue, 24 Apr 2007 09:54:44 +0200 + +linux-2.6 (2.6.20-2) unstable; urgency=low + + [ Bastian Blank ] + * Rename linux-libc-headers into linux-libc-dev. + * [mips] Drop sb1250 uart support. + * [alpha] Temporary disable alpha images. + * Add stable release 2.6.20.7: + - Linux 2.6.20.7 + - Update libata drive blacklist to the latest from 2.6.21 + - fix page leak during core dump + - revert "retries in ext4_prepare_write() violate ordering requirements" + - revert "retries in ext3_prepare_write() violate ordering requirements" + - libata: Clear tf before doing request sense (take 3) + - fix lba48 bug in libata fill_result_tf() + - ahci.c: walkaround for SB600 SATA internal error issue + - libata bugfix: preserve LBA bit for HDIO_DRIVE_TASK + - softmac: avoid assert in ieee80211softmac_wx_get_rate + - knfsd: allow nfsd READDIR to return 64bit cookies + - Fix TCP slow_start_after_idle sysctl + - Fix tcindex classifier ABI borkage... + - Fix IPSEC replay window handling + - Fix TCP receiver side SWS handling. + - Fix scsi sense handling + - Fix length validation in rawv6_sendmsg() + - NETFILTER: ipt_CLUSTERIP: fix oops in checkentry function + - 8139too: RTNL and flush_scheduled_work deadlock + - Fix calculation for size of filemap_attr array in md/bitmap. + - HID: Do not discard truncated input reports + - DVB: pluto2: fix incorrect TSCR register setting + - DVB: tda10086: fix DiSEqC message length + - sky2: phy workarounds for Yukon EC-U A1 + - sky2: turn on clocks when doing resume + - sky2: turn carrier off when down + - skge: turn carrier off when down + - sky2: reliable recovery + - i386: fix file_read_actor() and pipe_read() for original i386 systems + - kbuild: fix dependency generation + + [ dann frazier ] + * [hppa] Add parisc arch patch from Kyle McMartin + * [hppa] Enable CONFIG_TULIP_MMIO (closes: #332962) + * [hppa] Disable ni52 driver, it doesn't build (and wouldn't work if it did) + + -- Bastian Blank Sun, 15 Apr 2007 16:04:16 +0200 + +linux-2.6 (2.6.20-1) unstable; urgency=low + + [ Martin Michlmayr ] + * mipsel: Drop DECstation support (both r3k-kn02 and r4k-kn04). + * arm: Drop RiscPC (rpc) support. + * arm: Update configs for 2.6.19-rc6. + * arm: source drivers/ata/Kconfig so SATA can be enabled on ARM. + * arm/footbridge: Unset SATA. + * arm/s3c2410: Drop this flavour since no such device is supported + in debian-installer and the ARM build resources are limited. + + [ Sven Luther ] + * [powerpc] Added Genesi Efika support patch + + [ Bastian Blank ] + * Remove legacy pty support. (closes: #338404) + * Enable new scsi parts. + * powerpc: Enable ibmvscsis. + * Add stable release 2.6.20.1: + - Linux 2.6.20.1 + - [PATCH] Fix a free-wrong-pointer bug in nfs/acl server (CVE-2007-0772) + * Add stable release 2.6.20.2: + - Linux 2.6.20.2 + - IPV6: Handle np->opt being NULL in ipv6_getsockopt_sticky() [CVE-2007-1000] + - x86-64: survive having no irq mapping for a vector + - Fix buffer overflow in Omnikey CardMan 4040 driver (CVE-2007-0005) + - TCP: Fix minisock tcp_create_openreq_child() typo. + - gfs2: fix locking mistake + - ATA: convert GSI to irq on ia64 + - pktcdvd: Correctly set cmd_len field in pkt_generic_packet + - video/aty/mach64_ct.c: fix bogus delay loop + - revert "drivers/net/tulip/dmfe: support basic carrier detection" + - throttle_vm_writeout(): don't loop on GFP_NOFS and GFP_NOIO allocations + - fix section mismatch warning in lockdep + - ueagle-atm.c needs sched.h + - kvm: Fix asm constraint for lldt instruction + - lockdep: forward declare struct task_struct + - Char: specialix, isr have 2 params + - buffer: memorder fix + - kernel/time/clocksource.c needs struct task_struct on m68k + - m32r: build fix for processors without ISA_DSP_LEVEL2 + - hugetlb: preserve hugetlb pte dirty state + - enable mouse button 2+3 emulation for x86 macs + - v9fs_vfs_mkdir(): fix a double free + - ufs: restore back support of openstep + - Fix MTRR compat ioctl + - kexec: Fix CONFIG_SMP=n compilation V2 (ia64) + - NLM: Fix double free in __nlm_async_call + - RPM: fix double free in portmapper code + - Revert "[PATCH] LOG2: Alter get_order() so that it can make use of ilog2() on a constant" + - Backport of psmouse suspend/shutdown cleanups + - USB: usbnet driver bugfix + - sched: fix SMT scheduler bug + - tty_io: fix race in master pty close/slave pty close path + - forcedeth: disable msix + - export blk_recount_segments + - Fix reference counting (memory leak) problem in __nfulnl_send() and callers related to packet queueing. + - Fix anycast procfs device leak + - Don't add anycast reference to device multiple times + - Fix TCP MD5 locking. + - Fix %100 cpu spinning on sparc64 + - Fix skb data reallocation handling in IPSEC + - Fix xfrm_add_sa_expire() return value + - Fix interrupt probing on E450 sparc64 systems + - HID: fix possible double-free on error path in hid parser + - POWERPC: Fix performance monitor exception + - libata: add missing CONFIG_PM in LLDs + - libata: add missing PM callbacks + - bcm43xx: Fix assertion failures in interrupt handler + - mmc: Power quirk for ENE controllers + - UML - Fix 2.6.20 hang + - fix umask when noACL kernel meets extN tuned for ACLs + - sata_sil: ignore and clear spurious IRQs while executing commands by polling + - swsusp: Fix possible oops in userland interface + - Fix posix-cpu-timer breakage caused by stale p->last_ran value + - V4L: cx88-blackbird: allow usage of 376836 and 262144 sized firmware images + - V4L: fix cx25840 firmware loading + - DVB: digitv: open nxt6000 i2c_gate for TDED4 tuner handling + - DVB: cxusb: fix firmware patch for big endian systems + - V4L: pvrusb2: Handle larger cx2341x firmware images + - V4L: pvrusb2: Fix video corruption on stream start + - dvbdev: fix illegal re-usage of fileoperations struct + - md: Fix raid10 recovery problem. + - bcm43xx: fix for 4309 + - i386: Fix broken CONFIG_COMPAT_VDSO on i386 + - x86: Don't require the vDSO for handling a.out signals + - x86_64: Fix wrong gcc check in bitops.h + - sky2: transmit timeout deadlock + - sky2: dont flush good pause frames + - Fix oops in xfrm_audit_log() + - Prevent pseudo garbage in SYN's advertized window + - Fix IPX module unload + - Clear TCP segmentation offload state in ipt_REJECT + - Fix atmarp.h for userspace + - UHCI: fix port resume problem + - Fix recently introduced problem with shutting down a busy NFS server. + - Avoid using nfsd process pools on SMP machines. + - EHCI: turn off remote wakeup during shutdown + - IPV6: HASHTABLES: Use appropriate seed for caluculating ehash index. + - MTD: Fatal regression in drivers/mtd/redboot.c in 2.6.20 + - Kconfig: FAULT_INJECTION can be selected only if LOCKDEP is enabled. + - USB HID: Fix USB vendor and product IDs endianness for USB HID devices + - Fix null pointer dereference in appledisplay driver + - ieee1394: fix host device registering when nodemgr disabled + - ieee1394: video1394: DMA fix + - Fix compile error for e500 core based processors + - md: Avoid possible BUG_ON in md bitmap handling. + - Fix allocation failure handling in multicast + - Fix TCP FIN handling + - Fix ATM initcall ordering. + - Fix various bugs with aligned reads in RAID5. + - hda-intel - Don't try to probe invalid codecs + - usbaudio - Fix Oops with unconventional sample rates + - usbaudio - Fix Oops with broken usb descriptors + - USB: fix concurrent buffer access in the hub driver + - Missing critical phys_to_virt in lib/swiotlb.c + - AGP: intel-agp bugfix + - bcm43xx: Fix for oops on ampdu status + - bcm43xx: Fix for oops on resume + - ide: fix drive side 80c cable check + - Keys: Fix key serial number collision handling + - knfsd: Fix a race in closing NFSd connections. + - pata_amd: fix an obvious bug in cable detection + - prism54: correct assignment of DOT1XENABLE in WE-19 codepaths + - rtc-pcf8563: detect polarity of century bit automatically + - x86_64: fix 2.6.18 regression - PTRACE_OLDSETOPTIONS should be accepted + - ocfs2: ocfs2_link() journal credits update + * Update xen patch to changeset 48670 from fedora 2.6.20 branch. + * Support xen versions 3.0.4-1 and 3.0.3-1. + + [ Rod Whitby ] + * arm/ixp4xx: Enable PATA_ARTOP for the nas100d and dsmg600. + * arm/ixp4xx: Enable RTC for the nas100d + * Add nas100d Ethernet MAC setup support. + * Add temporary hack to get Artop PATA support going on the nas100d. + + [ maximilian attems ] + * i386: Enable kvm. + * Add stable release 2.6.20.3: + - Fix sparc64 device register probing + - Fix bug 7994 sleeping function called from invalid context + - Fix timewait jiffies + - Fix UDP header pointer after pskb_trim_rcsum() + - Fix compat_getsockopt + - bcm43xx: Fix problem with >1 GB RAM + - nfnetlink_log: fix NULL pointer dereference + - nfnetlink_log: fix possible NULL pointer dereference + - conntrack: fix {nf, ip}_ct_iterate_cleanup endless loops + - nf_conntrack/nf_nat: fix incorrect config ifdefs + - tcp conntrack: accept SYN|URG as valid + - nfnetlink_log: fix reference leak + - nfnetlink_log: fix use after free + - nf_conntrack: fix incorrect classification of IPv6 fragments as + ESTABLISHED + - nfnetlink_log: zero-terminate prefix + - nfnetlink_log: fix crash on bridged packet + - Fix callback bug in connector + - fix for bugzilla #7544 (keyspan USB-to-serial converter) + - ip6_route_me_harder should take into account mark + * Add myself to uploaders field, entry got lost after 2.6.16-2 + * Add stable release 2.6.20.4: + - fix deadlock in audit_log_task_context() + - EHCI: add delay to bus_resume before accessing ports + - Copy over mac_len when cloning an skb + - fix read past end of array in md/linear.c + - oom fix: prevent oom from killing a process with children/sibling unkillable + - Fix sparc64 hugepage bugs + - Fix page allocation debugging on sparc64 + - Fix niagara memory corruption + - Input: i8042 - really suppress ACK/NAK during panic blink + - Input: i8042 - fix AUX IRQ delivery check + - Input: i8042 - another attempt to fix AUX delivery checks + - Fix rtm_to_ifaddr() error return. + - r8169: fix a race between PCI probe and dev_open + - futex: PI state locking fix + - adjust legacy IDE resource setting (v2) + - UML - arch_prctl should set thread fs + - gdth: fix oops in gdth_copy_cmd() + - Fix extraneous IPSEC larval SA creation + - IA64: fix NULL pointer in ia64/irq_chip-mask/unmask function + - st: fix Tape dies if wrong block size used, bug 7919 + - Fix ipv6 flow label inheritance + - NETFILTER: nfnetlink_log: fix reference counting + - mm: fix madvise infinine loop + - Fix another NULL pointer deref in ipv6_sockglue.c + - NetLabel: Verify sensitivity level has a valid CIPSO mapping + - Fix GFP_KERNEL with preemption disabled in fib_trie + - IrDA: irttp_dup spin_lock initialisation + - hda-intel - Fix codec probe with ATI controllers + - hrtimer: prevent overrun DoS in hrtimer_forward() + - fix MTIME_SEC_MAX on 32-bit + - nfs: nfs_getattr() can't call nfs_sync_mapping_range() for non-regular files + - dio: invalidate clean pages before dio write + - initialise pi_lock if CONFIG_RT_MUTEXES=N + * Add stable release 2.6.20.5: + - FRA_{DST,SRC} are le16 for decnet + - CIFS: reset mode when client notices that ATTR_READONLY is no longer set + - ide: clear bmdma status in ide_intr() for ICHx controllers (revised #4) + - ide: remove clearing bmdma status from cdrom_decode_status() (rev #4) + - NET: Fix sock_attach_fd() failure in sys_accept() + - DCCP: Fix exploitable hole in DCCP socket options + - ide: revert "ide: fix drive side 80c cable check, take 2" for now + - generic_serial: fix decoding of baud rate + - IPV6: Fix ipv6 round-robin locking. + - VIDEO: Fix FFB DAC revision probing + - PPP: Fix PPP skb leak + - V4L: msp_attach must return 0 if no msp3400 was found. + - CRYPTO: api: scatterwalk_copychunks() fails to advance through scatterlist + - APPLETALK: Fix a remotely triggerable crash (CVE-2007-1357) + - UML - fix epoll + - UML - host VDSO fix + - UML - Fix static linking + - UML - use correct register file size everywhere + - libata: sata_mv: don't touch reserved bits in EDMA config register + - libata: sata_mv: Fix 50xx irq mask + - libata bugfix: HDIO_DRIVE_TASK + - V4L: Fix SECAM handling on saa7115 + - DVB: fix nxt200x rf input switching + - SPARC: Fix sparc builds with gcc-4.2.x + - V4L: saa7146: Fix allocation of clipping memory + - uml: fix unreasonably long udelay + - NET: Fix packet classidier NULL pointer OOPS + - NET_SCHED: Fix ingress qdisc locking. + - sata_nv: delay on switching between NCQ and non-NCQ commands + - dvb-core: fix several locking related problems + - ieee1394: dv1394: fix CardBus card ejection + - CIFS: Allow reset of file to ATTR_NORMAL when archive bit not set + - jmicron: make ide jmicron driver play nice with libata ones + - libata: clear TF before IDENTIFYing + - NET: Fix FIB rules compatability + - DVB: isl6421: don't reference freed memory + - V4L: radio: Fix error in Kbuild file + - i2o: block IO errors on i2o disk + * Add stable release 2.6.20.6: + - CRYPTO api: Use the right value when advancing scatterwalk_copychunks + - uml: fix static linking for real + + [ Gordon Farquharson ] + * Disable broken config options on ARM. + + [ Frederik Schüler ] + * Disable NAPI on forcedeth, it is broken. + + [ dann frazier ] + * Hardcode the output of the scripts under arch/ia64/scripts as executed + in an etch environment so that we can build out of tree modules correctly + (re-add; patch seems to have been dropped during a merge.) + See: #392592 + * Allow '.' and '+' in the target dist field of the changelog. dpkg has + supported this since 1.13.20, see #361171. + + -- Bastian Blank Mon, 09 Apr 2007 19:21:52 +0200 + +linux-2.6 (2.6.18.dfsg.1-10) unstable; urgency=low + + [ maximilian attems ] + * Add patches out of stable queue 2.6.18 + - [amd64] Don't leak NT bit into next task (CVE-2006-5755) + - IB/srp: Fix FMR mapping for 32-bit kernels and addresses above 4G + - SCSI: add missing cdb clearing in scsi_execute() + * Xen postinst: Use takeover for update-initramfs. Makes postinst idempotent. + On creation it should always overwrite. (closes: #401183) + * Hand-picked from stable release 2.6.16.38: + - i2c-viapro: Add support for the VT8237A and VT8251 + - PCI: irq: irq and pci_ids patch for Intel ICH9 + - i2c-i801: SMBus patch for Intel ICH9 + - fix the UML compilation + - drm: allow detection of new VIA chipsets + - drm: Add the P4VM800PRO PCI ID. + - rio: typo in bitwise AND expression. + - i2c-mv64xxx: Fix random oops at boot + - i2c: fix broken ds1337 initialization + - [SUNKBD]: Fix sunkbd_enable(sunkbd, 0); obvious. + - Call init_timer() for ISDN PPP CCP reset state timer (CVE-2006-5749) + - V4L: cx88: Fix leadtek_eeprom tagging + - SPI/MTD: mtd_dataflash oops prevention + - grow_buffers() infinite loop fix (CVE-2006-5757/CVE-2006-6060) + - corrupted cramfs filesystems cause kernel oops (CVE-2006-5823) + - ext2: skip pages past number of blocks in ext2_find_entry + (CVE-2006-6054) + - handle ext3 directory corruption better (CVE-2006-6053) + - hfs_fill_super returns success even if no root inode (CVE-2006-6056) + backout previous fix, was not complete. + - Fix for shmem_truncate_range() BUG_ON() + - ebtables: check struct type before computing gap + - [IPV4/IPV6]: Fix inet{,6} device initialization order. + - [IPV6] Fix joining all-node multicast group. + - [SOUND] Sparc CS4231: Use 64 for period_bytes_min + * [PKTGEN]: Convert to kthread API. Thanks David Miller for patch. + * [IDE] Add driver for Jmicron JMB36x devices by Alan Cox. + Enable jmicron on i386 and amd64 archs. + * Hand-picked from stable release 2.6.16.39: + - atiixp: hang fix + - V4L/DVB: Flexcop-usb: fix debug printk + - V4L/DVB: Fix uninitialised variable in dvb_frontend_swzigzag + - read_zero_pagealigned() locking fix + - adfs: fix filename handling + - sparc32: add offset in pci_map_sg() + - cdrom: set default timeout to 7 seconds + - [SCSI] qla1280 command timeout + - [SCSI] qla1280 bus reset typo + - [Bluetooth] Check if DLC is still attached to the TTY + - [Bluetooth] Fix uninitialized return value for RFCOMM sendmsg() + - [Bluetooth] Return EINPROGRESS for non-blocking socket calls + - [Bluetooth] Handle command complete event for exit periodic inquiry + - [Bluetooth] Fix compat ioctl for BNEP, CMTP and HIDP + - [Bluetooth] Add locking for bt_proto array manipulation + - i386: fix CPU hotplug with 2GB VMSPLIT + + [ dann frazier ] + * Fix raid1 recovery (closes: #406181) + + [ Jurij Smakov ] + * Add dtlb-prot-bug-niagara.patch by David Miller, fixing the bug in the + Niagara's DTLB-PROT trap. + + [ Bastian Blank ] + * i386: Add amd64 image. (closes: #379090) + + -- Bastian Blank Fri, 2 Feb 2007 12:50:35 +0100 + +linux-2.6 (2.6.18.dfsg.1-9) unstable; urgency=low + + [ Martin Michlmayr ] + * arm/iop32x: Enable CONFIG_IP_NF_CONNTRACK_EVENTS and _NETLINK. + * arm/ixp4xx: Enable some more I2C sensor modules. + * arm/ixp4xx: Enable CONFIG_USB_NET_RNDIS_HOST. + * arm/footbridge: Enable CONFIG_NATSEMI. + * Revert mm/msync patches because they cause filesystem corruption + (closes: #401006, #401980, #402707) ... + * ... and add an alternative msync patch from Hugh Dickins that + doesn't depend on the mm changes (closes: #394392). + * mips: provide pci_get_legacy_ide_irq needed by some IDE drivers + (see #404950). + * arm: Implement flush_anon_page(), which is needed for FUSE + (closes: #402876) and possibly dm-crypt/LUKS (see #403426). + * arm: Turn off PCI burst on the Cyber2010, otherwise X11 on + Netwinder will crash. + * arm/iop32x: Enable CONFIG_IEEE80211_SOFTMAC and drivers based + on it. + * arm/ixp4xx: Upgrade to version 0.3.1 of the IXP4xx NPE Ethernet + driver. This version fixes stuck connections, e.g. with scp and + NFS (closes: #404447). + * arm/ixp4xx: Enable CONFIG_VIDEO_CPIA_USB. + * arm/ixp4xx: Enable CONFIG_ISCSI_TCP. + * arm/iop32x: Likewise. + + [ Bastian Blank ] + * Bump ABI to 4. + * Update vserver patch to 2.0.2.2-rc9. (closes: #402743, #403790) + * Update xen patch to changeset 36186 from Fedora 2.6.18 branch. + * i386/xen: Build only the pae version. (closes: #390862) + * hppa: Override host type when necessary. + * Fix tg3 reset. (closes: #405085) + + [ dann frazier ] + * Fix potential fragmentation attacks in ip6_tables (CVE-2006-4572) + * Backport a number of fixes for the cciss driver + - Fix a bug with 1TB disks caused by converting total_size to an int + - Claim devices that are of the HP RAID class and have a valid cciss sig + - Make NR_CMDS a per-controller define - most can do 1024 commands, but + the E200 family can only support 128 + - Change the SSID on the E500 as a workaround for a firmware bug + - Disable prefetch on the P600 controller. An ASIC bug may result in + prefetching beyond the end of physical memory + - Increase blk_queue_max_sectors from 512 to 2048 to increase performance + - Map out more memor for the PCI config table, required to reach offset + 0x214 to disable DMA on the P600 + - Set a default raid level on a volume that either does not support + reading the geometry or reports an invalid geometry for whatever reason + to avoid problems with buggy firmware + - Revert change that replaed XFER_READ/XFER_WRITE macros with + h->cciss_read/h->cciss_write that caused command timeouts on older + controllers on ia32 (closes: #402787) + * Fix mincore hang (CVE-2006-4814) + * ia64: turn on IOC4 modules for SGI Altix systems. Thanks to Stephane Larose + for suggesting this. + * Add versioned build dep on findutils to make sure the system find command + supports the -execdir action (closes: #405150) + * Hardcode the output of the scripts under arch/ia64/scripts as executed + in an etch environment so that we can build out of tree modules correctly + (closes: #392592) + * Update unusual_devs entry for ipod to fix an eject issue (closes: #406124) + * Re-add verify_pmtmr_rate, resolving problems seen on older K6 ASUS + boards where the ACPI PM timer runs too fast (closes: #394753) + * Avoid condition where /proc/swaps header may not be printed + (closes: #292318) + * [hppa] disable XFS until it works (closes: #350482) + + [ Norbert Tretkowski ] + * libata: handle 0xff status properly. (closes: #391867) + * alpha: enabled CONFIG_SCSI_ARCMSR. (closes: #401187) + * removed BROKEN_ON_SMP dependency from I2C_ELEKTOR. (closes: #402253) + + [ Christian T. Steigies ] + * m68k/atari: enable keyboard, mouse and fb drivers + * m68k/atari: fixes for ethernec and video driver by Michael Schmitz + * m68k/atari: fixes for scsi driver by Michael Schmitz + * m68k/mac: fixes for mace and cuda driver by Finn Thain + * m68k/atari: fixes for ide driver by Michael Schmitz + * m68k/atari: fixes for ide driver by Michael Schmitz + * m68k/atari: fixes for ethernec and atakeyb driver by Michael Schmitz, build ethernec as module + * m68k/mac: fixes for mace and adb driver by Finn Thain + + [ maximilian attems ] + * Add stable release 2.6.18.6: + - EBTABLES: Fix wraparounds in ebt_entries verification. + - EBTABLES: Verify that ebt_entries have zero ->distinguisher. + - EBTABLES: Deal with the worst-case behaviour in loop checks. + - EBTABLES: Prevent wraparounds in checks for entry components' sizes. + - skip data conversion in compat_sys_mount when data_page is NULL + - bonding: incorrect bonding state reported via ioctl + - x86-64: Mark rdtsc as sync only for netburst, not for core2 + (closes: #406767) + - dm crypt: Fix data corruption with dm-crypt over RAID5 (closes: #402812) + - forcedeth: Disable INTx when enabling MSI in forcedeth + - PKT_SCHED act_gact: division by zero + - XFRM: Use output device disable_xfrm for forwarded packets + - IPSEC: Fix inetpeer leak in ipv4 xfrm dst entries. + - V4L: Fix broken TUNER_LG_NTSC_TAPE radio support + - m32r: make userspace headers platform-independent + - IrDA: Incorrect TTP header reservation + - SUNHME: Fix for sunhme failures on x86 + - Bluetooth: Add packet size checks for CAPI messages (CVE-2006-6106) + - softmac: remove netif_tx_disable when scanning + - DVB: lgdt330x: fix signal / lock status detection bug + - dm snapshot: fix freeing pending exception + - NET_SCHED: policer: restore compatibility with old iproute binaries + - NETFILTER: ip_tables: revision support for compat code + - ARM: Add sys_*at syscalls + - ieee1394: ohci1394: add PPC_PMAC platform code to driver probe + - softirq: remove BUG_ONs which can incorrectly trigger + * Hand-picked from stable release 2.6.16.30: + - [PPPOE]: Advertise PPPoE MTU + * Hand-picked from stable release 2.6.16.31: + - [NETFILTER]: Fix ip6_tables extension header bypass bug (CVE-2006-4572) + - fix RARP ic_servaddr breakage + * Hand-picked from stable release 2.6.16.32: + - drivers/telephony/ixj: fix an array overrun + - flush D-cache in failure path + * Hand-picked from stable release 2.6.16.33: + - Add new PHY to sis900 supported list + - ipmi_si_intf.c: fix "&& 0xff" typos + - drivers/scsi/psi240i.c: fix an array overrun + * Hand-picked from stable release 2.6.16.34: + - [IPX]: Annotate and fix IPX checksum + - [IGMP]: Fix IGMPV3_EXP() normalization bit shift value. + * Hand-picked from stable release 2.6.16.35: + - sgiioc4: Disable module unload + - Fix a masking bug in the 6pack driver. + - drivers/usb/input/ati_remote.c: fix cut'n'paste error + - proper flags type of spin_lock_irqsave() + * Hand-picked from stable release 2.6.16.37: + - [CRYPTO] sha512: Fix sha384 block size + - [SCSI] gdth: Fix && typos + - Fix SUNRPC wakeup/execute race condition + * Enable DEBUG_FS for usbmon in generic config. Don't disable it on alpha, + amd64, hppa and ia64. (closes: 378542) + * Backport a number of upstream fixes for the r8169 driver, needed for + network performance (closes: 388870, 400524) + - r8169: more alignment for the 0x8168 + - r8169: phy program update + - r8169: more magic during initialization of the hardware + - r8169: perform a PHY reset before any other operation at boot time + - r8169: Fix iteration variable sign + - r8169: remove extraneous Cmd{Tx/Rx}Enb write + * sound: hda: detect ALC883 on MSI K9A Platinum motherboards (MS-7280) + patch from Leonard Norrgard + * tulip: Add i386 specific patch to remove duplicate pci ids. + Thanks Jurij Smakov (closes: #334104, #405203) + * amd64, i386: Disable SK98LIN as SKGE is the modern capable driver. + (closes: 405196) + * Backout net-bcm43xx_netdev_watchdog.patch and push 2.6.18.2 fix. + (closes: 402475) + + [ Jurij Smakov ] + * Add bugfix/sparc/isa-dev-no-reg.patch to make sure that + isa_dev_get_resource() can deal with devices which do not have a 'reg' + PROM property. Failure to handle such devices properly resulted in an + oops during boot on Netra X1. Thanks to Richard Mortimer for debugging + and patch. (closes: #404216) + * Add bugfix/sparc/ehci-hub-contol-alignment.patch to prevent unaligned + memory accesses in ehci-hub-control() by adding an alignment attribute + to the tbuf array declaration. Thanks to David Miller for the patch. + + [ Sven Luther ] + * [powerpc] Enable CONFIG_PMAC_BACKLIGHT_LEGACY (Closes: #407671). + + -- Bastian Blank Wed, 24 Jan 2007 13:21:51 +0100 + +linux-2.6 (2.6.18-8) unstable; urgency=low + + * Fix relations in the generated control file. (closes: #400544) + * Add stable release 2.6.18.4: + - bridge: fix possible overflow in get_fdb_entries (CVE-2006-5751) + * Add stable release 2.6.18.5: + - pcmcia: fix 'rmmod pcmcia' with unbound devices + - BLUETOOTH: Fix unaligned access in hci_send_to_sock. + - alpha: Fix ALPHA_EV56 dependencies typo + - TG3: Add missing unlock in tg3_open() error path. + - softmac: fix a slab corruption in WEP restricted key association + - AGP: Allocate AGP pages with GFP_DMA32 by default + - V4L: Do not enable VIDEO_V4L2 unconditionally + - bcm43xx: Drain TX status before starting IRQs + - fuse: fix Oops in lookup + - UDP: Make udp_encap_rcv use pskb_may_pull + - NETFILTER: Missing check for CAP_NET_ADMIN in iptables compat layer + - NETFILTER: ip_tables: compat error way cleanup + - NETFILTER: ip_tables: fix module refcount leaks in compat error paths + - NETFILTER: Missed and reordered checks in {arp,ip,ip6}_tables + - NETFILTER: arp_tables: missing unregistration on module unload + - NETFILTER: Kconfig: fix xt_physdev dependencies + - NETFILTER: xt_CONNSECMARK: fix Kconfig dependencies + - NETFILTER: H.323 conntrack: fix crash with CONFIG_IP_NF_CT_ACCT + - IA64: bte_unaligned_copy() transfers one extra cache line. + - x86 microcode: don't check the size + - scsi: clear garbage after CDBs on SG_IO + - IPV6: Fix address/interface handling in UDP and DCCP, according to the scoping architecture. + * Revert abi changing patch from 2.6.18.5. + + -- Bastian Blank Sun, 10 Dec 2006 17:51:53 +0100 + +linux-2.6 (2.6.18-7) unstable; urgency=low + + [ Bastian Blank ] + * Emit conflict lines for initramfs generators. (closes: #400305) + * Update vserver patch to 2.0.2.2-rc8. + * s390: Add patch to fix posix types. + + [ Martin Michlmayr ] + * r8169: Add an option to ignore parity errors. + * r8169: Ignore parity errors on the Thecus N2100. + * rtc: Add patch from Riku Voipio to get RS5C372 going on the N2100. + * arm/iop32x: Build RS5C372 support into the kernel. + + [ maximilian attems ] + * hfs: Fix up error handling in HFS. (MOKB-14-11-2006) + * sata: Avoid null pointer dereference in SATA Promise. + * cifs: Set CIFS preferred IO size. + + [ Jurij Smakov ] + * Add bugfix/sunhme-pci-enable.patch, fixing the failure of sunhme + driver on x86/PCI hosts due to missing pci_enable_device() and + pci_set_master() calls, lost during code refactoring upstream. + (closes: #397460) + + -- Bastian Blank Mon, 4 Dec 2006 15:20:30 +0100 + +linux-2.6 (2.6.18-6) unstable; urgency=low + + [ maximilian attems ] + * Enable the new ACT modules globally. They were already set for amd64, hppa + and mips/mipsel - needed by newer iproute2. (closes: #395882, #398172) + * Fix msync() for LSB 3.1 compliance, backport fedora patches from 2.6.19 + - mm: tracking shared dirty pages + - mm: balance dirty pages + - mm: optimize the new mprotect() code a bit + - mm: small cleanup of install_page() + - mm: fixup do_wp_page() + - mm: msync() cleanup (closes: #394392) + * [amd64,i386] Enable CONFIG_USB_APPLETOUCH=m (closes: #382298) + * Add stable release 2.6.18.3: + - x86_64: Fix FPU corruption + - e1000: Fix regression: garbled stats and irq allocation during swsusp + - POWERPC: Make alignment exception always check exception table + - usbtouchscreen: use endpoint address from endpoint descriptor + - fix via586 irq routing for pirq 5 + - init_reap_node() initialization fix + - CPUFREQ: Make acpi-cpufreq unsticky again. + - SPARC64: Fix futex_atomic_cmpxchg_inatomic implementation. + - SPARC: Fix missed bump of NR_SYSCALLS. + - NET: __alloc_pages() failures reported due to fragmentation + - pci: don't try to remove sysfs files before they are setup. + - fix UFS superblock alignment issues + - NET: Set truesize in pskb_copy + - block: Fix bad data direction in SG_IO (closes: #394690) + - cpqarray: fix iostat + - cciss: fix iostat + - Char: isicom, fix close bug + - TCP: Don't use highmem in tcp hash size calculation. + - S390: user readable uninitialised kernel memory, take 2. + - correct keymapping on Powerbook built-in USB ISO keyboards + - USB: failure in usblp's error path + - Input: psmouse - fix attribute access on 64-bit systems + - Fix sys_move_pages when a NULL node list is passed. + - CIFS: report rename failure when target file is locked by Windows + - CIFS: New POSIX locking code not setting rc properly to zero on successful + - Patch for nvidia divide by zero error for 7600 pci-express card + (maybe fixes 398258) + - ipmi_si_intf.c sets bad class_mask with PCI_DEVICE_CLASS + + [ Steve Langasek ] + * [alpha] new titan-video patch, for compatibility with TITAN and similar + systems with non-standard VGA hose configs + * [alpha] bugfix for srm_env module from upstream (Jan-Benedict Glaw), + makes the module compatible with the current /proc interface so that + reads no longer return EFAULT. (closes: #353079) + * Bump ABI to 3 for the msync fixes above. + + [ Martin Michlmayr ] + * arm: Set CONFIG_BINFMT_MISC=m + * arm/ixp4xx: Set CONFIG_ATM=m (and related modules) so CONFIG_USB_ATM has + an effect. + * arm/iop32x: Likewise. + * arm/s3c2410: Unset CONFIG_PM_LEGACY. + * arm/versatile: Fix Versatile PCI config byte accesses + * arm/ixp4xx: Swap the disk 1 and disk 2 LED definitions so they're right. + * mipsel/r5k-cobalt: Unset CONFIG_SCSI_SYM53C8XX_2 because the timeout is + just too long. + * arm/ixp4xx: Enable more V4L USB devices. + + [ dann frazier ] + * Backport various SCTP changesets from 2.6.19, recommended by Vlad Yasevich + (closes: #397946) + * Add a "Scope of security support" section to README.Debian, recommended + by Moritz Muehlenhoff + + [ Thiemo Seufer ] + * Enable raid456 for mips/mipsel qemu kernel. + + [ dann frazier ] + * The scope of the USR-61S2B unusual_dev entry was tightened, but too + strictly. Loosen it to apply to additional devices with a smaller bcd. + (closes: #396375) + + [ Sven Luther ] + * Added support for TI ez430 development tool ID in ti_usb. + Thanks to Oleg Verych for providing the patch. + + [ Christian T. Steigies ] + * Added support for Atari EtherNEC, Aranym, video, keyboard, mouse, and serial + by Michael Schmitz + + [ Bastian Blank ] + * [i386] Reenable AVM isdn card modules. (closes: #386872) + + -- Bastian Blank Tue, 21 Nov 2006 11:28:09 +0100 + +linux-2.6 (2.6.18-5) unstable; urgency=low + + [ maximilian attems ] + * [s390] readd the fix for "S390: user readable uninitialised kernel memory + (CVE-2006-5174)" + * [s390] temporarily add patch queued for 2.6.18.3 fixing 32 bit opcodes and + instructions. + + [ Thiemo Seufer ] + * Fix build failure of hugetlbfs (closes: #397139). + * Add kernel configuration for qemu's mips/mipsel emulation, thanks to + Aurelien Jarno. + + [ Bastian Blank ] + * Update vserver patch to 2.0.2.2-rc6. + * Update xen parts for vserver. (closes: #397281) + + [ dann frazier ] + * [ia64] Move to upstream version of sal-flush-fix patch, which is slightly + different than the early version added in 2.6.18-3. + + [ Frederik Schüler ] + * [i386] Acticate CONFIG_SX for all flavours. (closes: #391275) + + [ Steve Langasek ] + * [alpha] new asm-subarchs patch: tell the compiler that we're + deliberately emitting ev56 or ev6 instructions, so that this code + will still compile without having to cripple gcc-4.1's checking of + whether the correct instruction set is used. Closes: #397139. + + [ Martin Michlmayr ] + * arm/ixp4xx: Enable CONFIG_USB_ATM. + * arm/iop32x: Enable CONFIG_PPPOE. + * arm/iop32x: Enable CONFIG_USB_ATM. + + -- Bastian Blank Wed, 8 Nov 2006 17:15:55 +0100 + +linux-2.6 (2.6.18-4) unstable; urgency=low + + [ Norbert Tretkowski ] + * [alpha] Switched to gcc-4.1. + + [ Jurij Smakov ] + * [sparc] Remove sparc64-atyfb-xl-gr.patch, it does more harm than + good in 2.6.18. + * [sparc] Add bugfix/sparc/compat-alloc-user-space-alignment.patch + (thanks to David Miller) to make sure that compat_alloc_user_space() + always returns memory aligned on a 8-byte boundary on sparc. This + prevents a number of unaligned memory accesses, like the ones in + sys_msgrcv() and compat_sys_msgrcv(), triggered every 5 seconds whenever + fakeroot is running. + * [sparc] Add bugfix/sparc/bus-id-size.patch (thanks to David Miller) + to ensure that the size of the strings stored in the bus_id field of + struct device never exceeds the amount of memory allocated for them + (20 bytes). It fixes the situations in which storing longer device + names in this field would cause corruption of adjacent memory regions. + (closes: #394697). + * [sparc] Add bugfix/sparc/sunblade1k-boot-fix.patch (thanks to David + Miller) to fix a boottime crash on SunBlade1000. + * [sparc] Add bugfix/sparc/t1k-cpu-lockup.patch (thanks to David Miller) + to prevent soft CPU lockup on T1000 servers, which can be triggered from + userspace, resulting in denial of service. + + [ Martin Michlmayr ] + * arm/iop32x: Fix the interrupt of the 2nd Ethernet slot on N2100. + * arm/iop32x: Allow USB and serial to co-exist on N2100. + * arm/ixp4xx: Add clocksource for Intel IXP4xx platforms. + * arm: Enable CONFIG_AUDIT=y again. + * arm/ixp4xx: Add the IXP4xx Ethernet driver. + * arm/ixp4xx: Build LED support into the kernel. + * Add a driver for Fintek F75375S/SP and F75373. + * arm/iop32x: Build F75375S/SP support in. + * arm/iop32x: Fix the size of the RedBoot config partition. + + [ maximilian attems ] + * Add netpoll leak fix. + * Add upstream forcedeth swsusp support. + * r8169: PCI ID for Corega Gigabit network card. + * r8169: the MMIO region of the 8167 stands behin BAR#1. + * r8169: Add upstream fix for infinite loop during hotplug. + * Bump build-dependency on kernel-package to 10.063. + * r8169: pull revert mac address change support. + * bcm43xx: Add full netdev watchout timeout patch. (closes: 392065) + Thanks Sjoerd Simons for the testing. + * Add stable release 2.6.18.2: + - Remove not yet released, revert the included patches. + - Keep aboves bcm43xx fix, it's more complete. + - Watchdog: sc1200wdt - fix missing pnp_unregister_driver() + - fix missing ifdefs in syscall classes hookup for generic targets + - JMB 368 PATA detection + - usbfs: private mutex for open, release, and remove + - sound/pci/au88x0/au88x0.c: ioremap balanced with iounmap + - x86-64: Fix C3 timer test + - Reintroduce NODES_SPAN_OTHER_NODES for powerpc + - ALSA: emu10k1: Fix outl() in snd_emu10k1_resume_regs() + - IB/mthca: Use mmiowb after doorbell ring + - SCSI: DAC960: PCI id table fixup + - ALSA: snd_rtctimer: handle RTC interrupts with a tasklet + - JFS: pageno needs to be long + - SPARC64: Fix central/FHC bus handling on Ex000 systems. + - SPARC64: Fix memory corruption in pci_4u_free_consistent(). + - SPARC64: Fix PCI memory space root resource on Hummingbird. + (closes: #392078) + - Fix uninitialised spinlock in via-pmu-backlight code. + - SCSI: aic7xxx: pause sequencer before touching SBLKCTL + - IPoIB: Rejoin all multicast groups after a port event + - ALSA: Dereference after free in snd_hwdep_release() + - rtc-max6902: month conversion fix + - NET: Fix skb_segment() handling of fully linear SKBs + - SCTP: Always linearise packet on input + - SCSI: aic7xxx: avoid checking SBLKCTL register for certain cards + - IPV6: fix lockup via /proc/net/ip6_flowlabel [CVE-2006-5619] + - fix Intel RNG detection + - ISDN: check for userspace copy faults + - ISDN: fix drivers, by handling errors thrown by ->readstat() + - splice: fix pipe_to_file() ->prepare_write() error path + - ALSA: Fix bug in snd-usb-usx2y's usX2Y_pcms_lock_check() + - ALSA: Repair snd-usb-usx2y for usb 2.6.18 + - PCI: Remove quirk_via_abnormal_poweroff + - Bluetooth: Check if DLC is still attached to the TTY + - vmscan: Fix temp_priority race + - Use min of two prio settings in calculating distress for reclaim + - __div64_32 for 31 bit. Fixes funny clock speed on hercules emulator. + (closes: 395247) + - DVB: fix dvb_pll_attach for mt352/zl10353 in cx88-dvb, and nxt200x + - fuse: fix hang on SMP + - md: Fix bug where spares don't always get rebuilt properly when they become live. + - md: Fix calculation of ->degraded for multipath and raid10 + - knfsd: Fix race that can disable NFS server. + - md: check bio address after mapping through partitions. + - fill_tgid: fix task_struct leak and possible oops + - uml: fix processor selection to exclude unsupported processors and features + - uml: remove warnings added by previous -stable patch + - Fix sfuzz hanging on 2.6.18 + - SERIAL: Fix resume handling bug + - SERIAL: Fix oops when removing suspended serial port + - sky2: MSI test race and message + - sky2: pause parameter adjustment + - sky2: turn off PHY IRQ on shutdown + - sky2: accept multicast pause frames + - sky2: GMAC pause frame + - sky2: 88E803X transmit lockup (2.6.18) + - tcp: cubic scaling error + - mm: fix a race condition under SMC + COW + - ALSA: powermac - Fix Oops when conflicting with aoa driver + - ALSA: Fix re-use of va_list + - posix-cpu-timers: prevent signal delivery starvation + - NFS: nfs_lookup - don't hash dentry when optimising away the lookup + - uml: make Uml compile on FC6 kernel headers + - Fix potential interrupts during alternative patching + * Backport atkbd - supress "too many keys" error message. + * [s390] Revert temporarly 2.6.18.1 "S390: user readable uninitialised + kernel memory (CVE-2006-5174)" fix as it causes ftfbs + + [ Sven Luther ] + * [powerpc] Added exception alignement patch from Benjamin Herrenschmidt. + + [ Frederik Schüler ] + * Bump ABI to 2. + * Update vserver patch to 2.0.2.2-rc4. + + [ Thiemo Seufer ] + * Add patches from linux-mips.org's 2.6.18-stable branch: + - bugfix/copy-user-highpage.patch, needed for cache alias handling + on mips/mipsel/hppa. + - bugfix/mips/syscall-wiring.patch, fixes TLS register access, and + n32 rt_sigqueueinfo. + - bugfix/mips/sb1-flush-cache-data-page.patch, missing cache flush + on SB-1. + - bugfix/mips/trylock.patch, fix trylock implementation for R1x000 + and R3xxx. + - bugfix/mips/smp-cpu-bringup.patch, correct initialization of + non-contiguous CPU topology. + - bugfix/mips/header-exports.patch, clean up userland exports of + kernel headers. + - bugfix/mips/sb1-interrupt-handler.patch, fix broken interrupt + routing on SB-1. + - bugfix/mips/cache-alias.patch, fixes #387498 for mips/mipsel. + - bugfix/mips/ip22-zilog-console.patch, fix long delays seen with + SGI ip22 serial console. + - bugfix/mips/signal-handling.patch, fixes a signal handling race + condition shown with gdb. + - bugfix/mips/sb1-duart-tts.patch, replaces mips-sb1-duart-tts.patch, + use standard Linux names for SB-1 consoles. + - bugfix/mips/wait-race.patch, correct behaviour of the idle loop. + - bugfix/mips/sgi-ioc3.patch, checksumming fix for IOC3 network + driver. + - features/mips/qemu-kernel.patch, support for the mips/mipsel + machine emulated by Qemu. + - features/mips/backtrace.patch, reimplementation of stack analysis + and backtrace printing, useful for in-kernel debugging. + - bugfix/mips/dec-scsi.patch, replaces mips-dec-scsi.patch, fixes DSP + SCSI driver for DECstations. + - bugfix/mips/dec-serial.patch, replaces mips-dec-serial.patch, fix + serial console handling on DECstations. + + -- Frederik Schüler Sat, 4 Nov 2006 18:45:02 +0100 + +linux-2.6 (2.6.18-3) unstable; urgency=low + + [ Bastian Blank ] + * Fix home of patch apply script. + * Unify CPUSET option. (closes: #391931) + * Support xen version 3.0.3-1. + * Add AHCI suspend support. + * Add patch to support bindmount without nodev on vserver. + * Update fedora xen patch to changeset 36252. + + [ Steve Langasek ] + * [alpha] restore alpha-prctl.patch, which keeps disappearing every time + there's a kernel upgrade :/ + + [ Frederik Schüler ] + * Activate CONFIG_NET_CLS_* globaly. (Closes: #389918) + * Make CONFIG_EFI_VARS modular on i386. (Closes: #381951) + * Activate CONFIG_SCSI_ARCMSR on amd64, powerpc, sparc too. + * [vserver] Activate HARDCPU and HARDCPU_IDLE. + * [vserver] Upgrade to vs2.0.2.2-rc2. + + [ maximilian attems ] + * [mipsel] Disable CONFIG_SECURITY_SECLVL on DECstations too. + * Add stable release 2.6.18.1: + - add utsrelease.h to the dontdiff file + - V4L: copy-paste bug in videodev.c + - block layer: elv_iosched_show should get elv_list_lock + - NETFILTER: NAT: fix NOTRACK checksum handling + - bcm43xx: fix regressions in 2.6.18 (Closes: #392065) + - x86-64: Calgary IOMMU: Fix off by one when calculating register space + location + - ide-generic: jmicron fix + - scx200_hrt: fix precedence bug manifesting as 27x clock in 1 MHz mode + - invalidate_inode_pages2(): ignore page refcounts + - rtc driver rtc-pcf8563 century bit inversed + - fbdev: correct buffer size limit in fbmem_read_proc() + - mm: bug in set_page_dirty_buffers + - TCP: Fix and simplify microsecond rtt sampling + - MD: Fix problem where hot-added drives are not resynced. + - IPV6: Disable SG for GSO unless we have checksum + - PKT_SCHED: cls_basic: Use unsigned int when generating handle + - sata_mv: fix oops + - [SPARC64]: Kill bogus check from bootmem_init(). + - IPV6: bh_lock_sock_nested on tcp_v6_rcv + - [CPUFREQ] Fix some more CPU hotplug locking. + - SPARC64: Fix serious bug in sched_clock() on sparc64 + - Fix VIDIOC_ENUMSTD bug + - load_module: no BUG if module_subsys uninitialized + - i386: fix flat mode numa on a real numa system + - cpu to node relationship fixup: map cpu to node + - cpu to node relationship fixup: acpi_map_cpu2node + - backlight: fix oops in __mutex_lock_slowpath during head + /sys/class/graphics/fb0/* + - do not free non slab allocated per_cpu_pageset + - rtc: lockdep fix/workaround + - powerpc: Fix ohare IDE irq workaround on old powermacs + - sysfs: remove duplicated dput in sysfs_update_file + - powerpc: fix building gdb against asm/ptrace.h + - Remove offsetof() from user-visible + - Clean up exported headers on CRIS + - Fix v850 exported headers + - Don't advertise (or allow) headers_{install,check} where inappropriate. + - Remove UML header export + - Remove ARM26 header export. + - Fix H8300 exported headers. + - Fix m68knommu exported headers + - Fix exported headers for SPARC, SPARC64 + - Fix 'make headers_check' on m32r + - Fix 'make headers_check' on sh64 + - Fix 'make headers_check' on sh + - Fix ARM 'make headers_check' + - One line per header in Kbuild files to reduce conflicts + - sky2 network driver device ids + - sky2: tx pause bug fix + - netdrvr: lp486e: fix typo + - mv643xx_eth: fix obvious typo, which caused build breakage + - zone_reclaim: dynamic slab reclaim + - Fix longstanding load balancing bug in the scheduler + - jbd: fix commit of ordered data buffers + - ALSA: Fix initiailization of user-space controls + - USB: Allow compile in g_ether, fix typo + - IB/mthca: Fix lid used for sending traps + - S390: user readable uninitialised kernel memory (CVE-2006-5174) + - zd1211rw: ZD1211B ASIC/FWT, not jointly decoder + - V4L: pvrusb2: Limit hor res for 24xxx devices + - V4L: pvrusb2: Suppress compiler warning + - V4L: pvrusb2: improve 24XXX config option description + - V4L: pvrusb2: Solve mutex deadlock + - DVB: cx24123: fix PLL divisor setup + - V4L: Fix msp343xG handling regression + - UML: Fix UML build failure + - uml: use DEFCONFIG_LIST to avoid reading host's config + - uml: allow using again x86/x86_64 crypto code + - NET_SCHED: Fix fallout from dev->qdisc RCU change + * Add backported git patch remving BSD secure level - request by the + Debian Security Team. (closes: 389282) + * [powerpc] Add DAC960-ipr PCI id table fixup. + * [powerpc] Fix uninitialised spinlock in via-pmu-backlight code. + * Fix serial_cs resume handling. + * Fix oops when removing suspended serial port. + * Check if DLC is still attached to the TTY. + * Add fedora backport of i965 DRM support. + + [ Martin Michlmayr ] + * [mips] Apply some patches from linux-mips' linux-2.6.18-stable GIT tree: + - The o32 fstatat syscall behaves differently on 32 and 64 bit kernels + - fstatat syscall names + - BCM1480: Mask pending interrupts against c0_status.im. + - Cobalt: Time runs too quickly + - Show actual CPU information in /proc/cpuinfo + - Workaround for bug in gcc -EB / -EL options + - Do not use -msym32 option for modules + - Fix O32 personality(2) call with 0xffffffff argument + - Use compat_sys_mount + + [ dann frazier ] + * [ia64]: Fix booting on HP cell systems, thanks to Troy Heber + - Enable CONFIG_HUGETLBFS + - bugfix/ia64/sal-flush-fix.patch: delay sal cache flush + * bugfix/sky2-receive-FIFO-fix.patch: fix sky2 hangs on some chips + Thanks to Stephen Hemminger for the patch. (Closes: #391382) + * features/all/drivers/cciss-support-for-gt-2TB-volumes.patch: + Add support for > 2TB volumes + * bugfix/sym2-dont-claim-raid-devs.patch: Prevent cpqarray/sym2 conflict + by telling sym2 not to claim raid devices. (Closes: #391384) + + [ Sven Luther ] + * [powerpc] Added AMD74xx driver module to the powerpc64 flavour + (Closes: #391861). + + [ Kyle McMartin ] + * [hppa] Force CROSS_COMPILE=hppa64-linux-gnu- (closes: #389296) + + -- Bastian Blank Sat, 21 Oct 2006 15:59:43 +0200 + +linux-2.6 (2.6.18-2) unstable; urgency=low + + [ Bastian Blank ] + * hppa: Fix compiler dependencies. (closes: #389296) + * Make cfq the default io scheduler. + * Add arcmsr (Areca) driver. + * powerpc/prep: Fix compatibility asm symlink. + * m68k: Disable initramfs support. + + [ Kyle McMartin ] + * hppa: Add parisc patchset. + + [ Norbert Tretkowski ] + * [alpha] Workaround undefined symbols by setting CONFIG_SCSI=y for smp flavour. + (closes: #369517) + + [ Christian T. Steiges ] + * m68k: Update patches for 2.6.18. + * m68k: Re-Add m68k-as and m68k-macro patch which allow building with current binutils. + * m68k: disable CONFIG_AUDIT for m68k. + * m68k/mac: add m68k-no-backlight and m68k-fbcon patch. + * m68k/mac: enable SONIC, disable all ADB but CUDA. + + [ Jurij Smakov ] + * Add bugfix/proc-fb-reading.patch to fix the inconsistent behaviour + of /proc/fb. (Closes: #388815) + * sparc: Enable vserver flavour for sparc64. (Closes: #386656) + + -- Bastian Blank Fri, 29 Sep 2006 14:12:19 +0200 + +linux-2.6 (2.6.18-1) unstable; urgency=low + + The unpruned release + + [ Martin Michlmayr ] + * Bump build-dependency on kernel-package to 10.054. + * arm/iop32x: Build ext2/3 as modules. + * arm/iop32x: Disable CONFIG_EMBEDDED. + * mipsel/r5k-cobalt: Enable ISDN. + * arm/footbridge: Enable the CIFS module (closes: #274808). + * arm/nslu2: Drop flavour since this machine is supported by arm/ixp4xx. + * arm: Make get_unaligned() work with const pointers and GCC 4.1. + * mipsel/r5k-cobalt: Enable CONFIG_BONDING as a module. + * arm/iop32x: Likewise. + * arm/ixp4xx: Likewise. + * arm: Disable CONFIG_AUDIT for now since it's broken. + + [ Sven Luther ] + * [powerpc] Enabled the -prep flavour. (Closes: #359025) + * [powerpc] The sisfb framebuffer device is now builtin. + * [powerpc] Updated the powerpc serial patch. This fixes the XServe serial + port, but at the cost powermac pcmcia serial cards support. + Thanks go to Mark Hymers for providing the patch. + (Closes: #364637, #375194) + * [powerpc] Added patch to fix oldworld/quik booting. + Thanks fo to Christian Aichinger for investigating to Benjamin + Herrenschmidt for providing the patch. (Closes: #366620, #375035). + * [powerpc] Fixes hvc_console caused suspsend-to-disk breakage. Thanks to + Andrew Morton for providing the patch. (Closes: #387178) + * [powerpc] Disabled mv643xx_eth on powerpc64 flavours, as there never was a + Marvell Discovery northbrige for 64bit powerpc cpus. + + [ Frederik Schüler ] + * Remove obsolete options from amd64 and i386 configs. + * Deactivate EVBUG. + * Make PARPORT options global. + * [i386] Add class definition for 486 flavour. + + [ maximilian attems ] + * Enable CONFIG_PRINTER=m for all powerpc flavours. + * Enable the new alsa CONFIG_SND_AOA framework for powerpc. + * Add the merged advansys pci table patch. + + [ Bastian Blank ] + * hppa: Use gcc-4.1. + * Only provide 16 legacy ptys. + + [ Norbert Tretkowski ] + * [alpha] Updated configs. + * [alpha] Disabled CONFIG_AUDIT, broken. + * [alpha] Added vserver flavour. + + -- Bastian Blank Sun, 24 Sep 2006 15:55:37 +0200 + +linux-2.6 (2.6.17-9) unstable; urgency=medium + + [ Bastian Blank ] + * Update vserver patch to 2.0.2. + - Fix possible priviledge escalation in remount code. (CVE-2006-4243) + + [ Frederik Schüler ] + * Add stable release 2.5.17.12: + - sky2: version 1.6.1 + - sky2: fix fiber support + - sky2: MSI test timing + - sky2: use dev_alloc_skb for receive buffers + - sky2: clear status IRQ after empty + - sky2: accept flow control + - dm: Fix deadlock under high i/o load in raid1 setup. + - Remove redundant up() in stop_machine() + - Missing PCI id update for VIA IDE + - PKTGEN: Fix oops when used with balance-tlb bonding + - PKTGEN: Make sure skb->{nh,h} are initialized in fill_packet_ipv6() too. + - Silent data corruption caused by XPC + - uhci-hcd: fix list access bug + - binfmt_elf: fix checks for bad address + - [s390] bug in futex unqueue_me + - fcntl(F_SETSIG) fix + - IPV6 OOPS'er triggerable by any user + - SCTP: Fix sctp_primitive_ABORT() call in sctp_close(). + - SPARC64: Fix X server crashes on sparc64 + - TG3: Disable TSO by default + - dm: mirror sector offset fix + - dm: fix block device initialisation + - dm: add module ref counting + - dm: fix mapped device ref counting + - dm: add DMF_FREEING + - dm: change minor_lock to spinlock + - dm: move idr_pre_get + - dm: fix idr minor allocation + - dm snapshot: unify chunk_size + - Have ext2 reject file handles with bad inode numbers early. + - Allow per-route window scale limiting + - bridge-netfilter: don't overwrite memory outside of skb + - fix compilation error on IA64 + - Fix output framentation of paged-skbs + - spectrum_cs: Fix firmware uploading errors + - TEXTSEARCH: Fix Boyer Moore initialization bug + * Add stable release 2.6.17.13: + - lib: add idr_replace + - pci_ids.h: add some VIA IDE identifiers + * Remove patches merged upstream: + - s390-kernel-futex-barrier.patch + * Unpatch ia64-mman.h-fix.patch + + -- Bastian Blank Wed, 13 Sep 2006 14:54:14 +0200 + +linux-2.6 (2.6.17-8) unstable; urgency=low + + [ Martin Michlmayr ] + * arm/ixp4xx: Enable CONFIG_W1. + + [ dann frazier ] + * sound-pci-hda-mac-mini-quirks.diff, sound-pci-hda-intel-d965.diff + sound-pci-hda-mac-mini-intel945.diff: + Updates to patch_sigmatel.c to add x86 mac-mini sound support + Thanks to Matt Kraai. (closes: #384972) + + [ Kyle McMartin ] + * hppa: Re-enable pa8800 fixing patches from James Bottomley. + Pulled fresh from parisc-linux git tree. + * ia64: Pull in compile-failure fix from Christian Cotte-Barrot. + Pulled from linux-ia64 mailing list. Fix is correct. + * hppa/alpha/mips: Fix compile-failure due to missing arch_mmap_check. Patch sent + upstream to stable@kernel.org. + + [ dann frazier ] + * sym2: only claim "Storage" class devices - the cpqarray driver should be + used for 5c1510 devices in RAID mode. (closes: #380272) + + [ Bastian Blank ] + * Backport change to allow all hypercalls for xen. + + -- Bastian Blank Thu, 31 Aug 2006 12:12:51 +0200 + +linux-2.6 (2.6.17-7) unstable; urgency=low + + [ Martin Michlmayr ] + * arm/iop32x: Enable CONFIG_BLK_DEV_OFFBOARD. + * arm/iop32x: Unset CONFIG_BLK_DEV_AMD74XX since it fails on ARM + with "Unknown symbol pci_get_legacy_ide_irq". + * arm/iop32x: Enable a number of MD and DM modules. + * arm/iop32x: Enable some more USB network modules. + * mipsel/r5k-cobalt: Increase 8250 NR_UARTS and RUNTIME_UARTS to 4. + * mipsel/r5k-cobalt: Fix MAC detection problem on Qube 2700. + + [ Bastian Blank ] + * Update vserver patch to 2.0.2-rc29. + * Add stable release 2.6.17.10: + - Fix possible UDF deadlock and memory corruption (CVE-2006-4145) + - elv_unregister: fix possible crash on module unload + - Fix sctp privilege elevation (CVE-2006-3745) + + [ maximilian attems ] + * Add RAM range to longclass for -bigmem. (closes: 382799) + * Add stable release 2.6.17.9: + - powerpc: Clear HID0 attention enable on PPC970 at boot time + (CVE-2006-4093) + * Add stable release 2.6.17.11: + - Fix ipv4 routing locking bug + - disable debugging version of write_lock() + - PCI: fix ICH6 quirks + - 1394: fix for recently added firewire patch that breaks things on ppc + - Fix IFLA_ADDRESS handling + - Fix BeFS slab corruption + - Fix timer race in dst GC code + - Have ext3 reject file handles with bad inode numbers early + - Kill HASH_HIGHMEM from route cache hash sizing + - sys_getppid oopses on debug kernel + - IA64: local DoS with corrupted ELFs + - tpm: interrupt clear fix + - ulog: fix panic on SMP kernels + - dm: BUG/OOPS fix + - MD: Fix a potential NULL dereference in md/raid1 + - ip_tables: fix table locking in ipt_do_table + - swsusp: Fix swap_type_of + - sky2: phy power problem on 88e805x + - ipx: header length validation needed + + [ Frederik Schüler ] + * Activate CONFIG_R8169_VLAN on amd64. (closes: #383707) + * Activate EFI boot support on i386. (closes: #381951) + + [ dann frazier ] + * Include module.lds in headers package if it exists. (closes: #342246) + * Add Apple MacBook product IDs to usbhid and set + CONFIG_USB_HIDINPUT_POWERBOOK=y on i386 and amd64. (closes: #383620) + + -- Bastian Blank Thu, 24 Aug 2006 15:54:51 +0000 + +linux-2.6 (2.6.17-6) unstable; urgency=low + + [ maximilian attems ] + * debian/arch/i386/defines: Activate 686-bigmem flavour for enterprise + usage. + * Add ubuntu pci table patch for scsi drivers advansys and fdomain. + + [ Martin Michlmayr ] + * arm/armeb: Use gcc-4.1. + * mips/mipsel: Use gcc-4.1. + * arm/ixp4xx: Update config based on the NSLU2 config. + * arm/s3c2410: Unset CONFIG_DEBUG_INFO. + * arm/iop32x: xscale: don't mis-report 80219 as an iop32x + * arm/iop32x: Add an MTD map for IOP3xx boards + * arm/iop32x: Add support for the Thecus N2100. + * arm/iop32x: Add support for the GLAN Tank. + * arm/iop32x: Add a flavour for IOP32x based machines. + + [ Bastian Blank ] + * Shrink short descriptions. + * Make gcc-4.1 the default compiler. + * [powerpc]: Use gcc-4.1. + * Move latest and transitional packages to linux-latest-2.6. + + [ Frederik Schüler ] + * [amd64] Add smp-alternatives backport. + * [amd64] Drop smp flavours. + * [amd64] Merge k8 and p4 flavours into a generic one, following upstreams + advice. + * Activate BSD_PROCESS_ACCT_V3. + * Add stable release 2.6.17.8: + - ALSA: Don't reject O_RDWR at opening PCM OSS + - Add stable branch to maintainers file + - tty serialize flush_to_ldisc + - S390: fix futex_atomic_cmpxchg_inatomic + - Fix budget-av compile failure + - cond_resched() fix + - e1000: add forgotten PCI ID for supported device + - ext3: avoid triggering ext3_error on bad NFS file handle + - ext3 -nobh option causes oops + - Fix race related problem when adding items to and svcrpc auth cache. + - ieee1394: sbp2: enable auto spin-up for Maxtor disks + - invalidate_bdev() speedup + - Sparc64 quad-float emulation fix + - VLAN state handling fix + - Update frag_list in pskb_trim + - UHCI: Fix handling of short last packet + - sky2: NAPI bug + - i2c: Fix 'ignore' module parameter handling in i2c-core + - scx200_acb: Fix the block transactions + - scx200_acb: Fix the state machine + - H.323 helper: fix possible NULL-ptr dereference + - Don't allow chmod() on the /proc// files + - PCI: fix issues with extended conf space when MMCONFIG disabled because of e820 + + [ Sven Luther ] + * [powerpc] Added console=hvsi0 too to CMDLINE to the powerpc64 flavour, for + non-virtualized IBM power machines serial console. + + -- Bastian Blank Fri, 11 Aug 2006 19:58:06 +0200 + +linux-2.6 (2.6.17-5) unstable; urgency=low + + [ Martin Michlmayr ] + * [arm/nslu2] Enable CONFIG_USB_EHCI_SPLIT_ISO. Closes: #378554 + + [ maximilian attems ] + * Add stable release 2.6.17.7: + - BLOCK: Fix bounce limit address check + - v4l/dvb: Fix budget-av frontend detection + - v4l/dvb: Fix CI on old KNC1 DVBC cards + - v4l/dvb: Fix CI interface on PRO KNC1 cards + - v4l/dvb: Backport fix to artec USB DVB devices + - v4l/dvb: Backport the DISEQC regression fix to 2.6.17.x + - v4l/dvb: stradis: dont export MODULE_DEVICE_TABLE + - pnp: suppress request_irq() warning + - generic_file_buffered_write(): handle zero-length iovec segments + - serial 8250: sysrq deadlock fix + - Reduce ACPI verbosity on null handle condition + - ieee80211: TKIP requires CRC32 + - Make powernow-k7 work on SMP kernels. + - via-velocity: the link is not correctly detected when the device starts + - Add missing UFO initialisations + - USB serial ftdi_sio: Prevent userspace DoS (CVE-2006-2936) + - cdrom: fix bad cgc.buflen assignment + - splice: fix problems with sys_tee() + - fix fdset leakage + - struct file leakage + - XFS: corruption fix + - v4l/dvb: Kconfig: fix description and dependencies for saa7115 module + - dvb-bt8xx: fix frontend detection for DViCO FusionHDTV DVB-T Lite rev 1.2 + - IB/mthca: restore missing PCI registers after reset + - v4l/dvb: Backport the budget driver DISEQC instability fix + - Fix IPv4/DECnet routing rule dumping + - pdflush: handle resume wakeups + - x86_64: Fix modular pc speaker + - Fix powernow-k8 SMP kernel on UP hardware bug. + - ALSA: RME HDSP - fixed proc interface (missing {}) + - ALSA: au88x0 - Fix 64bit address of MPU401 MMIO port + - ALSA: Fix a deadlock in snd-rtctimer + - ALSA: Fix missing array terminators in AD1988 codec support + - ALSA: Fix model for HP dc7600 + - ALSA: Fix mute switch on VAIO laptops with STAC7661 + - ALSA: fix the SND_FM801_TEA575X dependencies + - ALSA: Fix undefined (missing) references in ISA MIRO sound driver + - ALSA: Fix workaround for AD1988A rev2 codec + - ALSA: hda-intel - Fix race in remove + - Suppress irq handler mismatch messages in ALSA ISA drivers + - PKT_SCHED: Fix illegal memory dereferences when dumping actions + - PKT_SCHED: Return ENOENT if action module is unavailable + - PKT_SCHED: Fix error handling while dumping actions + - generic_file_buffered_write(): deadlock on vectored write + - ethtool: oops in ethtool_set_pauseparam() + - memory hotplug: solve config broken: undefined reference to `online_page' + * Add budget-av-compile-fix.patch stable compile fix. + * Enable in all configs setting SND_FM801_TEA575X SND_FM801_TEA575X_BOOL=y. + + -- Bastian Blank Sat, 29 Jul 2006 13:30:06 +0200 + +linux-2.6 (2.6.17-4) unstable; urgency=low + + [ Bastian Blank ] + * Add stable release 2.6.17.5: + - Fix nasty /proc vulnerability (CVE-2006-3626) + * Add stable release 2.6.17.6: + - Relax /proc fix a bit + * Set section of images to admin. + + [ dann frazier ] + * [ia64] Drop the non-SMP flavours; they are not well maintained upstream. + Note that the non-SMP flavours have been identical to the SMP builds + since 2.6.13-1; this was to avoid having to drop then re-add these + flavours if upstream resolved the issue - but that never happened. + Note that this is a measurable performance penalty on non-SMP systems. + + -- Bastian Blank Mon, 17 Jul 2006 11:08:41 +0200 + +linux-2.6 (2.6.17-3) unstable; urgency=low + + [ maximilian attems ] + * Add stable release 2.6.17.2: + - ide-io: increase timeout value to allow for slave wakeup + - NTFS: Critical bug fix (affects MIPS and possibly others) + - Link error when futexes are disabled on 64bit architectures + - SCTP: Reset rtt_in_progress for the chunk when processing its sack. + - SPARC32: Fix iommu_flush_iotlb end address + - ETHTOOL: Fix UFO typo + - UML: fix uptime + - x86: compile fix for asm-i386/alternatives.h + - bcm43xx: init fix for possible Machine Check + - SCTP: Fix persistent slowdown in sctp when a gap ack consumes rx buffer. + - kbuild: bugfix with initramfs + - Input: return correct size when reading modalias attribute + - ohci1394: Fix broken suspend/resume in ohci1394 + - idr: fix race in idr code + - USB: Whiteheat: fix firmware spurious errors + - libata: minor patch for ATA_DFLAG_PIO + - SCTP: Send only 1 window update SACK per message. + - PFKEYV2: Fix inconsistent typing in struct sadb_x_kmprivate. + - SCTP: Limit association max_retrans setting in setsockopt. + - SCTP: Reject sctp packets with broadcast addresses. + - IPV6: Sum real space for RTAs. + - IPV6 ADDRCONF: Fix default source address selection without + CONFIG_IPV6_PRIVACY + - IPV6: Fix source address selection. + * Add stable release 2.6.17.3: + - NETFILTER: SCTP conntrack: fix crash triggered by packet without chunks + [CVE-2006-2934] + * Deapply merged sparc32-iotlb.patch. + * Fix README.Debian: Correct svn location, remove old boot param bswap + reference, the asfs patch is in the Debian kernel. Remove reference to + AMD 768 erratum 10, it was solved in 2.6.12. Add wording corrections. + * Set CONFIG_SERIAL_8250_RN_UARTS=16 for all archs beside mips/m68k unless + explicitly set on a specific value. (closes: 377151) + * Add stable release 2.6.17.4: + - fix prctl privilege escalation and suid_dumpable (CVE-2006-2451) + + [ Sven Luther ] + * Re-enabled fs-asfs patch. + + [ Thiemo Seufer ] + * [mips,mipsel] Fix sb1 interrupt handlers. + * [mips,mipsel] Fix devfs-induced build failure in sb1250 serial driver. + * [mips] SGI ip22 RTC was broken, fixed thanks to Julien Blache. + * [mips] Fix SGI ip22 serial console, thanks to Julien Blache. + + [ Martin Michlmayr ] + * [arm/nslu2] Enable HFS and some other filesystems. + * [arm/nslu2] Unset CONFIG_USB_STORAGE_DEBUG. Closes: #377853. + + -- Bastian Blank Thu, 13 Jul 2006 13:14:53 +0200 + +linux-2.6 (2.6.17-2) unstable; urgency=low + + [ Jurij Smakov ] + * [sparc] Switch to gcc-4.1 as it produces a working kernel, + while gcc-4.0 does not. No ABI bump neccessary, because + 2.6.17-1 sparc binaries never made it to the archive. + * [sparc32] Add sparc32-iotlb.patch to fix DMA errors on sparc32. + + [ Sven Luther ] + * [powerpc] Added console=hvc0 default commandline option to powerpc64 flavour. + * [powerpc] Fixed mkvmlinuz support, which was missing from -1. (Closes: #375645) + * [powerpc] Added PowerBook HID support for last-gen PowerBook keyboards. + (Closes: #307327) + + [ Martin Michlmayr ] + * [mipsel] Fix compilation error in dz serial driver. + * [mipsel] Update configs. + * [mipsel] Add a build fix for the Cobalt early console support. + * [arm/nslu2] Disable SE Linux support for now so the kernel fits into flash. + + [ Christian T. Steigies ] + * [m68k] Update patches for 2.6.17. + * [m68k] Add m68k-as and m68k-macro patch which allow building with current binutils. + * [m68k] Disable all subarches but amiga and mac for official linux-images. + + [ Kyle McMartin ] + * [hppa] Update patchset (2.6.17-pa6) from parisc-linux.org. + Which fixes relocation errors in modules with 64-bit kernels, and + a softlockup on non-SMP flavours with gettimeofday. + + -- Bastian Blank Thu, 29 Jun 2006 18:49:35 +0200 + +linux-2.6 (2.6.17-1) unstable; urgency=low + + [ Frederik Schüler ] + * New upstream release. + * [amd64] Use gcc 4.1. + * [amd64] Drop amd64-generic flavor. We will use amd64-k8 for the + installer. + + [ Martin Michlmayr ] + * [mips] Update patches for 2.6.17. + * [arm] Update configs. + * [armeb] Update configs. + + [ Thiemo Seufer ] + * [mips] Fix SWARM FPU detection. + * [mips] Update configurations. + + [ Kyle McMartin ] + * [hppa] Set PDC_CHASSIS_WARN to y. + * [hppa] Update patchset (2.6.17-pa2) from parisc-linux.org. + * [hppa] Change NR_CPUS to 8 from 32 on both SMP flavours. + * [hppa] Set PARISC_PAGE_SIZE to 4K on all platforms. + + [ Bastian Blank ] + * [s390] Use gcc 4.1. + * [i386] Enable REGPARM. + * [i386] Use gcc 4.1. + * [powerpc] Disable prep. + + [ dann frazier ] + * [ia64] Update configs + * [ia64] Use gcc 4.1. + + [ maximilian attems ] + * Add stable release 2.6.17.1: + - xt_sctp: fix endless loop caused by 0 chunk length (CVE-2006-3085) + + -- Bastian Blank Thu, 22 Jun 2006 12:13:15 +0200 + +linux-2.6 (2.6.16+2.6.17-rc3-0experimental.1) experimental; urgency=low + + [ Frederik Schüler ] + * New upstream release candidate. + * Switch HZ from 1000 to 250, following upstreams default. + * Activate CONFIG_BCM43XX_DEBUG. + + [ maximilian attems ] + * Disable broken and known unsecure LSM modules: CONFIG_SECURITY_SECLVL, + CONFIG_SECURITY_ROOTPLUG. Upstream plans to remove them for 2.6.18 + + -- Frederik Schüler Sun, 7 May 2006 17:06:29 +0200 + +linux-2.6.16 (2.6.16-18) unstable; urgency=high + + [ Sven Luther ] + * [powerpc] Added console=hvsi0 too to CMDLINE to the powerpc64 flavour, + for non-virtualized IBM power machines serial console. + + [ dann frazier ] + * fs-ext3-bad-nfs-handle.patch: avoid triggering ext3_error on bad NFS + file handle (CVE-2006-3468) + * cdrom-bad-cgc.buflen-assign.patch: fix buffer overflow in dvd_read_bca + * usb-serial-ftdi_sio-dos.patch: fix userspace DoS in ftdi_sio driver + + [ Bastian Blank ] + * Update xen patch to changeset 9762. + + -- Frederik Schüler Fri, 18 Aug 2006 20:29:17 +0200 + +linux-2.6.16 (2.6.16-17) unstable; urgency=high + + [ Martin Michlmayr ] + * Add stable release 2.6.16.22: + - powernow-k8 crash workaround + - NTFS: Critical bug fix (affects MIPS and possibly others) + - JFS: Fix multiple errors in metapage_releasepage + - SPARC64: Fix D-cache corruption in mremap + - SPARC64: Respect gfp_t argument to dma_alloc_coherent(). + - SPARC64: Fix missing fold at end of checksums. + - scsi_lib.c: properly count the number of pages in scsi_req_map_sg() + - I2O: Bugfixes to get I2O working again + - Missed error checking for intent's filp in open_namei(). + - tmpfs: time granularity fix for [acm]time going backwards + - USB: Whiteheat: fix firmware spurious errors + - fs/namei.c: Call to file_permission() under a spinlock in do_lookup_path() + * Add stable release 2.6.16.23: + - revert PARPORT_SERIAL should depend on SERIAL_8250_PCI patch + - NETFILTER: SCTP conntrack: fix crash triggered by packet without + chunks (CVE-2006-2934) + * Add stable release 2.6.16.24: + - fix prctl privilege escalation and suid_dumpable (CVE-2006-2451) + * Add stable release 2.6.16.25: + - Fix nasty /proc vulnerability (CVE-2006-3626) + * Relax /proc fix a bit (Linus Torvalds) + + * [arm/nslu2] Unset CONFIG_USB_STORAGE_DEBUG. Closes: #377853. + * [mips] SGI ip22 RTC was broken, fixed thanks to Julien Blache. + * [mips] Fix SGI ip22 serial console, thanks to Julien Blache. + + [ Bastian Blank ] + * Fix vserver patch. + + -- Bastian Blank Sat, 15 Jul 2006 17:18:49 +0200 + +linux-2.6.16 (2.6.16-16) unstable; urgency=low + + [ Sven Luther ] + * [powerpc] Added console=hvc0 default commandline option to powerpc64 flavour. + * [powerpc] Now THERM_PM72 and all WINDFARMs are builtin, for better fan control. + + [ Martin Michlmayr ] + * [arm/nslu2] Disable SE Linux support for now so the kernel fits into + flash. Closes: #376926. + + [ Bastian Blank ] + * [powerpc,powerpc-miboot] Enable OpenFirmware device tree support. + (closes: #376012) + + -- Bastian Blank Sat, 8 Jul 2006 17:57:57 +0200 + +linux-2.6.16 (2.6.16-15) unstable; urgency=low + + [ maximilian attems ] + * Add stable release 2.6.16.18: + - NETFILTER: SNMP NAT: fix memory corruption (CVE-2006-2444) + * Add stable release 2.6.16.19: + - NETFILTER: Fix small information leak in SO_ORIGINAL_DST (CVE-2006-1343) + * Add stable release 2.6.16.20: + - x86_64: Don't do syscall exit tracing twice + - Altix: correct ioc4 port order + - Input: psmouse - fix new device detection logic + - PowerMac: force only suspend-to-disk to be valid + - the latest consensus libata resume fix + - Altix: correct ioc3 port order + - Cpuset: might sleep checking zones allowed fix + - ohci1394, sbp2: fix "scsi_add_device failed" with PL-3507 based devices + - sbp2: backport read_capacity workaround for iPod + - sbp2: fix check of return value of hpsb_allocate_and_register_addrspace + - x86_64: x86_64 add crashdump trigger points + - ipw2200: Filter unsupported channels out in ad-hoc mode + * Add stable release 2.6.16.21: + - check_process_timers: fix possible lockup + - run_posix_cpu_timers: remove a bogus BUG_ON() (CVE-2006-2445) + - xt_sctp: fix endless loop caused by 0 chunk length (CVE-2006-3085) + - powerpc: Fix machine check problem on 32-bit kernels (CVE-2006-2448) + + [ Christian T. Steigies ] + * [m68k] Add mac via patch from Finn Thain. + * [m68k] Enable INPUT_EVDEV. + + [ Martin Michlmayr ] + * [mips/b1-bcm91250a] Enable SMP. + * [mips] Add a compile fix for the Maxine fb. + * [mipsel] Add a patch that let's you enable serial console on DECstation. + * [mipsel] Add a patch to get SCSI working on DECstation. + * [mipsel] Handle memory-mapped RTC chips properly. + * [mipsel] Add configs for r3k-kn02 and r4k-kn04 DECstation. + * [arm] Allow RiscPC machines to boot an initrd (tagged list fix). + * [arm/nslu2] Enable many modules. + * [arm] Build loop support as a module. + * [arm] Use the generic netfilter configuration. + * [arm/footbridge] Enable sound. + + [ Kyle McMartin ] + * [hppa] Pulled patch from cvs to fix build of kernel/ptrace.c which needs + {read,write}_can_lock. + * [hppa] Disable CONFIG_DETECT_SOFTLOCKUP to fix boot on pa8800 machines. + + [ Sven Luther ] + * [powerpc,prep] Added a new ARCH=ppc PReP flavour, currently mostly a copy + of the -powerpc one. + * Upgraded mkvmlinuz dependency to mkvmlinuz 21. + + [ Bastian Blank ] + * Update vserver patch to 2.0.2-rc21. + * Bump build-dependency on kernel-package to 10.049. + + [ Jurij Smakov ] + * Add dcache-memory-corruption.patch to fix the mremap(), occasionally + triggered on sparc in the form of dpkg database corruption. Affects + sparc64, mips and generic includes. Thanks to David Miller, original + patch is included in 2.6.17. + Ref: http://marc.theaimsgroup.com/?l=linux-sparc&m=114920963824047&w=2 + * Add sparc32-iotlb.patch to fix the DMA errors encountered with latest + kernels on sparc32, in particularly HyperSparcs. Thanks to Bob Breuer. + Ref: http://marc.theaimsgroup.com/?l=linux-sparc&m=115077649707675&w=2 + + -- Bastian Blank Wed, 21 Jun 2006 14:09:11 +0200 + +linux-2.6 (2.6.16-14) unstable; urgency=low + + [ Bastian Blank ] + * Add stable release 2.6.16.16: + - fs/locks.c: Fix lease_init (CVE-2006-1860) + * Make i386 xen images recommend libc6-xen. + * Update vserver patch to 2.0.2-rc20. + * Update xen patch to changeset 9687. + + [ Christian T. Steigies ] + * [m68k] Add generic m68k ide fix. + * [m68k] Add cross-compile instructions. + * [m68k] Enable INPUT_EVDEV for yaird. + * [m68k] sun3 general compile and scsi fixes, enable sun3 SCSI again. + + [ dann frazier ] + * cs4281 - Fix the check of timeout in probe to deal with variable HZ. + (closes: #361197) + + [ Norbert Tretkowski ] + * [alpha] Readded patch to support prctl syscall, got lost when upgrading + to 2.6.16. + + [ Frederik Schüler ] + * Add stable release 2.6.16.17: + - SCTP: Validate the parameter length in HB-ACK chunk (CVE-2006-1857) + - SCTP: Respect the real chunk length when walking parameters + (CVE-2006-1858) + - ptrace_attach: fix possible deadlock schenario with irqs + - Fix ptrace_attach()/ptrace_traceme()/de_thread() race + - page migration: Fix fallback behavior for dirty pages + - add migratepage address space op to shmem + - Remove cond_resched in gather_stats() + - VIA quirk fixup, additional PCI IDs + - PCI quirk: VIA IRQ fixup should only run for VIA southbridges + - Fix udev device creation + - limit request_fn recursion + - PCI: correctly allocate return buffers for osc calls + - selinux: check for failed kmalloc in security_sid_to_context() + - TG3: ethtool always report port is TP. + - Netfilter: do_add_counters race, possible oops or info leak + (CVE-2006-0039) + - scx200_acb: Fix resource name use after free + - smbus unhiding kills thermal management + - fs/compat.c: fix 'if (a |= b )' typo + - smbfs: Fix slab corruption in samba error path + - fs/locks.c: Fix sys_flock() race + - USB: ub oops in block_uevent + - via-rhine: zero pad short packets on Rhine I ethernet cards + - md: Avoid oops when attempting to fix read errors on raid10 + + -- Bastian Blank Mon, 22 May 2006 14:56:11 +0200 + +linux-2.6 (2.6.16-13) unstable; urgency=low + + [ Frederik Schüler ] + * Add stable release 2.6.16.14: + - smbfs chroot issue (CVE-2006-1864) + + [ Bastian Blank ] + * Don't make headers packages depend on images. + * Bump abiname to 2. (closes: #366291) + * Update vserver patch to 2.0.2-rc19. + * Update xen patch to changeset 9668. + * Remove abi fixes. + * Add stable release 2.6.16.15: + - SCTP: Allow spillover of receive buffer to avoid deadlock. (CVE-2006-2275) + - SCTP: Fix panic's when receiving fragmented SCTP control chunks. (CVE-2006-2272) + - SCTP: Fix state table entries for chunks received in CLOSED state. (CVE-2006-2271) + - SCTP: Prevent possible infinite recursion with multiple bundled DATA. (CVE-2006-2274) + * Switch HZ from 1000 to 250. + + [ Christian T. Steigies ] + * [m68k] Add patches that allow building images for atari + * [m68k] Enable atyfb driver for atari + + -- Bastian Blank Wed, 10 May 2006 18:58:44 +0200 + +linux-2.6 (2.6.16-12) unstable; urgency=low + + [ Bastian Blank ] + * Add stable release 2.6.16.12: + - dm snapshot: fix kcopyd destructor + - x86_64: Pass -32 to the assembler when compiling the 32bit vsyscall pages + - for_each_possible_cpu + - Simplify proc/devices and fix early termination regression + - sonypi: correct detection of new ICH7-based laptops + - MIPS: Fix tx49_blast_icache32_page_indexed. + - NET: e1000: Update truesize with the length of the packet for packet split + - i386: fix broken FP exception handling + - tipar oops fix + - USB: fix array overrun in drivers/usb/serial/option.c + - Altix snsc: duplicate kobject fix + - Alpha: strncpy() fix + - LSM: add missing hook to do_compat_readv_writev() + - Fix reiserfs deadlock + - make vm86 call audit_syscall_exit + - fix saa7129 support in saa7127 module for pvr350 tv out + - dm flush queue EINTR + - get_dvb_firmware: download nxt2002 firmware from new driver location + - cxusb-bluebird: bug-fix: power down corrupts frontend + - x86_64: Fix a race in the free_iommu path. + - MIPS: Use "R" constraint for cache_op. + - MIPS: R2 build fixes for gcc < 3.4. + - cs5535_gpio.c: call cdev_del() during module_exit to unmap kobject references and other cleanups + - MIPS: Fix branch emulation for floating-point exceptions. + - x86/PAE: Fix pte_clear for the >4GB RAM case + * Add stable release 2.6.16.13: + - NETFILTER: SCTP conntrack: fix infinite loop (CVE-2006-1527) + * Remove merged patches. + * Rediff xen patch. + * Bump build-dependency on kernel-package to 10.047. + + [ Martin Michlmayr ] + * [arm] Enable cramfs for ixp4xx and rpc. + + -- Bastian Blank Thu, 4 May 2006 11:37:26 +0200 + +linux-2.6 (2.6.16-11) unstable; urgency=low + + * Update vserver patch to 2.0.2-rc18. + - Limit ccaps to root inside a guest (CVE-2006-2110) + * Conflict with known broken grub versions. (closes: #361308) + * Enable s390 vserver image. + * Enable xen and xen-vserver images. + * Use localversion for kernel-package images. (closes: #365505) + + -- Bastian Blank Mon, 1 May 2006 16:38:45 +0200 + +linux-2.6 (2.6.16-10) unstable; urgency=low + + [ Norbert Tretkowski ] + * [alpha] Added backport of for_each_possible_cpu() to fix alpha build. + (closes: #364206) + * Add stable release 2.6.16.10: + - IPC: access to unmapped vmalloc area in grow_ary() + - Add more prevent_tail_call() + - alim15x3: ULI M-1573 south Bridge support + - apm: fix Armada laptops again + - fbdev: Fix return error of fb_write + - Fix file lookup without ref + - m41t00: fix bitmasks when writing to chip + - Open IPMI BT overflow + - x86: be careful about tailcall breakage for sys_open[at] too + - x86: don't allow tail-calls in sys_ftruncate[64]() + - IPV6: XFRM: Fix decoding session with preceding extension header(s). + - IPV6: XFRM: Don't use old copy of pointer after pskb_may_pull(). + - IPV6: Ensure to have hop-by-hop options in our header of &sk_buff. + - selinux: Fix MLS compatibility off-by-one bug + - PPC: fix oops in alsa powermac driver + - MTD_NAND_SHARPSL and MTD_NAND_NANDSIM should be tristate's + - i2c-i801: Fix resume when PEC is used + - Fix hotplug race during device registration + - Fix truesize underflow + - efficeon-agp: Add missing memory mask + - 3ware 9000 disable local irqs during kmap_atomic + - 3ware: kmap_atomic() fix + + [ maximilian attems ] + * Add stable release 2.6.16.11: + - Don't allow a backslash in a path component (CVE-2006-1863) + + -- Bastian Blank Tue, 25 Apr 2006 13:56:19 +0200 + +linux-2.6 (2.6.16-9) unstable; urgency=low + + [ maximilian attems ] + * Add stable release 2.6.16.8: + - ip_route_input panic fix (CVE-2006-1525) + * Add stable release 2.6.16.9: + - i386/x86-64: Fix x87 information leak between processes (CVE-2006-1056) + + [ Bastian Blank ] + * Update vserver patch to 2.0.2-rc17. + + -- Bastian Blank Thu, 20 Apr 2006 15:37:28 +0200 + +linux-2.6 (2.6.16-8) unstable; urgency=low + + * Fix ABI-breakage introduced in -7. (closes: #363032) + * Add stable release 2.6.16.6: + - ext3: Fix missed mutex unlock + - RLIMIT_CPU: fix handling of a zero limit + - alpha: SMP boot fixes + - m32r: security fix of {get, put}_user macros + - m32r: Fix cpu_possible_map and cpu_present_map initialization for SMP kernel + - shmat: stop mprotect from giving write permission to a readonly attachment (CVE-2006-1524) + - powerpc: fix incorrect SA_ONSTACK behaviour for 64-bit processes + - MPBL0010 driver sysfs permissions wide open + - cciss: bug fix for crash when running hpacucli + - fuse: fix oops in fuse_send_readpages() + - Fix utime(2) in the case that no times parameter was passed in. + - Fix buddy list race that could lead to page lru list corruptions + - NETFILTER: Fix fragmentation issues with bridge netfilter + - USB: remove __init from usb_console_setup + - Fix suspend with traced tasks + - isd200: limit to BLK_DEV_IDE + - edac_752x needs CONFIG_HOTPLUG + - fix non-leader exec under ptrace + - sky2: bad memory reference on dual port cards + - atm: clip causes unregister hang + - powerpc: iSeries needs slb_initialize to be called + - Fix block device symlink name + - Incorrect signature sent on SMB Read + * Add stable release 2.6.16.7: + - fix MADV_REMOVE vulnerability (CVE-2006-1524 for real this time) + + -- Bastian Blank Tue, 18 Apr 2006 16:22:31 +0200 + +linux-2.6 (2.6.16-7) unstable; urgency=low + + [ Frederik Schüler ] + * Add stable release 2.6.16.3: + - Keys: Fix oops when adding key to non-keyring (CVE-2006-1522) + + [ Bastian Blank ] + * Add stable release 2.6.16.4: + - RCU signal handling (CVE-2006-1523) + + [ Sven Luther ] + * [powerpc] Transitioned mkvmlinuz support patch to the 2.6.16 ARCH=powerpc + tree. PReP is broken in 2.6.16 though. + + [ maximilian attems ] + * Add stable release 2.6.16.5: + - x86_64: Clean up execve + - x86_64: When user could have changed RIP always force IRET (CVE-2006-0744) + * Disable CONFIG_SECCOMP (adds useless overhead on context-switch) - + thanks to fs for checking abi. + + [ Christian T. Steigies ] + * [m68k] update m68k patch and config to 2.6.16, temporarily disable atari + + -- Bastian Blank Sat, 15 Apr 2006 13:56:05 +0200 + +linux-2.6 (2.6.16-6) unstable; urgency=medium + + [ Bastian Blank ] + * Provide version infos in support package and don't longer rely on the + changelog. + * [amd64/i386] Enable cpu hotplug support. + + [ maximilian attems ] + * Add stable release 2.6.16.2: + - PCMCIA_SPECTRUM must select FW_LOADER + - drivers/net/wireless/ipw2200.c: fix an array overun + - AIRO{,_CS} <-> CRYPTO fixes + - tlclk: fix handling of device major + - fbcon: Fix big-endian bogosity in slow_imageblit() + - Fix NULL pointer dereference in node_read_numastat() + - USB: EHCI full speed ISO bugfixes + - Mark longhaul driver as broken. + - fib_trie.c node freeing fix + - USB: Fix irda-usb use after use + - sysfs: zero terminate sysfs write buffers (CVE-2006-1055) + - USB: usbcore: usb_set_configuration oops (NULL ptr dereference) + - pcmcia: permit single-character-identifiers + - hostap: Fix EAPOL frame encryption + - wrong error path in dup_fd() leading to oopses in RCU + - {ip, nf}_conntrack_netlink: fix expectation notifier unregistration + - isicom must select FW_LOADER + - knfsd: Correct reserved reply space for read requests. + - Fix module refcount leak in __set_personality() + - sbp2: fix spinlock recursion + - powerpc: make ISA floppies work again + - opti9x - Fix compile without CONFIG_PNP + - Add default entry for CTL Travel Master U553W + - Fix the p4-clockmod N60 errata workaround. + - kdump proc vmcore size oveflow fix + + -- Bastian Blank Mon, 10 Apr 2006 16:09:51 +0200 + +linux-2.6 (2.6.16-5) unstable; urgency=low + + [ Bastian Blank ] + * Provide real dependency packages for module building. + - Add linux-headers-$version-$abiname-all and + linux-headers-$version-$abiname-all-$arch. + * Rename support package to linux-support-$version-$abiname. + * Fix module package output. + * Include .kernelrelease in headers packages. (closes: #359813) + * Disable Cumana partition support completely. (closes: #359207) + * Update vserver patch to 2.0.2-rc15. + + [ dann frazier ] + * [ia64] initramfs-tools works now, no longer restrict initramfs-generators + + -- Bastian Blank Mon, 3 Apr 2006 14:00:08 +0200 + +linux-2.6 (2.6.16-4) unstable; urgency=medium + + [ Martin Michlmayr ] + * [arm/armeb] Update nslu2 config. + * Add stable release 2.6.16.1: + - Fix speedstep-smi assembly bug in speedstep_smi_ownership + - DMI: fix DMI onboard device discovery + - cciss: fix use-after-free in cciss_init_one + - DM: Fix bug: BIO_RW_BARRIER requests to md/raid1 hang. + - fix scheduler deadlock + - proc: fix duplicate line in /proc/devices + - rtc.h broke strace(1) builds + - dm: bio split bvec fix + - v9fs: assign dentry ops to negative dentries + - i810fb_cursor(): use GFP_ATOMIC + - NET: Ensure device name passed to SO_BINDTODEVICE is NULL terminated. + - XFS writeout fix + - sysfs: fix a kobject leak in sysfs_add_link on the error path + - get_cpu_sysdev() signedness fix + - firmware: fix BUG: in fw_realloc_buffer + - sysfs: sysfs_remove_dir() needs to invalidate the dentry + - TCP: Do not use inet->id of global tcp_socket when sending RST (CVE-2006-1242) + - 2.6.xx: sata_mv: another critical fix + - Kconfig: VIDEO_DECODER must select FW_LOADER + - V4L/DVB (3324): Fix Samsung tuner frequency ranges + - sata_mv: fix irq port status usage + + -- Bastian Blank Tue, 28 Mar 2006 17:19:10 +0200 + +linux-2.6 (2.6.16-3) unstable; urgency=low + + [ Frederik Schüler ] + * [amd64] Add asm-i386 to the linux-headers packages. + + [ Jonas Smedegaard ] + * Tighten yaird dependency to at least 0.0.12-8 (supporting Linux + 2.6.16 uppercase hex in Kconfig and new IDE sysfs naming, and VIA + IDE on powerpc). + + [ Martin Michlmayr ] + * [arm/armeb] Enable CONFIG_NFSD on NSLU2 again. Closes: #358709. + * [arm/footbridge] CONFIG_NE2K_PCI should be a module, not built-in. + * [arm/footbridge] Enable CONFIG_BLK_DEV_IDECD=m since the CATS can + have a CD-ROM drive. + * [mips/sb1*] Use ttyS rather than duart as the name for the serial + console since the latter causes problems with debian-installer. + + [ Bastian Blank ] + * Update vserver patch to 2.0.2-rc14. + - Fix sendfile. (closes: #358391, #358752) + + -- Bastian Blank Mon, 27 Mar 2006 16:08:20 +0200 + +linux-2.6 (2.6.16-2) unstable; urgency=low + + [ dann frazier ] + * [ia64] Set unconfigured options: + CONFIG_PNP_DEBUG=n and CONFIG_NET_SB1000=m + * [hppa] Update config for 2.6.16 + + [ Martin Michlmayr ] + * [mips/mipsel] Put something in the generic config file because diff + will otherwise remove the empty file, causing the build to fail. + * [mipsel/r5k-cobalt] Set CONFIG_PACKET=y. + * [arm] Set CONFIG_MACLIST=y for ixp4xx because nas100d needs it. + + [ Frederik Schüler ] + * Add Maximilian Attems to uploaders list. + + -- Martin Michlmayr Wed, 22 Mar 2006 15:15:14 +0000 + +linux-2.6 (2.6.16-1) unstable; urgency=low + + [ Bastian Blank ] + * New upstream release. + * Default to initramfs-tools 0.55 or higher on s390. + + [ maximilian attems ] + * Default to initramfs-tools on arm and armeb. + + [ Martin Michlmayr ] + * [mips/mipsel] Add an image for the Broadcom BCM91480B evaluation board + (aka "BigSur"). + * [arm, armeb] Enable the netconsole module. + * [mipsel/cobalt] Enable the netconsole module. + * [mips] SB1: Fix interrupt disable hazard (Ralf Baechle). + * [mips] SB1: Support for 1480 ethernet (Broadcom). + * [mips] SB1: Support for NAPI (Tom Rix). + * [mips] SB1: DUART support (Broadcom). + * [mips] Work around bad code generation for (Ralf Baechle). + * [mips] Fix VINO drivers when using a 64-bit kernel (Mikael Nousiainen). + * [arm/armeb] Update configs for 2.6.16. + * [mips/mipsel] Update configs for 2.6.16. + * [arm/armeb] Enable the SMB module on NSLU2. + * [mipsel] Enable parallel port modules for Cobalt since there are PCI + cards that can be used in a Qube. + * [mipsel] Enable the JFS module on Cobalt. + + [ dann frazier ] + * [ia64] use yaird on ia64 until #357414 is fixed + * [ia64] Update configs for 2.6.16 + + -- Bastian Blank Tue, 21 Mar 2006 16:12:16 +0100 + +linux-2.6 (2.6.15+2.6.16-rc5-0experimental.1) experimental; urgency=low + + [ Frederik Schüler ] + * New upstream release candidate. + + [ Martin Michlmayr ] + * Add initial mips/mipsel 2.6 kernels. + * Important changes compared to the 2.4 kernels: + - Drop the XXS1500 flavour since there's little interest in it. + - Drop the LASAT flavour since these machines never went into + production. + - Drop the IP22 R5K (Indy, Indigo2) flavour since the IP22 R4K + image now also works on machines with a R5K CPU. + - Add an image for SGI IP32 (O2). + - Rename the sb1-swarm-bn flavour to sb1-bcm91250a. + - Enable PCI network (and other) modules on Cobalt. Closes: #315895. + * Add various MIPS related patches: + - Fix iomap compilation on machines without COW. + - Improve gettimeofday on MIPS. + - Fix an oops on IP22 zerilog (serial console). + - Improve IDE probing so it won't take so long on Cobalt. + - Probe for IDE disks on SWARM. + - Test whether there's a scache (fixes Cobalt crash). + - Add Tulip fixes for Cobalt. + * Fix a typo in the description of the linux-doc-* package, + thanks Justin Pryzby. Closes: #343424. + * [arm] Enable nfs and nfsd modules. + * [arm/footbride] Suggest nwutil (Netwinder utilities). + + -- Frederik Schüler Thu, 9 Mar 2006 14:13:17 +0000 + +linux-2.6 (2.6.15+2.6.16-rc4-0experimental.1) experimental; urgency=low + + [ Frederik Schüler ] + * New upstream release. + * Activate CONFIG_DVB_AV7110_OSD on alpha amd64 and ia64. + Closes: #353292 + * Globally enable NAPI on all network card drivers which support it. + + [ maximilian attems ] + * Drop fdutils from i386 and amd64 Suggests. + * Swap lilo and grub Suggests for i386 and amd64. + + [ Jurij Smakov ] + * Make sure that LOCALVERSION environment variable is not + passed to a shell while invoking make-kpkg, since it + appends it to the version string, breaking the build. + Closes: #349472 + * [sparc32] Re-enable the building of sparc32 images. + * [sparc64] Re-add (partial) sparc64-atyf-xl-gr.patch, since it + was only partially applied upstream, so the problem (garbled + screen output on SunBlade 100) is still present. Thanks to + Luis Ortiz for pointing it out. + * Bump the build-dep on kernel-package to 10.035, which fixes + the problem with building documentation packages. + + [ Martin Michlmayr ] + * [sparc] Add sys_newfstatat -> sys_fstatat64 fix from git. + * [arm] Update configs for 2.6.16-rc3. + * [armeb] Update configs for 2.6.16-rc3. + * [arm/armeb] Fix compilation error on NSLU2 due to recent flash + changes. + * [arm/armeb] Fix a compilation error in the IXP4xx beeper support + (Alessandro Zummo). + + [ Norbert Tretkowski ] + * [alpha] Update arch/alpha/config* for 2.6.16-rc3. + + -- Bastian Blank Fri, 24 Feb 2006 16:02:11 +0000 + +linux-2.6 (2.6.15-8) unstable; urgency=high + + [ maximilian attems ] + * Add stable Release 2.6.15.5: + - Fix deadlock in br_stp_disable_bridge + - Fix a severe bug + - i386: Move phys_proc_id/early intel workaround to correct function + - ramfs: update dir mtime and ctime + - sys_mbind sanity checking + - Fix s390 build failure. + - Revert skb_copy_datagram_iovec() recursion elimination. + - s390: add #ifdef __KERNEL__ to asm-s390/setup.h + - netfilter missing symbol has_bridge_parent + - hugetlbfs mmap ENOMEM failure + - IB/mthca: max_inline_data handling tweaks + - it87: Fix oops on removal + - hwmon it87: Probe i2c 0x2d only + - reiserfs: disable automatic enabling of reiserfs inode attributes + - Fix snd-usb-audio in 32-bit compat environment + - dm: missing bdput/thaw_bdev at removal + - dm: free minor after unlink gendisk + - gbefb: IP32 gbefb depth change fix + - shmdt cannot detach not-alined shm segment cleanly. + - Address autoconfiguration does not work after device down/up cycle + - gbefb: Set default of FB_GBE_MEM to 4 MB + - XFS ftruncate() bug could expose stale data (CVE-2006-0554) + - sys_signal: initialize ->sa_mask + - do_sigaction: cleanup ->sa_mask manipulation + - fix zap_thread's ptrace related problems + - fix deadlock in ext2 + - cfi: init wait queue in chip struct + - sd: fix memory corruption with broken mode page headers + - sbp2: fix another deadlock after disconnection + - skge: speed setting + - skge: fix NAPI/irq race + - skge: genesis phy initialization fix + - skge: fix SMP race + - x86_64: Check for bad elf entry address (CVE-2006-0741) + - alsa: fix bogus snd_device_free() in opl3-oss.c + - ppc32: Put cache flush routines back into .relocate_code section + - sys32_signal() forgets to initialize ->sa_mask + - Normal user can panic NFS client with direct I/O (CVE-2006-0555) + * Deactivate merged duplicates: s390-klibc-buildfix.patch, + powerpc-relocate_code.patch. + * Add stable Release 2.6.15.6: + - Don't reset rskq_defer_accept in reqsk_queue_alloc + - fs/nfs/direct.c compile fix + - mempolicy.c compile fix, make sure BITS_PER_BYTE is defined + - [IA64] die_if_kernel() can return (CVE-2006-0742) + + [ Sven Luther ] + * [powerpc] Disabled CONFIG_IEEE1394_SBP2_PHYS_DMA, which was broken on + powerpc64, as it used the long deprecated bus_to_virt symbol. + (Closes: #330225) + * [powerpc] Fixed gettimeofday breakage causing clock drift. + + -- Bastian Blank Mon, 6 Mar 2006 11:06:28 +0100 + +linux-2.6 (2.6.15-7) unstable; urgency=low + + [ Norbert Tretkowski ] + * [alpha] Disabled CONFIG_ALPHA_LEGACY_START_ADDRESS for -alpha-generic and + -alpha-smp flavours, and introduced a new -alpha-legacy flavour for MILO + based machines, which has CONFIG_ALPHA_LEGACY_START_ADDRESS enabled. + (closes: #352186) + * [alpha] Added new patch to support prctl syscall. (closes: #349765) + * [i386] Renamed kernel-image-2.6-486 to kernel-image-2.6-386, it's meant for + transition only, and kernel-image-2.6-386 is the package name in sarge. + + [ Jurij Smakov ] + * Bump build-dependency on kernel-package to 10.035, which is fixed + to build the documentation packages again. + Closes: #352000, #348332 + + [ Frederik Schüler ] + * Activate CONFIG_DVB_AV7110_OSD on alpha amd64 and ia64. + Closes: #353292 + * Deactivate CONFIG_FB_ATY_XL_INIT on all architectures: it is broken and + already removed in 2.6.16-rc. + Closes: #353310 + + [ Christian T. Steigies ] + * [m68k] build in cirrusfb driver + + -- Bastian Blank Tue, 21 Feb 2006 17:35:21 +0000 + +linux-2.6 (2.6.15-6) unstable; urgency=low + + [ Bastian Blank ] + * Moved the mkvmlinuz support patch modification to a -1 version of the + patch. + + [ maximilian attems ] + * Add stable treee 2.6.15.4 + - PCMCIA=m, HOSTAP_CS=y is not a legal configuration + - Input: iforce - do not return ENOMEM upon successful allocation + - x86_64: Let impossible CPUs point to reference per cpu data + - x86_64: Clear more state when ignoring empty node in SRAT parsing + - x86_64: Dont record local apic ids when they are disabled in MADT + - Fix keyctl usage of strnlen_user() + - Kill compat_sys_clock_settime sign extension stub. + - Input: grip - fix crash when accessing device + - Input: db9 - fix possible crash with Saturn gamepads + - Input: iforce - fix detection of USB devices + - Fixed hardware RX checksum handling + - SCSI: turn off ordered flush barriers + - Input: mousedev - fix memory leak + - seclvl settime fix + - fix regression in xfs_buf_rele + - md: remove slashes from disk names when creation dev names in sysfs + - d_instantiate_unique / NFS inode leakage + - dm-crypt: zero key before freeing it + - bridge: netfilter races on device removal + - bridge: fix RCU race on device removal + - SELinux: fix size-128 slab leak + - __cmpxchg() must really always be inlined + - emu10k1 - Fix the confliction of 'Front' control + - Input: sidewinder - fix an oops + * Deactivate merged alpha-cmpxchg-inline.patch, sparc64-clock-settime.patch. + + [ Christian T. Steigies ] + * [m68k] Add fix for m68k/buddha IDE and m68k/mac SCSI driver + * [m68k] Patch by Peter Krummrich to stop flickering pixels with PicassoII + * [m68k] make Amiga keyboard usable again, patch by Roman Zippel + * [m68k] prevent wd33c93 SCSI driver from crashing the kernel, patch by Roman Zippel + * [m68k] remove SBCs from VME descriptions (closes: #351924) + + -- Frederik Schüler Fri, 10 Feb 2006 15:33:21 +0000 + +linux-2.6 (2.6.15-5) unstable; urgency=low + + [ Martin Michlmayr ] + * Add a fix for the input support for the ixp4xx beeper driver from + 2.6.16-rc2. + * Add stable tree 2.6.15.3: + - Fix extra dst release when ip_options_echo fails (CVE-2006-0454) + + [ Sven Luther ] + * [powerpc] Removed -o root -g root option to mkvmlinuz support patch. + (Closes: #351412) + + -- Sven Luther Tue, 7 Feb 2006 19:23:14 +0000 + +linux-2.6 (2.6.15-4) unstable; urgency=low + + [ Jurij Smakov ] + * [sparc64] Add sparc64-clock-settime.patch to fix the incorrect + handling of the clock_settime syscall arguments, which resulted + in a hang when trying to set the date using 'date -s'. Patch + by David Miller is applied upstream. Thanks to Ludovic Courtes + and Frans Pop for reporting and testing. + Ref: http://marc.theaimsgroup.com/?t=113861017400002&r=1&w=2 + + [ Christian T. Steigies ] + * [m68k] update m68k patch and config to 2.6.15 + * [m68k] SCSI drivers need to be built in until ramdisk generator tools + supports loading scsi modules + * [m68k] ISCSI and IDE-TAPE don't compile, disabled + * [m68k] set CC_OPTIMIZE_FOR_SIZE=n + * [m68k] added vmeints patch which fixes building for vme + + [ maximilian attems ] + * Use initramfs-tools for ia64 - fixed klibc. + * Add stable tree 2.6.15.2: + - Fix double decrement of mqueue_mnt->mnt_count in sys_mq_open + - (CVE-2005-3356) + - Mask off GFP flags before swiotlb_alloc_coherent + - usb-audio: don't use empty packets at start of playback + - Make second arg to skb_reserved() signed. + - Input: HID - fix an oops in PID initialization code + - Fix oops in ufs_fill_super at mount time + - Kill blk_attempt_remerge() + - Fix i2o_scsi oops on abort + - Fix mkiss locking bug + - Fix timekeeping on sparc64 ultra-IIe machines + - Someone broke reiserfs v3 mount options and this fixes it + * Deactivate sparc64-jumping-time.patch, amd64-pppd-fix.patch incl in aboves. + * Add s390-klibc-buildfix.patch, regression due to header file changes. + + [ Steve Langasek ] + * [alpha] set __attribute__((always_inline)) on __cmpxchg(), to avoid + wrong optimizations with -Os (Closes: #347556). + + [ Martin Michlmayr ] + * Add input support for the ixp4xx beeper driver (Alessandro Zummo). + * [arm] Add NSLU2 specific portion of ixp4xx beeper driver (Alessandro Zummo). + * [arm/nslu2] Build PPP as a module. + * [arm/nslu2] Enable wireless. + * [arm/nslu2] Enable most USB modules. + * [arm/nslu2] Enable ALSA and USB sound modules. + * [arm/nslu2] Set 4 MB as the size of the initrd in the kernel cmd line. + * [arm/footbridge] Set CONFIG_BLK_DEV_RAM_SIZE to 8192. + * [armeb] Add support for big-endian ARM. + * [armeb/nslu2] Use the nslu2 config from arm. + + [ Frederik Schüler ] + * [amd64] Add amd64-pppd-fix.patch to fix kernel panic when using pppd. + (Closes: #347711) + * Add 64bit-vidiocswin-ioctl-fix.patch to fix VIDIOCSWIN ioctl on 64bit + kernel 32bit userland setups. (Closes: #349338) + + [ Sven Luther ] + * [powerpc] Adapted apus config file to be more modular and in sync with the + other powerpc configs. Scsi drivers are disabled as they don't build + cleanly though (need some esp stuff). + * [powerpc] Default to initramfs-tools as initramfs generator, as klibc + build is fixed now. + + [ Bastian Blank ] + * [powerpc] Fix dependencies of image packages. + + -- maximilian attems Wed, 1 Feb 2006 11:34:20 +0100 + +linux-2.6 (2.6.15-3) unstable; urgency=low + + [ Martin Michlmayr ] + * [arm] Update configs for 2.6.15; closes: #347998. + * [arm] Activate tmpfs. + * [arm] Allow modules to be unloaded. + * [arm] Enable CONFIG_INPUT_EVDEV since yaird needs this module in + order to generate initrds. + * [arm/footbridge] Activate IDEPCI so SL82C105 will really be + compiled in. + * [arm/footbridge] Activate the right network drivers (Tulip and + NE2K). + * [arm/footbridge] Enable more framebuffer drivers. + * debian/patches/arm-fix-dc21285.patch: Fix compilation of DC21285 + flash driver. + * [arm/footbridge] Enable MTD and the DC21285 flash driver. + * [arm/footbridge] Enable RAID and LVM modules. + * [arm/footbridge] Enable USB modules. + * [arm/nslu2] Add an image for Network Storage Link for USB 2.0 Disk + Drives. + * debian/patches/arm-memory-h-page-shift.patch: Fix error "PAGE_SHIFT + undeclared" (Rod Whitby). + * debian/patches/mtdpart-redboot-fis-byteswap.patch: recognise a foreign + endian RedBoot partition table (John Bowler). + * debian/patches/maclist.patch: Add support for the maclist interface + (John Bowler). + * debian/patches/arm-nslu2-maclist.patch: Add NSLU2 maclist support + (John Bowler). + * [arm/nslu2] Activate maclist. + + [ maximilian attems ] + * Add stable tree 2.6.15.1: + - arch/sparc64/Kconfig: fix HUGETLB_PAGE_SIZE_64K dependencies + - moxa serial: add proper capability check + - fix /sys/class/net//wireless without dev->get_wireless_stats + - Don't match tcp/udp source/destination port for IP fragments + - Fix sys_fstat64() entry in 64-bit syscall table. + - UFS: inode->i_sem is not released in error path + - netlink oops fix due to incorrect error code + - Fix onboard video on SPARC Blade 100 for 2.6.{13,14,15} + - Fix DoS in netlink_rcv_skb() (CVE-2006-0035) + - fix workqueue oops during cpu offline + - Fix crash in ip_nat_pptp (CVE-2006-0036) + - Fix another crash in ip_nat_pptp (CVE-2006-0037) + - ppc32: Re-add embed_config.c to ml300/ep405 + - Fix ptrace/strace + - vgacon: fix doublescan mode + - BRIDGE: Fix faulty check in br_stp_recalculate_bridge_id() + - skge: handle out of memory on ring changes + * Drop merged patch: + - sparc64-atyfb-xl-gr-final.patch + + [ Simon Horman ] + * Fix booting on PReP machines + (Closes: #348040) + powerpc-relocate_code.patch + + -- Simon Horman Tue, 17 Jan 2006 18:01:17 +0900 + +linux-2.6 (2.6.15-2) unstable; urgency=low + + [ maximilian attems ] + * Default to initramfs-tools as initramfs generator for amd64, hppa, i386, + alpha and sparc. More archs will be added once klibc matures. + (Closes: #346141, #343147, #341524, #346305) + * Backport alsa patch for opl3 - Fix the unreleased resources. + (Closes: #346273) + * Readd buslogic-pci-id-table.patch. + + [ dann frazier ] + * [ia64] Update config for 2.6.15. + + [ Frederik Schüler ] + * Make CONFIG_IPW2100 a per-architecture option and deactivate it on all + architectures but i386. (Closes: #344515) + + [ Sven Luther ] + * Removed spurious file from powerpc-apus patch. (Closes: #346159) + + [ Norbert Tretkowski ] + * Backport the generic irq framework for alpha. (closes: #339080) + + [ Bastian Blank ] + * Remove pre-sarge conflict with hotplug. + * Fix hppa diff to apply. + * Make the latest packages depend on the corect version of the real images. + (closes: #346366) + + -- Bastian Blank Tue, 10 Jan 2006 16:54:21 +0100 + +linux-2.6 (2.6.15-1) unstable; urgency=low + + [ Sven Luther ] + * New upstream release. + * [powerpc] Now use ARCH=powerpc for 64bit powerpc flavours, 32bit still + stays with ARCH=ppc for now. + * [powerpc] Readded PReP Motorola PowerStack II Utah IDE interrupt + (Closes: #345424) + * [powerpc] Fixed apus patch. + * Added make-kpkg --arch option support to gencontrol.py. + * Added debian/bin/kconfig.ml to process config file snipplet, so we can + preserve the pre 2.6.15 ordering of config file snipplets. Upto 2.6.15 + the kernel Kconfig magic apparently kept the later occuring config options, + but it seems that this is no more the case. Instead of catting the config + files together, not use the kconfig.ml script to read in the files from + more generic to more specific, and keep only the more specific. + + [ Bastian Blank ] + * [s390] Update configs. + + [ Kyle McMartin ] + * [hppa] Snag latest hppa.diff from cvs.parisc-linux.org. + * [hppa] Update configs for 2.6.15. + * [hppa] Change parisc kernel names to something less ambiguous. + + [ dann frazier ] + * [ia64] Update ia64 configs + + [ maximilian attems ] + * Drop modular-ide.patch, nacked by ide upstream. Prevents udev to load + ide-generic and those successfull boots with initramfs-tools. + * Disable CONFIG_USB_BANDWIDTH, causes major trouble for alsa usb cards. + + [ Norbert Tretkowski ] + * [alpha] Removed conflict with initramfs-tools, thanks vorlon for finding + the klibc bug! + + [ Jonas Smedegaard ] + * Adjust short description of transitional package kernel-image-2.6- + 486 to mention 2.6 (not 2.6.12). + * Clean duplicate Kconfig options. + + [ Frederik Schüler ] + * Add updated version of drivers-scsi-megaraid_splitup.patch. + * Deactivate CONFIG_IDE_TASK_IOCTL on alpha and ia64 and make it a global + option. + * Make CONFIG_VIDEO_SAA7134 a global option. + * New option CONFIG_CC_OPTIMIZE_FOR_SIZE set per-arch. + * Rename i386 368 flavour to 486. + * Add myself to uploaders. + * Readdition of qla2xxx drivers, as firmware license has been fixed. + * Make CONFIG_PACKET, PACKET_MM and UNIX builtin on all architectures: + statically linked has better performance then modules due to TLB issue. + * clean up debian-patches dir: remove all obsolete patches: + - alpha-compile-fix.patch: obsolete + - amd64-int3-fix.patch: fixed since 2.6.12 + - net-ipconntrack-nat-fix.patch: merged upstream after 2.6.14 release + - net-nf_queue-oops.patch: merged upstream after 2.6.14 release + - qla2xxx-removed.patch: obsolete + * Drop M386 support remains from the i386 386 flavour: built with M486 + from now on. + + [ Martin Michlmayr ] + * [arm] Don't define "compiler" since GCC 4.x is the default now anyway. + * [arm] Add descriptions for "class" and "longclass". + * [arm] Compile CONFIG_BLK_DEV_SL82C105 support into the kernel on + Footbridge. + * [arm] Compile ext3 support into the kernel on Footbridge. + * [arm] Turn on CONFIG_SERIAL_8250 support on Footbridge. + + [ Jurij Smakov ] + * [sparc] Correct the patch for the atyfb framebuffer driver + (sparc64-atyfb-xl-gr.patch) to finally fix the console and X + image defects on Blade 100/150. The new patch is named + sparc64-atyfb-xl-gr-final.patch to avoid the confusion. + Thanks to Luis F. Ortiz for fixing the patch and Luigi Gangitano + for testing it out. + * Drop tty-locking-fixes9.patch, which was preventing the oops during + shutdown on some sparc machines with serial console. Proper fix has + been incorporated upstream. + + [ Simon Horman ] + * Enable MKISS globally (closes: #340215) + * Add recommends libc6-i686 to 686 and k7 image packages + (closes: #278729) + * Enable OBSOLETE_OSS_USB_DRIVER and USB_AUDIO + as alsa snd-usb-audio still isn't quite there. + I expect this to be re-disabled at some stage, + possibly soon if it proves to be a source of bugs. + (closes: #340388) + + -- Sven Luther Tue, 3 Jan 2006 06:48:07 +0000 + +linux-2.6 (2.6.14-7) unstable; urgency=low + + [ maximilian attems ] + * Add stable tree 2.6.14.5 fixes: + - setting ACLs on readonly mounted NFS filesystems (CVE-2005-3623) + - Fix bridge-nf ipv6 length check + - Perform SA switchover immediately. + - Input: fix an OOPS in HID driver + - Fix hardware checksum modification + - kernel/params.c: fix sysfs access with CONFIG_MODULES=n + - Fix RTNLGRP definitions in rtnetlink.h + - Fix CTA_PROTO_NUM attribute size in ctnetlink + - Fix unbalanced read_unlock_bh in ctnetlink + - Fix NAT init order + - Fix incorrect dependency for IP6_NF_TARGET_NFQUEUE + - dpt_i2o fix for deadlock condition + - SCSI: fix transfer direction in sd (kernel panic when ejecting iPod) + - SCSI: fix transfer direction in scsi_lib and st + - Fix hardware rx csum errors + - Fix route lifetime. + - apci: fix NULL deref in video/lcd/brightness + * Disable CONFIG_USB_BANDWIDTH, causes major trouble on alsa usb cards. + (Closes: #344939) + + -- maximilian attems Tue, 27 Dec 2005 20:50:28 +0100 + +linux-2.6 (2.6.14-6) unstable; urgency=low + + [ Kyle McMartin ] + * Change parisc kernel names to something less ambiguous. + + [ maximilian attems ] + * Drop modular-ide.patch, nacked by ide upstream. Prevents udev to load + ide-generic and those successfull boots with initramfs-tools. + * Add stable tree 2.6.14.4 with the following fixes: + - drivers/scsi/dpt_i2o.c: fix a user-after-free + - drivers/message/i2o/pci.c: fix a use-after-free + - drivers/infiniband/core/mad.c: fix a use-after-free + - DVB: BUDGET CI card depends on STV0297 demodulator + - setkeys needs root + - Fix listxattr() for generic security attributes + - AGPGART: Fix serverworks TLB flush. + - Fix crash when ptrace poking hugepage areas + - I8K: fix /proc reporting of blank service tags + - i82365: release all resources if no devices are found + - bonding: fix feature consolidation + - libata: locking rewrite (== fix) + - cciss: bug fix for BIG_PASS_THRU + - ALSA: nm256: reset workaround for Latitude CSx + - cciss: bug fix for hpacucli + - V4L/DVB: Fix analog NTSC for Thomson DTT 761X hybrid tuner + - BRIDGE: recompute features when adding a new device + - 32bit integer overflow in invalidate_inode_pages2() + - USB: Adapt microtek driver to new scsi features + - ide-floppy: software eject not working with LS-120 drive + - Add try_to_freeze to kauditd + - V4L/DVB (3135) Fix tuner init for Pinnacle PCTV Stereo + - NETLINK: Fix processing of fib_lookup netlink messages + - ACPI: fix HP nx8220 boot hang regression + + [ Norbert Tretkowski ] + * [alpha] Removed conflict with initramfs-tools, thanks vorlon for finding + the klibc bug! + + [ Frederik Schüler ] + * Add updated drivers-scsi-megaraid_splitup.patch. (Closes: #317258) + * Add ppc64-thermal-overtemp.patch to fix a thermal control bug in G5 + machines. (Closes: #343980) + * Unpatch the following patches which are included in 2.6.14.4: + - setkeys-needs-root-1.patch + - setkeys-needs-root-2.patch + - mm-invalidate_inode_pages2-overflow.patch + - net-bonding-consolidation-fix.patch + + -- Frederik Schüler Tue, 20 Dec 2005 18:50:41 +0000 + +linux-2.6 (2.6.14-5) unstable; urgency=low + + [ dann frazier ] + * ia64-new-assembler-fix.patch + Fix ia64 builds with newer assembler (Closes: #341257) + + [ Sven Luther ] + * [powerpc] incremented ramdisk size to 24576 from 8192, needed by the + graphical installer, maybe we can bring this to 16384 later. + + [ Simon Horman ] + * Add recommends libc6-i686 to 686 and k7 image packages + (closes: #278729) + * Enable OBSOLETE_OSS_USB_DRIVER and USB_AUDIO + as alsa snd-usb-audio still isn't quite there. + I expect this to be re-disabled at some stage, + possibly soon if it proves to be a source of bugs. + (closes: #340388) + + [ dann frazier ] + * buslogic-pci-id-table.patch + add a pci device id table to fix initramfs-tools discovery. + (closes #342057) + * fix feature consolidation in bonding driver. (closes #340068) + + -- dann frazier Thu, 8 Dec 2005 10:59:31 -0700 + +linux-2.6 (2.6.14-4) unstable; urgency=low + + [ dann frazier ] + * setkeys-needs-root-1.patch, setkeys-needs-root-2.patch: + [SECURITY] Require root privilege to write the current + function key string entry of other user's terminals. + See CVE-2005-3257 (Closes: #334113) + + [ Simon Horman ] + * Enable MKISS globally (closes: #340215) + * mm-invalidate_inode_pages2-overflow.patch + [SECURITY] 32bit integer overflow in invalidate_inode_pages2() (local DoS) + * ctnetlink-check-if-protoinfo-is-present.patch + [SECURITY] ctnetlink: check if protoinfo is present (local DoS) + * ctnetlink-fix-oops-when-no-icmp-id-info-in-message.patch + [SECURITY] ctnetlink: Fix oops when no ICMP ID info in message (local DoS) + + [ Sven Luther ] + * Re-added powerpc/apus patch, now that Roman Zippel merged it in. + * Let's create asm-(ppc|ppc64) -> asm-powerpc symlink farm. (Closes: #340571) + + [ maximilian attems ] + * Add 2.6.14.3 patch - features changelog: + - isdn/hardware/eicon/os_4bri.c: correct the xdiLoadFile() signature + - x86_64/i386: Compute correct MTRR mask on early Noconas + - PPTP helper: Fix endianness bug in GRE key / CallID NAT + - nf_queue: Fix Ooops when no queue handler registered + - ctnetlink: check if protoinfo is present + - ip_conntrack: fix ftp/irc/tftp helpers on ports >= 32768 + - VFS: Fix memory leak with file leases + - hwmon: Fix lm78 VID conversion + - hwmon: Fix missing it87 fan div init + - ppc64 memory model depends on NUMA + - Generic HDLC WAN drivers - disable netif_carrier_off() + - ctnetlink: Fix oops when no ICMP ID info in message + - Don't auto-reap traced children + - packet writing oops fix + - PPTP helper: fix PNS-PAC expectation call id + - NAT: Fix module refcount dropping too far + - Fix soft lockup with ALSA rtc-timer + - Fix calculation of AH length during filling ancillary data. + - ip_conntrack TCP: Accept SYN+PUSH like SYN + - refcount leak of proto when ctnetlink dumping tuple + - Fix memory management error during setting up new advapi sockopts. + - Fix sending extension headers before and including routing header. + - hwmon: Fix missing boundary check when setting W83627THF in0 limits + * Remove ctnetlink-check-if-protoinfo-is-present.patch, + net-nf_queue-oops.patch - already included in 2.6.14.3. + + [ Frederik Schüler ] + * Make CONFIG_PACKET, PACKET_MM and UNIX builtin on all architectures: + statically linked has better performance then modules due to TLB issue. + * Add myself to uploaders. + + -- Frederik Schüler Sat, 26 Nov 2005 13:18:41 +0100 + +linux-2.6 (2.6.14-3) unstable; urgency=low + + [ Norbert Tretkowski ] + * [alpha] Switch to gcc 4.0. + * [alpha] Conflict with initramfs-tools, klibc is broken on alpha. + * [alpha] Enabled CONFIG_KOBJECT_UEVENT in arch/alphaconfig to fix trouble + with latest udev, thanks to Uwe Schindler for reporting. (closes: #338911) + * Bumped ABI revision: + + ABI changes on sparc and alpha because of compiler switch. + + 2.6.14.1 changes ABI of procfs. + + [ Sven Luther ] + * Set default TCP congestion algorithm to NewReno + BIC (Closes: #337089) + + [ maximilian attems ] + * Reenable CONFIG_SOFTWARE_SUSPEND on i386 and ppc, resume=/dev/ + must be set by boot loader. (Closes: #267600) + * Set CONFIG_USB_SUSPEND on i386. Usefull for suspend to ram and apm suspend. + * Add 2.6.14.1 patch: + - Al Viro: CVE-2005-2709 sysctl unregistration oops + * Add 2.6.14.2 patch: + - airo.c/airo_cs.c: correct prototypes + - fix XFS_QUOTA for modular XFS (closes: #337072) + - USB: always export interface information for modalias + - NET: Fix zero-size datagram reception + - fix alpha breakage + - Oops on suspend after on-the-fly switch to anticipatory i/o scheduler + - ipvs: fix connection leak if expire_nodest_conn=1 + - Fix ptrace self-attach rule + - fix signal->live leak in copy_process() + - fix de_thread() vs send_group_sigqueue() race + - prism54 : Fix frame length + - tcp: BIC max increment too large + * Remove alpha compile fix as contained in 2.6.14.2 + * Readd CONFIG_XFS_QUOTA=y. + * Disable ACPI cutoff year on i386, was set to 2001. + No need for acpi=force on boot. + + [ Jurij Smakov ] + * Fix the install-image script to correctly include all the necessary + stuff in scripts. (Closes: #336424) + * Enable CONFIG_SND_ALI5451 on sparc. + * Switch sparc to gcc-4.0. Thanks to Norbert for making sure it successfully + builds a working kernel now. + * Apply patch to fix ATI framebuffer output corruption on SunBlade 100 + (sparc64-atyfb-xl-gr.patch). Thanks to Luigi Gangitano. (Closes: #321200) + * Disable CONFIG_PARPORT_PC_FIFO on sparc, since it causes a hang whenever + something is sent to the parallel port device. Thanks to Attilla + (boera at rdslink.ro) for pointing that out. + + [ Simon Horman ] + * [386, AMD64] Set CONFIG_FRAMEBUFFER_CONSOLE=y instead of m. + As vesadb now built into the kernel, after finally dropping the + debian-specific patch to make it modular, make fbcons builtin too, else + all sorts of weird stuff happens which is hard for the inird builders to + automatically compenste for. (Closes: #336450) + * Redisable CONFIG_SOFTWARE_SUSPEND on ppc/miboot as it required + CONFIG_PM to compile. + * [NETFILTER] nf_queue: Fix Ooops when no queue handler registered + This is a regression introduced in 2.6.14. + net-nf_queue-oops.patch. (Closes: #337713) + * Make manuals with defconfig, as is required for kernel-package 10.008 + + [ dann frazier ] + * net-ipconntrack-nat-fix.patch - fix compilation of + ip_conntrack_helper_pptp.c when NAT is disabled. (Closes: #336431) + + [ Christian T. Steigies ] + * update m68k.diff to 2.6.14 + * add m68k-*vme* patches + * disable macsonic driver until the dma patch is fixed + * disable IEEE80211 drivers for all of m68k + + [ Frederik Schüler ] + * activate CONFIG_SECURITY_NETWORK to fix SElinux operation. + (Closes: #338543) + + -- Norbert Tretkowski Mon, 14 Nov 2005 10:23:05 +0100 + +linux-2.6 (2.6.14-2) unstable; urgency=low + + [ Simon Horman ] + * [SECURITY] Avoid 'names_cache' memory leak with CONFIG_AUDITSYSCALL + This fix, included as part of the 2.6.13.4 patch in + 2.6.13+2.6.14-rc4-0experimental.1 is CVE-2005-3181 + * Fix genearation of .extraversion, again (closes: #333842) + * Add missing kernel-arch and kernel-header-dirs to defines + so headers get included. (closes: #336521) + N.B: I only filled in arches where other's hadn't done so alread. + Please fix if its wrong. + * Allow powerpc64 to compile with AUDIT enabled but + AUDITSYSCALL disabled. powerpc64-audit_sysctl-build.patch + + [ dann frazier ] + * Update hppa.diff to 2.6.14-pa0 + + [ Norbert Tretkowski ] + * [alpha] New patch to include compiler.h in barrier.h, barrier() is used in + non-SMP case. + * [alpha] Added kernel-header-dirs and kernel-arch to debian/arch/alpha/defines + to include asm-alpha in linux-headers package. + * Added myself to Uploaders. + + [ Frederik Schüler ] + * [amd64] use DISCONTIGMEM instead of SPARSEMEM on amd64-k8-smp flavour to + fix bootup kernel panic. + * [amd64] include asm-x86_64 in linux-headers package. + * Deactivate AUDITSYSCALL globally, it slows down the kernel and is not + needed for selinux at all. + + -- Simon Horman Tue, 1 Nov 2005 15:27:40 +0900 + +linux-2.6 (2.6.14-1) unstable; urgency=low + + [ Sven Luther ] + * New upstream release. + + [ Norbert Tretkowski ] + * [alpha] Update arch/alpha/config* for 2.6.14. + + [ Simon Horman ] + * Fix misformatting of long description of + linux-patch-debian-linux-patch-debian-X.Y.Z. + templates/control.main.in + (closes: #335088) + * Make sure version is seeded in apply and unapply scripts. + Actually changed in some earlier, post 2.6.12, release, + but the changelog seems to be missing. + (closes: #324583) + + [ dann frazier ] + * [ia64] Disable the CONFIG_IA64_SGI_SN_XP module. This forces + CONFIG_GENERIC_ALLOCATOR and CONFIG_IA64_UNCACHED_ALLOCATOR to y, which + appears to break on zx1 systems. + + -- Simon Horman Fri, 28 Oct 2005 16:26:03 +0900 + +linux-2.6 (2.6.13+2.6.14-rc5-0experimental.1) experimental; urgency=low + + [ Sven Luther ] + * Upgraded to 2.6.14-rc5. + + [ Jonas Smedegaard ] + * Quote variables in debian/rules.real and postinstall (making it + safer to run with weird characters in path of build environment). + + [ Bastian Blank ] + * Add some missing files from scripts to headers packages. + * Add new patch powerpc-build-links.patch: Emit relative symlinks in + arch/ppc{,64}/include. + * Include arch/*/include into headers package. + + -- Sven Luther Tue, 25 Oct 2005 03:56:11 +0000 + +linux-2.6 (2.6.13+2.6.14-rc4-0experimental.1) experimental; urgency=low + + [ Sven Luther ] + * Upgraded to 2.6.14-rc4. + + [ Simon Horman ] + * Fix genearation of .extraversion (closes: #333842) + + [ dann frazier ] + * Enhance the linux-source description to explain the types of patches + Debian adds to it. (closes: #258043) + * Correct linux-patch-debian description. It replaces the + kernel-patch-debian packages, not the kernel-source packages. + + [ Jonas Smedegaard ] + * Fix building from within a very long dir (all patches was applied at + once - exhausting shell commandline, now applied one by one). + * Add Simon Horman, Sven Luther and myself as Uploaders. + + [ Bastian Blank ] + * Use list of revisions in patch scripts. + * Use correct names for tarball and scripts. + + [ Jurij Smakov ] + * [i386] Set the CONFIG_HPET_EMULATE_RTC option to make the clock + work properly on certain Dell machines. This required setting the + CONFIG_RTC option to 'y' instead of 'm'. (closes: #309909) + [i386] Enable VIDEO_CX88 and VIDEO_CX88_DVB (both set to 'm') by + popular demand. (closes: #330916) + + [ Norbert Tretkowski ] + * [alpha] Update arch/alpha/config for 2.6.13. + + [ Kyle McMartin ] + * [hppa] Oops. Fix linux-headers not including asm-parisc by adding + headers_dirs = parisc to Makefile.inc. + + [ maximilian attems ] + * Set CONFIG_FB_VESA=y for i386 and amd64 configs. (closes: #333003) + + [ Sven Luther ] + * [powerpc] Fixed apus build, now use mkvmlinuz too to generate the vmlinuz + kernel. + * Fixed control.image.in to depend on : + initramfs-tools | yaird | linux-ramdisk-tool + where linux-ramdisk-tools is the virtual package provided by all + initrd/initramfs generating tools. + + [ Frederik Schüler ] + * deactivate FB_RIVA on all architectures. + * deactivate BLK_DEV_IDESCSI on all architectures. + * Added patch-2.6.13.4: + - [SECURITY] key: plug request_key_auth memleak + See CAN-2005-3119 + - [SECURITY] Fix drm 'debug' sysfs permissions + See CAN-2005-3179 + - [SECURITY] Avoid 'names_cache' memory leak with CONFIG_AUDITSYSCALL + - [SPARC64] Fix userland FPU state corruption. + - BIC coding bug in Linux 2.6.13 + - [SECURITY] orinoco: Information leakage due to incorrect padding + See CAN-2005-3180 + - ieee1394/sbp2: fixes for hot-unplug and module unloading + + [ Christian T. Steigies ] + * disable CONFIG_EXT2_FS_XIP for m68k like on all(?) other arches + * deactivate OKTAGON_SCSI for amiga/m68k until it can be compiled again + * deactivate CONFIG_KEYBOARD_HIL_OLD, CONFIG_KEYBOARD_HIL, CONFIG_MOUSE_HIL, + CONFIG_HIL_MLC, and CONFIG_HP_SDC for hp/m68k + * update m68k.diff for 2.6.13 + * split out patches that do not intefere with other arches to + patches-debian/m68k-* + + -- Bastian Blank Fri, 21 Oct 2005 12:17:47 +0000 + +linux-2.6 (2.6.13-1) experimental; urgency=low + + * New upstream release "git booost": + - new arch xtensa + - kexec/kdump + - execute-in-place + - inotify (closes: #304387) + - time-sharing cfq I/O scheduler + - manual driver binding + - voluntary preemption + - user-space I/O initiation for InfiniBand + - new speedy DES (crypto) implementation + - uml "almost-skas" mode support + - 250 HZ default (closes: #320366) + - fixes all over (alsa, archs, ide, input, ntfs, scsi, swsusp, usb, ..) + - orinoco driver updates (closes: #291684) + - md, dm updates (closes: #317787) + + [ Frederik Schüler ] + * [amd64] Added class and longclass descriptions for amd64 flavours. + * [amd64] add amd64-tlb-flush-sigsegv-fix.patch: disable tlb flush + filtering on smp systems to workaround processor errata. + * backport kernel-api-documentation-generation-fix.diff from git to fix + documentation build. + * Added patch-2.6.13.1: + - raw_sendmsg DoS (CAN-2005-2492) + - 32bit sendmsg() flaw (CAN-2005-2490) + - Reassembly trim not clearing CHECKSUM_HW + - Use SA_SHIRQ in sparc specific code. + - Fix boundary check in standard multi-block cipher processors + - 2.6.13 breaks libpcap (and tcpdump) + - x86: pci_assign_unassigned_resources() update + - Fix PCI ROM mapping + - aacraid: 2.6.13 aacraid bad BUG_ON fix + - Kconfig: saa7134-dvb must select tda1004x + + [ Simon Horman ] + * Disable BSDv3 accounting on hppa and alpha, it was already + disabled on all other architectures. Also unify BSD accounting + config into top level config, rather than per flavour configs. + * [SECURITY] The seq_file memory leak fix included in 2.6.12-6 + as part of upstream's 2.6.12.6 patchset is now CAN-2005-2800. + + [ Jurij Smakov, Simon Horman ] + * Ensure that only one kernel-manual/linux-manual package can + be installed at a time to avoid file conflicts. (closes: #320042) + + [ Bastian Blank ] + * Move audit, preempt and security settings to core config file. + * Fix powerpc configuration. + * Add debian version information to kernel version string. + * Drop coreutils | fileutils dependencies. + * Drop modular-vesafb patch. (closes: #222374, #289810) + + [ Christian T. Steigies ] + * update m68k.diff for linux-2.6.13 + * add m68k-42_dma.patch and m68k-sonic.patch that will be in upstream 2.6.14 + (which makes sun3 build fail, needs fixing) + + [ maximilian attems ] + * Drop drivers-add-scsi_changer.patch (merged) + * Drop drivers-ide-dma-blacklist-toshiba.patch (merged) + * Drop drivers-ide-__devinit.patch (merged) + * Added patch-2.6.13.2: + - USB: ftdi_sio: custom baud rate fix + - Fix up more strange byte writes to the PCI_ROM_ADDRESS config word + - Fix MPOL_F_VERIFY + - jfs: jfs_delete_inode must call clear_inode + - Fix DHCP + MASQUERADE problem + - Sun HME: enable and map PCI ROM properly + - Sun GEM ethernet: enable and map PCI ROM properly + - hpt366: write the full 4 bytes of ROM address, not just low 1 byte + - forcedeth: Initialize link settings in every nv_open() + - Lost sockfd_put() in routing_ioctl() + - lost fput in 32bit ioctl on x86-64 + * Added patch-2.6.13.3: + - Fix fs/exec.c:788 (de_thread()) BUG_ON + - Don't over-clamp window in tcp_clamp_window() + - fix IPv6 per-socket multicast filtering in exact-match case + - yenta oops fix + - ipvs: ip_vs_ftp breaks connections using persistence + - uml - Fix x86_64 page leak + - skge: set mac address oops with bonding + - tcp: set default congestion control correctly for incoming connections + + [ Sven Luther ] + * [powerpc] Added hotplug support to the mv643xx_eth driver : + powerpc-mv643xx-hotplug-support.patch + thanks go to Nicolas Det for providing the patch. + * [powerpc] Modified a couple of configuration options for the powerpc64 + flavour, fixes and enhances Apple G5 support (Closes: #323724, #328324) + * [powerpc] Added powerpc-miboot flavour to use exclusively with oldworld + powermac miboot floppies for debian-installer. + * [powerpc] Checked upgraded version of the apus patches, separated them in + a part which is safe to apply, and one which needs checking, and is thus + not applied yet. + + [ Kyle McMartin ] + * [hppa] Update hppa.diff to 2.6.13-pa4. + * [hppa] Add space register fix to pacache.S to hppa.diff. + + [ dann frazier ] + * Add a note to README.Debian that explains where users can find the .config + files used to generate the linux-image packages. Closes: #316809 + * [ia64] Workaround #325070 until upstream works out an acceptable solution. + This bug breaks module loading on non-SMP ia64 kernels. The workaround + is to temporarily use an SMP config for the non-SMP kernels. (Note that + John Wright is running benchmarks to determine the overhead of running + an SMP kernel on UP systems to help decide if this should be a + permanent change). + * [ia64] Update arch/ia64/config for 2.6.13 + + -- Simon Horman Thu, 6 Oct 2005 15:45:21 +0900 + +linux-2.6 (2.6.12-6) unstable; urgency=high + + [ Andres Salomon, Bastian Blank ] + * Change ATM and Classical-IP-over-ATM to be modular, instead of being + statically included. (closes: #323143) + + [ Sven Luther ] + * [powerpc] powerpc-pmac-sound-check.patch: Added pmac-sound sanity check. + * [powerpc] powerpc-apus.patch: + Added preliminary apus patch to package, not applied to kernel tree yet. + + [ Simon Horman ] + * Unset CC_OPTIMIZE_FOR_SIZE in i386 config, + it breaks iproute's (and other netlink users) ability + to set routes. (closes: #322723) + * Added 2.6.12.6 + - [SECURITY: CAN-2005-2555] Restrict socket policy loading to + CAP_NET_ADMIN. + - [SECURITY] Fix DST leak in icmp_push_reply(). Possible remote + DoS? + - [SECURITY] NPTL signal delivery deadlock fix; possible local + DoS. + - fix gl_skb/skb type error in genelink driver in usbnet + - [SECURITY] fix a memory leak in devices seq_file implementation; + local DoS. + - [SECURITY] Fix SKB leak in ip6_input_finish(); local DoS. + + [ Andres Salomon ] + * [hppa] enable discontiguous memory support for 32bit hppa images, so + they build. + + -- Andres Salomon Tue, 06 Sep 2005 10:14:35 -0400 + +linux-2.6 (2.6.12-5) unstable; urgency=low + + * Change ARM to use GCC 3.3 to avoid FTBFS errors with GCC 4 + (dann frazier) + + * Remove spurious double quote character from ia64 package descriptions. + (dann frazier) + + * Add transitional meta packages (kernel-image-2.6-*) for ia64. + (dann frazier) + + * Change fuzz factor to 1, stricter patch appliance. (Maximilian Attems) + + * Enabled CONFIG_THERM_PM72 on powerpc64 flavour. (Sven Luther) + + -- Bastian Blank Tue, 16 Aug 2005 21:43:31 +0200 + +linux-2.6 (2.6.12-4) unstable; urgency=low + + * Supply correct subarch values for the powerpc images. + + -- Bastian Blank Mon, 15 Aug 2005 21:06:18 +0200 + +linux-2.6 (2.6.12-3) unstable; urgency=low + + * Added reference to old kernel-* package names to make + transition a little more obvious to end users. + A Dan Jacobson special. (Simon Horman) Closes: #321167 + + * By the time this makes it into the archive, it will + be handling kernel-image-2.6-* packages. (Simon Horman) + Closes: #321867 + + * Link palinfo statically on ia64. (dann frazier) (Closes: #321885) + + * [hppa] : + - Add hppa arch specific patch. + - Build-Depend on binutils-hppa64 and gcc-4.0-hppa64. + (Kyle McMartin) + + * Fix permissions in source tarball. (Bastian Blank) (Closes: #322409) + + * Enable the CONFIG_IP_ADVANCED_ROUTER and related options on + sparc64 to sync with other architectures. (Jurij Smakov) + Closes: #321236 + + * Include all executables as well as *.sh and *.pl files found in + scripts directory in the headers package. (Bastian Blank) + Closes: #322612, #322680, #322765 + + * Include m68k headers into the arch-common headers package on + powerpc and make sure that all the directories are linked to + properly from the flavour-specific headers packages. (Jurij Smakov) + Closes: #322610 + + * [powerpc] Enabled the powerpc64 flavour, now that we have a real biarch + toolchain in sid. Many thanks go to GOTO Masanori and Matthias Klose as + well as any other who worked on the biarch toolchain to make this happen. + + * Added 2.6.12.5 (Simon Horman) + - Fix BUG() is triggered by a call to set_mempolicy() with a negativ + first argument. + - [amd64] Fix a SRAT handling on systems with dual cores. + - [amd64] SMP timing problem + - [security] Zlib fixes See CAN-2005-2458, CAN-2005-2459 + http://sources.redhat.com/ml/bug-gnu-utils/1999-06/msg00183.html + http://bugs.gentoo.org/show_bug.cgi + - Add zlib deflateBound() + - [security] Fix error during session join. See CAN-2005-2098 + - [security] Fix keyring destructor. See CAN-2005-2099 + - Module per-cpu alignment cannot always be met + http://www.ussg.iu.edu/hypermail/linux/kernel/0409.0/0768.html + Closes: #323039 + + -- Bastian Blank Mon, 15 Aug 2005 16:42:05 +0200 + +linux-2.6 (2.6.12-2) unstable; urgency=low + + * The Kernel Team offers its condolences to the family of Jens Schmalzing + (jensen@debian), who died Saturday, July 30, 2005 in a tragic accident in + Munich. Jens was a member of the Kernel Team, and was instrumental in + taking the powerpc kernel package to 2.6, as well as maintaining MOL + and its kernel modules. + + * Add @longclass@ variable to control file autogeneration. (Andres Salomon) + + * Bump build-depends on kernel-package to a fixed version (>= 9.005). + (Jurij Smakov, Sven Luther) (closes: #319657, #320422, #321625) + + * Change default ramdisk size for sparc to 16,384K to accomodate a fatter + d-i initrd for netboot installs. + (Joshua Kwan) + + * Don't build-depend on console-tools on s390. (Bastian Blank) + + * Add ARM support. (Vincent Sanders) + + * Add ia64 descriptions. (dann frazier) + + * Strip down the scripts dir in the headers packages. (Bastian Blank) + + * Add m68k support. (Christian T. Steigies) + + * Added 2.6.12.4 (Frederik Schüler) + - Fix powernow oops on dual-core athlon + - Fix early vlan adding leads to not functional device + - sys_get_thread_area does not clear the returned argument + - bio_clone fix + - Fix possible overflow of sock->sk_policy (CAN-2005-2456) + (closes: #321401) + - Wait until all references to ip_conntrack_untracked are dropped on + unload + - Fix potential memory corruption in NAT code (aka memory NAT) + - Fix deadlock in ip6_queue + - Fix signedness issues in net/core/filter.c + - x86_64 memleak from malicious 32bit elf program + - rocket.c: Fix ldisc ref count handling + - kbuild: build TAGS problem with O= + + * Enable CONFIG_6PACK=m for all archs (Andres Salomon) + (closes: #319646) + + * Overhaul the generation of the control file. Now it is handled + by debian/bin/gencontrol.py. The debian/control target in rules + also fails now, since we don't want the control file generated + during build. Arch-specific Depends and suggests are now generated + correctly. (Bastian Blank) (Closes: #319896) + + * [powerpc] Fixed typo which made asm-ppc and asm-ppc64 not being included + in the header package. (Sven Luther) (Closes: #320817) + + * Added list of flavours built to common header package. (Sven Luther) + + -- Bastian Blank Tue, 09 Aug 2005 11:12:40 +0200 + +linux-2.6 (2.6.12-1) unstable; urgency=low + + * New upstream release: + - "git rocks" + - address space randomization + - conversion of ide driver code to the device model + - restored Philips webcam driver + - new Broadcom bcm5706 gigabit driver + - new resource limits for the audio community + - Multipath device mapper + - Intel HD Audio alsa driver + - fixes + arch updates.. + - readdition of tg3 driver, as firmware license has been fixed + + * Dropped the following patches: + - patch-2.6.11.*.patch (merged) + - powerpc-ppc64-ibmvscsi.patch (Christoph didn't like it, and it failed + to build anyways) (Sven Luther) + - doc-post_halloween.patch (unless someone can come up w/ a valid + reason for carrying around rapidly bitrotting documentation...) + (Andres Salomon) + - sparc32-hypersparc-srmmu.patch (dropped until sparc32 is working + again, and we can figure out whether it's necessary) + - fix-alpha-ext3-oops.patch (no longer needed, fixed by compiler) + - x86-i486_emu.patch (buggy and insecure 80486 instruction emulation + for 80386; we're no longer supporting this) (closes: #250468) + - amd64-outs.patch (according to + http://www.ussg.iu.edu/hypermail/linux/kernel/0502.3/1095.html, this + is unnecessary for us) (Andres Salomon) + - sparc64-rtc-mostek.patch (merged) + - sparc64-compat-nanoseconds.patch (merged) + - sparc64-sunsu-init-2.6.11.patch (merged) + - sunsab-uart-update-timeout.patch (merged) + - alpha-read-trylock.patch (different version got merged) + - powerpc-prep-motorola-irq-fix.patch (merged) + - drivers-media-video-saa7134-update.patch (merged) + - drivers-media-video-saa7134-update-2.patch (merged) + - drivers-media-video-pll-lib.patch (merged) + - drivers-media-video-pll-lib-2.patch (merged) + - drivers-media-video-tuner-update-1.patch (merged) + - drivers-media-video-tuner-update-2.patch (merged) + - drivers-media-video-v4l-mpeg-support.patch (merged) + - drivers-media-video-mt352-update.patch (merged) + - arch-ppc64-hugepage-aio-panic.patch (merged) + - drivers-input-serio-nmouse.patch (merged) + - sparc64-sb1500-clock-2.6.patch (merged) + - docbook-allow-preprocessor-directives-... (merged) + - docbook-fix-function-parameter-descriptin-in-fbmem.patch (merged) + - docbook-move-kernel-doc-comment-next-to-function.patch (merged) + - powerpc-therm-adt746x-new-i2c-fix.patch (merged) + - powerpc-mv643xx-enet.patch (merged) + - powerpc-mv643xx-eth-pegasos.patch (merged) + - powerpc-pmac-agp-sleep.patch (merged) + - drivers-input-serio-8042-resume.patch (merged) + + * Premiere of the common-source kernel package + (Jurij Smakov, Andres Salomon) + - build all architectures out of kernel source package + - rename source and binary packages + - create a common config for different architectures, and management + tools to allow for easier modification of config options + - drop default configs, autogenerate them instead; requires + kernel-package >= 9.002. + + * Add 2.6.12.1 (Maximilian Attems) + - Clean up subthread exec (CAN-2005-1913) + - ia64 ptrace + sigrestore_context (CAN-2005-1761) + + * Add 2.6.12.2 (Frederik Schüler) + - Fix two socket hashing bugs. + - ACPI: Make sure we call acpi_register_gsi() even for default PCI + interrupt assignment + - Add "memory" clobbers to the x86 inline asm of strncmp and friends + - e1000: fix spinlock bug + - fix remap_pte_range BUG + - Fix typo in drivers/pci/pci-driver.c + + * Add 2.6.12.3 (Joshua Kwan) + - Fix semaphore handling in __unregister_chrdev + - Fix TT mode in UML. + - Check for a null return in tty_ldisc_ref. + - v4l: cx88 hue offset fix + - Fix 8139cp breakage that occurs with tpm driver. + - Fix the 6pack driver in SMP environments. + - Switch to spinlocks in the shaper driver. + - ppc32: stop misusing NTP's time_offset value + - netfilter: go back to dropping conntrack references manually + - ACPI: don't accept 0 as a PCI IRQ. + + * Enable CONFIG_SCSI_INITIO. (Maximilian Attems) (closes: #318121) + + * [powerpc] : + - Added powerpc-mkvmlinuz-support patch which allows, together with + kernel-package 9.0002 to add mkvmlinuz support to hand built packages. + - Removed powerpc-ppc64-ibmvscsi.patch, FTBFS, and Christoph doesn't like + it and thinks it is not needed. + - Disabled swim3 on powerpc-smp, FTBFS. + - Disabled software-suspend on powerpc-smp, FTBFS, amd64/i386 only smp code. + - Rediffed and readded the G4 L2 hardware flush assist patch from Jacob Pan. + (Sven Luther) + + * [sparc] + - Drop sparc32 flavour for now. sparc32 kernel is currently in the + category "too buggy for us to support". In spite of numerous efforts + I still see occasional random filesystem corruptions in my tests. + That does NOT mean that we are dropping sparc32 support, we will + work with upstream trying to solve these problems for the next + kernel release. Those interested in helping/testing are encouraged + to subscribe to debian-sparc mailing list. + (Jurij Smakov) + + * [alpha] + - Renamed resulting binary packages for alpha, kernel-image-x.y.z-generic + wasn't a generic kernel, it was a generic kernel for alpha machines, so + we're now using linux-image-x.y.z-alpha-generic (and of course, the same + change for the smp kernel-image). This change was postponed after the + sarge release. (closes: #260003) + (Norbert Tretkowski) + + * [amd64] + - Now using the default compiler (gcc-4.0), thus we get rid of the + annoying MAKEFLAGS="CC=gcc-3.4" make-kpkg... invocation for third-party + modules. + This release lacks 64bit kernels for i386 userland; support will be + added in a later release as soon as the toolchain has stabilized again. + (Frederik Schüler) + + -- Andres Salomon Wed, 20 Jul 2005 17:16:04 -0400 + --- linux-2.6-3.0.0~rc6.orig/debian/modules/rules.defs +++ linux-2.6-3.0.0~rc6/debian/modules/rules.defs @@ -0,0 +1,3 @@ +BUILD_DIR = debian/build +STAMPS_DIR = debian/stamps +TEMPLATES_DIR = debian/templates --- linux-2.6-3.0.0~rc6.orig/debian/modules/gencontrol.py +++ linux-2.6-3.0.0~rc6/debian/modules/gencontrol.py @@ -0,0 +1,62 @@ +#!/usr/bin/env python + +import sys +sys.path.append(sys.path[0] + "/../lib/python") +import debian_linux.gencontrol +from debian_linux.config import * +from debian_linux.debian import * + +class gencontrol(debian_linux.gencontrol.gencontrol): + def __init__(self, config): + super(gencontrol, self).__init__(config) + self.process_config_version(config_parser({}, [sys.path[0] + "/../version"])) + + def do_main_packages(self, packages, extra): + vars = self.vars + + main = self.templates["control.main"] + packages.extend(self.process_packages(main, vars)) + + packages['source']['Build-Depends'].extend( + ['linux-support-%s%s' % (self.version['upstream'], self.abiname)] + ) + packages['source']['Build-Depends'].extend( + ['linux-headers-%s%s-all-%s [%s]' % (self.version['upstream'], self.abiname, arch, arch) + for arch in self.config['base',]['arches']], + ) + + def do_flavour(self, packages, makefile, arch, subarch, flavour, vars, makeflags, extra): + config_entry = self.config.merge('base', arch, subarch, flavour) + if config_entry.get('modules', True) is False: + return + + super(gencontrol, self).do_flavour(packages, makefile, arch, subarch, flavour, vars, makeflags, extra) + + def do_flavour_packages(self, packages, makefile, arch, subarch, flavour, vars, makeflags, extra): + modules = self.templates["control.modules"] + modules = self.process_packages(modules, vars) + + for package in modules: + name = package['Package'] + if packages.has_key(name): + package = packages.get(name) + package['Architecture'].append(arch) + else: + package['Architecture'] = [arch] + packages.append(package) + + cmds_binary_arch = ["$(MAKE) -f debian/rules.real binary-arch-flavour %s" % makeflags] + cmds_build = ["$(MAKE) -f debian/rules.real build %s" % makeflags] + cmds_setup = ["$(MAKE) -f debian/rules.real setup-flavour %s" % makeflags] + makefile.add('binary-arch_%s_%s_%s_real' % (arch, subarch, flavour), cmds = cmds_binary_arch) + makefile.add('build_%s_%s_%s_real' % (arch, subarch, flavour), cmds = cmds_build) + makefile.add('setup_%s_%s_%s_real' % (arch, subarch, flavour), cmds = cmds_setup) + + def process_config_version(self, config): + entry = config['version',] + self.version = parse_version(entry['source']) + self.abiname = entry['abiname'] + self.vars = self.process_version_linux(self.version, self.abiname) + +if __name__ == '__main__': + gencontrol(sys.path[0] + "/../arch")() --- linux-2.6-3.0.0~rc6.orig/debian/modules/rules.include +++ linux-2.6-3.0.0~rc6/debian/modules/rules.include @@ -0,0 +1,61 @@ +__MODULES_DIR := $(dir $(lastword $(MAKEFILE_LIST))) + +DEB_HOST_ARCH := $(shell dpkg-architecture -qDEB_HOST_ARCH) +DEB_BUILD_ARCH := $(shell dpkg-architecture -qDEB_BUILD_ARCH) + +include $(__MODULES_DIR)rules.defs + +__BINNMU := $(shell dpkg-parsechangelog | sed -rne 's,^Version: .*\+b([0-9]+)$$,\1,p') + +BUILD_STAMP = $(STAMPS_DIR)/build-base + +build: debian/control $(BUILD_STAMP) +$(BUILD_STAMP): $(BUILD_DIR) $(STAMPS_DIR) + dh_testdir + $(MAKE) -f debian/rules.gen build_$(DEB_HOST_ARCH) + touch $@ + +$(BUILD_DIR) $(STAMPS_DIR): + @[ -d $@ ] || mkdir $@ + +clean: debian/control + dh_testdir + rm -rf $(BUILD_DIR) $(STAMPS_DIR) + dh_clean + +binary-indep: + dh_testdir + $(MAKE) -f debian/rules.gen binary-indep + +binary-arch: + dh_testdir + $(MAKE) -f debian/rules.gen binary-arch_$(DEB_HOST_ARCH) + +binary: binary-indep binary-arch + +CONTROL_FILES += debian/changelog $(wildcard debian/templates/control.*) +CONTROL_FILES += $(wildcard debian/arch/defines) $(wildcard debian/arch/*/defines) $(wildcard debian/arch/*/*/defines) +GENCONTROL = $(__MODULES_DIR)gencontrol.py +debian/control debian/rules.gen: $(CONTROL_FILES) +ifeq ($(wildcard debian/control.md5sum),) + $(MAKE) -f debian/rules debian/control-real +else ifeq ($(__BINNMU),) + md5sum --check debian/control.md5sum --status || \ + $(MAKE) -f debian/rules debian/control-real +else + grep -v debian/changelog debian/control.md5sum | md5sum --check - --status || \ + $(MAKE) -f debian/rules debian/control-real +endif + +debian/control-real: $(CONTROL_FILES) + $(GENCONTROL) $(__MODULES_DIR).. + md5sum $^ > debian/control.md5sum + @echo + @echo This target is made to fail intentionally, to make sure + @echo that it is NEVER run during the automated build. Please + @echo ignore the following error, the debian/control file has + @echo been generated SUCCESSFULLY. + @echo + exit 1 + +.PHONY: clean build binary-indep binary-arch binary --- linux-2.6-3.0.0~rc6.orig/debian/modules/rules.real.include +++ linux-2.6-3.0.0~rc6/debian/modules/rules.real.include @@ -0,0 +1,16 @@ +__MODULES_DIR := $(dir $(lastword $(MAKEFILE_LIST))) + +DEB_HOST_ARCH := $(shell dpkg-architecture -a$(ARCH) -qDEB_HOST_ARCH) +DEB_HOST_GNU_TYPE := $(shell dpkg-architecture -a$(ARCH) -qDEB_HOST_GNU_TYPE) +DEB_BUILD_ARCH := $(shell dpkg-architecture -a$(ARCH) -qDEB_BUILD_ARCH) + +export DH_OPTIONS + +HEADERS_DIR = /usr/src/linux-headers-$(UPSTREAMVERSION)$(ABINAME)$(LOCALVERSION) + +include $(__MODULES_DIR)rules.defs + +ifdef DEBIAN_KERNEL_JOBS + JOBS_ARG = -j$(DEBIAN_KERNEL_JOBS) +endif + --- linux-2.6-3.0.0~rc6.orig/debian/bin/check-patches.sh +++ linux-2.6-3.0.0~rc6/debian/bin/check-patches.sh @@ -0,0 +1,13 @@ +#!/bin/sh -e + +TMPDIR=$(mktemp -d) +trap "rm -rf $TMPDIR" EXIT +grep -v "^#" debian/patches/series/* | awk '{if (NF >= 2) print "debian/patches/" $2}' | sort -u > $TMPDIR/used +find debian/patches ! -path '*/series*' -type f -name "*.diff" -o -name "*.patch" -printf "%p\n" | sort > $TMPDIR/avail +echo "Used patches" +echo "==============" +cat $TMPDIR/used +echo +echo "Unused patches" +echo "==============" +fgrep -v -f $TMPDIR/used $TMPDIR/avail --- linux-2.6-3.0.0~rc6.orig/debian/bin/genorig.py +++ linux-2.6-3.0.0~rc6/debian/bin/genorig.py @@ -0,0 +1,137 @@ +#!/usr/bin/env python + +import sys +sys.path.append("debian/lib/python") + +import os +import os.path +import re +import shutil +import subprocess + +from debian_linux.debian import Changelog, VersionLinux +from debian_linux.patches import PatchSeries + +class Main(object): + def __init__(self, input_files, override_version, override_tag): + self.log = sys.stdout.write + + self.input_files = input_files + + changelog = Changelog(version = VersionLinux)[0] + source = changelog.source + version = changelog.version + + if override_version: + version = VersionLinux('%s-undef' % override_version) + + self.version_dfsg = version.linux_dfsg + if self.version_dfsg is None: + self.version_dfsg = '0' + + self.log('Using source name %s, version %s, dfsg %s\n' % (source, version.upstream, self.version_dfsg)) + + self.orig = '%s-%s' % (source, version.upstream) + self.orig_tar = '%s_%s.orig.tar.gz' % (source, version.upstream) + self.tag = override_tag or ('v' + version.upstream.replace('~', '-')) + + def __call__(self): + import tempfile + self.dir = tempfile.mkdtemp(prefix = 'genorig', dir = 'debian') + try: + if os.path.isdir(self.input_files[0]): + self.upstream_export(self.input_files[0]) + else: + self.upstream_extract(self.input_files[0]) + if len(self.input_files) > 1: + self.upstream_patch(self.input_files[1]) + self.debian_patch() + self.tar() + finally: + shutil.rmtree(self.dir) + + def upstream_export(self, input_repo): + self.log("Exporting %s from %s\n" % (self.tag, input_repo)) + + archive_proc = subprocess.Popen(['git', 'archive', '--format=tar', + '--prefix=%s/' % self.orig, self.tag], + cwd=input_repo, + stdout=subprocess.PIPE) + extract_proc = subprocess.Popen(['tar', '-xf', '-'], cwd=self.dir, + stdin=archive_proc.stdout) + + if extract_proc.wait(): + raise RuntimeError("Can't extract tarball") + + def upstream_extract(self, input_tar): + self.log("Extracting tarball %s\n" % input_tar) + match = re.match(r'(^|.*/)(?Plinux-\d+\.\d+\.\d+(-\S+)?)\.tar(\.(?P(bz2|gz)))?$', input_tar) + if not match: + raise RuntimeError("Can't identify name of tarball") + + cmdline = ['tar', '-xf', input_tar, '-C', self.dir] + if match.group('extension') == 'bz2': + cmdline.append('-j') + elif match.group('extension') == 'gz': + cmdline.append('-z') + + if subprocess.Popen(cmdline).wait(): + raise RuntimeError("Can't extract tarball") + + os.rename(os.path.join(self.dir, match.group('dir')), os.path.join(self.dir, self.orig)) + + def upstream_patch(self, input_patch): + self.log("Patching source with %s\n" % input_patch) + match = re.match(r'(^|.*/)patch-\d+\.\d+\.\d+(-\S+?)?(\.(?P(bz2|gz)))?$', input_patch) + if not match: + raise RuntimeError("Can't identify name of patch") + cmdline = [] + if match.group('extension') == 'bz2': + cmdline.append('bzcat') + elif match.group('extension') == 'gz': + cmdline.append('zcat') + else: + cmdline.append('cat') + cmdline.append(input_patch) + cmdline.append('| (cd %s; patch -p1 -f -s -t --no-backup-if-mismatch)' % os.path.join(self.dir, self.orig)) + if os.spawnv(os.P_WAIT, '/bin/sh', ['sh', '-c', ' '.join(cmdline)]): + raise RuntimeError("Can't patch source") + + def debian_patch(self): + name = "orig-" + self.version_dfsg + self.log("Patching source with debian patch (series %s)\n" % name) + fp = file("debian/patches/series/" + name) + series = PatchSeries(name, "debian/patches", fp) + series(dir = os.path.join(self.dir, self.orig)) + + def tar(self): + out = os.path.join("../orig", self.orig_tar) + try: + os.mkdir("../orig") + except OSError: pass + try: + os.stat(out) + raise RuntimeError("Destination already exists") + except OSError: pass + self.log("Generate tarball %s\n" % out) + cmdline = ['tar -czf', out, '-C', self.dir, self.orig] + try: + if os.spawnv(os.P_WAIT, '/bin/sh', ['sh', '-c', ' '.join(cmdline)]): + raise RuntimeError("Can't patch source") + os.chmod(out, 0644) + except: + try: + os.unlink(out) + except OSError: + pass + raise + +if __name__ == '__main__': + from optparse import OptionParser + parser = OptionParser(usage = "%prog [OPTION]... {TAR [PATCH] | REPO}") + parser.add_option("-V", "--override-version", dest = "override_version", help = "Override version", metavar = "VERSION") + parser.add_option("-t", "--override-tag", dest = "override_tag", help = "Override tag", metavar = "TAG") + options, args = parser.parse_args() + + assert 1 <= len(args) <= 2 + Main(args, options.override_version, options.override_tag)() --- linux-2.6-3.0.0~rc6.orig/debian/bin/patch.apply +++ linux-2.6-3.0.0~rc6/debian/bin/patch.apply @@ -0,0 +1,228 @@ +#!/usr/bin/env python + +import os, os.path, re, sys +from warnings import warn + +sys.path.append("/usr/share/linux-support-3.0.0-rc6/lib/python") + +from debian_linux.patches import PatchSeries, PatchSeriesList + +_default_home = "/usr/src/kernel-patches/all/3.0.0-rc6/debian" +revisions = "orig base 1~experimental.1".split() +upstream = "3.0.0~rc6" + +class MatchExtra(object): + def __init__(self, arch, featureset): + self.arch, self.featureset = arch, featureset + + self.matched_arch = self.matched_featureset = False + + def __call__(self, obj): + if not self: + return False + + data = obj.data + + match_arch = [] + match_featureset = [] + for i in data: + if i.startswith("arch="): + match_arch.append(i[5:]) + elif i.startswith("featureset="): + match_featureset.append(i[11:]) + else: + raise RuntimeError('Ignored unknown modifier: %s' % i) + + ret_arch = ret_featureset = False + + if match_arch: + if self.arch is not None: + if self.arch in match_arch: + self.matched_arch = True + ret_arch = True + + else: + ret_arch = True + + if match_featureset: + if self.featureset is not None: + if self.featureset in match_featureset: + self.matched_featureset = True + ret_featureset = True + + else: + ret_featureset = True + + return ret_arch and ret_featureset + + def __nonzero__(self): + return self.arch is not None or self.featureset is not None + + def info(self): + ret = [] + if self.matched_arch: + ret.append("arch=%s" % self.arch) + if self.matched_featureset: + ret.append("featureset=%s" % self.featureset) + return ret + +_marker = object() + +class version_file(object): + _file = 'version.Debian' + extra = None + in_progress = False + + def __init__(self, upstream = None): + if os.path.exists(self._file): + s = file(self._file).readline().strip() + self._read(s) + elif upstream: + warn('No %s file, assuming Debian Linux %s' % (self._file, upstream)) + self.upstream = upstream + self.revision = 'orig' + else: + raise RuntimeError, "Not possible to determine version" + + def __str__(self): + if self.in_progress: + return "unstable" + ret = [self.upstream, self.revision] + if self.extra is not None: + ret.extend(self.extra.info()) + return ' '.join(ret) + + def _read(self, s): + if s == 'unstable': + raise RuntimeError("Tree is in an unstable condition. Can't continue!") + list = s.split() + self.upstream, self.revision = list[0:2] + + arch = featureset = None + for i in list[2:]: + if i.startswith("arch="): + arch = i[5:] + elif i.startswith("featureset="): + featureset = i[11:] + else: + raise RuntimeError("Can't parse extra information") + self.extra = MatchExtra(arch, featureset) + + def _write(self): + if os.path.lexists(self._file): + os.unlink(self._file) + file(self._file, 'w').write('%s\n' % self) + + def begin(self): + self.in_progress = True + self._write() + + def commit(self, revision, extra = _marker): + self.in_progress = False + self.revision = revision + if extra is not _marker: + self.extra = extra + self._write() + +def main(): + options, args = parse_options() + + if len(args) > 1: + print "Too much arguments" + return + + home = options.home + + vfile = version_file(upstream) + current_revision = vfile.revision + current_extra = vfile.extra + + if len(args) == 1: + target_revision = args[0] + else: + target_revision = revisions[-1] + target_extra = MatchExtra(options.arch, options.featureset) + + if vfile.upstream != upstream: + raise RuntimeError("Upstream version differs between tree (%s) and package (%s)" % (vfile.upstream, upstream)) + if current_revision not in revisions: + raise RuntimeError, "Current revision is not in our list of revisions" + if target_revision not in revisions: + raise RuntimeError, "Target revision is not in our list of revisions" + + if current_revision == target_revision and current_extra == target_extra: + print "Nothing to do" + return + + current_index = revisions.index(current_revision) + target_index = revisions.index(target_revision) + + if current_extra: + if current_revision != revisions[-1]: + raise RuntimeError, "Can't patch from %s with options %s" % (current, ' '.join(current_extra)) + consider = ['%s-extra' % i for i in revisions[1:current_index + 1]] + s = PatchSeriesList.read(home, consider) + vfile.begin() + s(cond = current_extra, reverse = True) + vfile.commit(current_revision, None) + + if current_index < target_index: + consider = revisions[current_index + 1:target_index + 1] + s = PatchSeriesList.read(home, consider) + vfile.begin() + s() + vfile.commit(target_revision) + elif current_index > target_index: + consider = revisions[target_index + 1:current_index + 1] + s = PatchSeriesList.read(home, consider) + vfile.begin() + s(reverse = True) + vfile.commit(target_revision) + + if target_extra: + consider = ['%s-extra' % i for i in revisions[1:target_index + 1]] + s = PatchSeriesList.read(home, consider) + vfile.begin() + s(cond = target_extra) + vfile.commit(target_revision, target_extra) + +def parse_options(): + from optparse import OptionParser + parser = OptionParser( + usage = "%prog [OPTION]... [TARGET]", + ) + parser.add_option( + '-a', '--arch', + dest = 'arch', + help = "arch", + ) + parser.add_option( + '-f', '--featureset', + dest = 'featureset', + help = "featureset", + ) + parser.add_option( + '-H', '--overwrite-home', + default = _default_home, dest = 'home', + help = "overwrite home [default: %default]", + ) + + options, args = parser.parse_args() + + if options.arch is None and options.featureset is not None: + raise RuntimeError('You specified a featureset without an arch, this is not really working') + + return options, args + +if __name__ == '__main__': + def showwarning(message, category, filename, lineno, + file=sys.stderr, line=''): + file.write("Warning: %s\n" % message) + import warnings + warnings.showwarning = showwarning + try: + main() + except RuntimeError, e: + sys.stderr.write("Error: %s\n" % e) + raise SystemExit, 1 + --- linux-2.6-3.0.0~rc6.orig/debian/bin/buildcheck.py +++ linux-2.6-3.0.0~rc6/debian/bin/buildcheck.py @@ -0,0 +1,225 @@ +#!/usr/bin/python + +import sys +sys.path.append('debian/lib/python') + +import fnmatch +import stat + +from debian_linux.abi import Symbols +from debian_linux.config import ConfigCoreDump +from debian_linux.debian import * + + +class CheckAbi(object): + class SymbolInfo(object): + def __init__(self, symbol, symbol_ref=None): + self.symbol = symbol + self.symbol_ref = symbol_ref or symbol + + @property + def module(self): + return self.symbol.module + + @property + def name(self): + return self.symbol.name + + def write(self, out, ignored): + info = [] + if ignored: + info.append("ignored") + for name in ('module', 'version', 'export'): + data = getattr(self.symbol, name) + data_ref = getattr(self.symbol_ref, name) + if data != data_ref: + info.append("%s: %s -> %s" % (name, data_ref, data)) + else: + info.append("%s: %s" % (name, data)) + out.write("%-48s %s\n" % (self.symbol.name, ", ".join(info))) + + def __init__(self, config, dir, arch, featureset, flavour): + self.config = config + self.arch, self.featureset, self.flavour = arch, featureset, flavour + + self.filename_new = "%s/Module.symvers" % dir + + changelog = Changelog(version=VersionLinux)[0] + version = changelog.version.linux_version + abiname = self.config['abi',]['abiname'] + self.filename_ref = "debian/abi/%s-%s/%s_%s_%s" % (version, abiname, arch, featureset, flavour) + + def __call__(self, out): + ret = 0 + + new = Symbols(open(self.filename_new)) + try: + ref = Symbols(open(self.filename_ref)) + except IOError: + out.write("Can't read ABI reference. ABI not checked! Continuing.\n") + return 0 + + symbols, add, change, remove = self._cmp(ref, new) + + ignore = self._ignore(symbols) + + add_effective = add - ignore + change_effective = change - ignore + remove_effective = remove - ignore + + if change_effective or remove_effective: + out.write("ABI has changed! Refusing to continue.\n") + ret = 1 + elif change or remove: + out.write("ABI has changed but all changes have been ignored. Continuing.\n") + elif add_effective: + out.write("New symbols have been added. Continuing.\n") + elif add: + out.write("New symbols have been added but have been ignored. Continuing.\n") + else: + out.write("No ABI changes.\n") + + if add: + out.write("\nAdded symbols:\n") + for name in sorted(add): + symbols[name].write(out, name in ignore) + + if change: + out.write("\nChanged symbols:\n") + for name in sorted(change): + symbols[name].write(out, name in ignore) + + if remove: + out.write("\nRemoved symbols:\n") + for name in sorted(remove): + symbols[name].write(out, name in ignore) + + return ret + + def _cmp(self, ref, new): + ref_names = set(ref.keys()) + new_names = set(new.keys()) + + add = set() + change = set() + remove = set() + + symbols = {} + + for name in new_names - ref_names: + add.add(name) + symbols[name] = self.SymbolInfo(new[name]) + + for name in ref_names.intersection(new_names): + s_ref = ref[name] + s_new = new[name] + + if s_ref != s_new: + change.add(name) + symbols[name] = self.SymbolInfo(s_new, s_ref) + + for name in ref_names - new_names: + remove.add(name) + symbols[name] = self.SymbolInfo(ref[name]) + + return symbols, add, change, remove + + def _ignore_pattern(self, pattern): + ret = [] + for i in re.split(r'(\*\*?)', pattern): + if i == '*': + ret.append(r'[^!]+') + elif i == '**': + ret.append(r'.+') + elif i: + ret.append(re.escape(i)) + return re.compile('^' + ''.join(ret) + '$') + + def _ignore(self, symbols): + # TODO: let config merge this lists + configs = [] + configs.append(self.config.get(('abi', self.arch, self.featureset, self.flavour), {})) + configs.append(self.config.get(('abi', self.arch, None, self.flavour), {})) + configs.append(self.config.get(('abi', self.arch, self.featureset), {})) + configs.append(self.config.get(('abi', self.arch), {})) + configs.append(self.config.get(('abi', None, self.featureset), {})) + configs.append(self.config.get(('abi',), {})) + + ignores = set() + for config in configs: + ignores.update(config.get('ignore-changes', [])) + + filtered = set() + for ignore in ignores: + type = 'name' + if ':' in ignore: + type, ignore = ignore.split(':') + if type in ('name', 'module'): + p = self._ignore_pattern(ignore) + for symbol in symbols.itervalues(): + if p.match(getattr(symbol, type)): + filtered.add(symbol.name) + else: + raise NotImplementedError + + return filtered + + +class CheckImage(object): + def __init__(self, config, dir, arch, featureset, flavour): + self.dir = dir + self.arch, self.featureset, self.flavour = arch, featureset, flavour + + self.config_entry_build = config.merge('build', arch, featureset, flavour) + self.config_entry_image = config.merge('image', arch, featureset, flavour) + + def __call__(self, out): + image = self.config_entry_build.get('image-file') + + if not image: + # TODO: Bail out + return 0 + + image = os.path.join(self.dir, image) + + fail = 0 + + fail |= self.check_size(out, image) + + return fail + + def check_size(self, out, image): + value = self.config_entry_image.get('check-size') + + if not value: + return 0 + + value = int(value) + + size = os.stat(image)[stat.ST_SIZE] + + if size > value: + out.write('Image too large (%d > %d)! Refusing to continue.\n' % (size, value)) + return 1 + + out.write('Image fits (%d <= %d). Continuing.\n' % (size, value)) + return 0 + + +class Main(object): + def __init__(self, dir, arch, featureset, flavour): + self.args = dir, arch, featureset, flavour + + self.config = ConfigCoreDump(fp=file("debian/config.defines.dump")) + + def __call__(self): + fail = 0 + + for c in CheckAbi, CheckImage: + fail |= c(self.config, *self.args)(sys.stdout) + + return fail + + +if __name__ == '__main__': + sys.exit(Main(*sys.argv[1:])()) --- linux-2.6-3.0.0~rc6.orig/debian/bin/kconfig.py +++ linux-2.6-3.0.0~rc6/debian/bin/kconfig.py @@ -0,0 +1,37 @@ +#!/usr/bin/env python + +import optparse +import os.path +import re +import sys + +from debian_linux.kconfig import * + +def merge(output, configs, overrides): + kconfig = KconfigFile() + for c in configs: + kconfig.read(file(c)) + for key, value in overrides.iteritems(): + kconfig.set(key, value) + file(output, "w").write(str(kconfig)) + +def opt_callback_dict(option, opt, value, parser): + match = re.match('^\s*(\S+)=(\S+)\s*$', value) + if not match: + raise optparse.OptionValueError('not key=value') + dest = option.dest + data = getattr(parser.values, dest) + data[match.group(1)] = match.group(2) + +if __name__ == '__main__': + parser = optparse.OptionParser(usage = "%prog [OPTION]... FILE...") + parser.add_option('-o', '--override', + action='callback', + callback=opt_callback_dict, + default={}, + dest='overrides', + help="Override option", + type='string') + options, args = parser.parse_args() + + merge(args[0], args[1:], options.overrides) --- linux-2.6-3.0.0~rc6.orig/debian/bin/test-patches +++ linux-2.6-3.0.0~rc6/debian/bin/test-patches @@ -0,0 +1,87 @@ +#!/bin/bash + +set -e +shopt -s extglob + +# Set defaults from the running kernel +arch="$(dpkg --print-architecture)" +kernelabi="$(uname -r)" +ff="${kernelabi#+([^-])-@(trunk|+([0-9]))-}" +if [ "x$ff" != "x$kernelabi" ]; then + flavour="${ff#@(openvz|vserver|xen)-}" + if [ "x$flavour" != "x$ff" ]; then + featureset="${ff%-$flavour}" + else + featureset=none + fi +else + flavour= + featureset=none +fi + +eval "set -- $(getopt -n "$0" -- "f:j:s:" "$@")" +while true; do + case "$1" in + -f) flavour="$2"; shift 2 ;; + -j) export DEBIAN_KERNEL_JOBS="$2"; shift 2 ;; + -s) featureset="$2"; shift 2 ;; + --) shift 1; break ;; + esac +done + +if [ $# -lt 1 ]; then + echo >&2 "Usage: $0 [] ..." + cat >&2 < specify the 'flavour' of kernel to build, e.g. 686 + -j specify number of compiler jobs to run in parallel + -s specify an optional featureset to apply, e.g. xen +EOF + exit 2 +fi + +if [ -z "$flavour" ]; then + echo >&2 "You must specify a flavour to build with the -f option" + exit 2 +fi + +dpkg-checkbuilddeps -B + +# Append 'a~test' to Debian version; this should be less than any official +# successor and easily recognisable +version="$(dpkg-parsechangelog | sed 's/^Version: //; t; d')" +if [ "${version%a~test}" = "$version" ]; then + version="$version"a~test + dch -v "$version" --distribution UNRELEASED "Testing patches $*" +fi + +restrictfeature= +series="${version##*-}" +if [ "$featureset" != none ]; then + restrictfeature=" featureset=$featureset" + series="${series}-extra" +fi + +# Copy all patches into a new directory +rm -rf debian/patches/test/ +mkdir debian/patches/test +cp -t debian/patches/test/ "$@" + +# Generate patch series for the new version +>debian/patches/series/"$series" +for patch in "$@"; do + echo "+ test/$(basename "$patch")${restrictfeature}" >>debian/patches/series/"$series" +done + +# Regenerate control and included rules +rm debian/control debian/rules.gen +debian/rules debian/control-real && exit 1 || true +test -f debian/control +test -f debian/rules.gen + +# Clean and patch source +debian/rules clean +debian/rules source + +# Build selected binaries +fakeroot make -f debian/rules.gen binary-arch_"$arch"_"$featureset"_"$flavour" --- linux-2.6-3.0.0~rc6.orig/debian/bin/gencontrol.py +++ linux-2.6-3.0.0~rc6/debian/bin/gencontrol.py @@ -0,0 +1,356 @@ +#!/usr/bin/env python + +import os, sys +sys.path.append("debian/lib/python") + +from debian_linux.config import ConfigCoreHierarchy +from debian_linux.debian import * +from debian_linux.gencontrol import Gencontrol as Base +from debian_linux.utils import Templates + +class Gencontrol(Base): + def __init__(self, config_dirs = ["debian/config"], template_dirs = ["debian/templates"]): + super(Gencontrol, self).__init__(ConfigCoreHierarchy(config_dirs), Templates(template_dirs), VersionLinux) + self.process_changelog() + self.config_dirs = config_dirs + + def _setup_makeflags(self, names, makeflags, data): + for src, dst, optional in names: + if src in data or not optional: + makeflags[dst] = data[src] + + def do_main_setup(self, vars, makeflags, extra): + super(Gencontrol, self).do_main_setup(vars, makeflags, extra) + makeflags.update({ + 'VERSION': self.version.linux_version, + 'UPSTREAMVERSION': self.version.linux_upstream, + 'ABINAME': self.abiname, + 'SOURCEVERSION': self.version.complete, + }) + + def do_main_packages(self, packages, vars, makeflags, extra): + packages.extend(self.process_packages(self.templates["control.main"], self.vars)) + + arch_makeflags = ( + ('kernel-arch', 'KERNEL_ARCH', False), + ) + + def do_arch_setup(self, vars, makeflags, arch, extra): + config_base = self.config.merge('base', arch) + self._setup_makeflags(self.arch_makeflags, makeflags, config_base) + + def do_arch_packages(self, packages, makefile, arch, vars, makeflags, extra): + if self.version.linux_modifier is None: + try: + vars['abiname'] = '-%s' % self.config['abi', arch]['abiname'] + except KeyError: + vars['abiname'] = self.abiname + makeflags['ABINAME'] = vars['abiname'] + + headers_arch = self.templates["control.headers.arch"] + packages_headers_arch = self.process_packages(headers_arch, vars) + + libc_dev = self.templates["control.libc-dev"] + packages_headers_arch[0:0] = self.process_packages(libc_dev, {}) + + packages_headers_arch[-1]['Depends'].extend(PackageRelation()) + extra['headers_arch_depends'] = packages_headers_arch[-1]['Depends'] + + self.merge_packages(packages, packages_headers_arch, arch) + + cmds_binary_arch = ["$(MAKE) -f debian/rules.real binary-arch-arch %s" % makeflags] + cmds_source = ["$(MAKE) -f debian/rules.real source-arch %s" % makeflags] + makefile.add('binary-arch_%s_real' % arch, cmds = cmds_binary_arch) + makefile.add('source_%s_real' % arch, cmds = cmds_source) + + def do_featureset_setup(self, vars, makeflags, arch, featureset, extra): + config_base = self.config.merge('base', arch, featureset) + makeflags['LOCALVERSION_HEADERS'] = vars['localversion_headers'] = vars['localversion'] + + def do_featureset_packages(self, packages, makefile, arch, featureset, vars, makeflags, extra): + headers_featureset = self.templates["control.headers.featureset"] + package_headers = self.process_package(headers_featureset[0], vars) + + self.merge_packages(packages, (package_headers,), arch) + + cmds_binary_arch = ["$(MAKE) -f debian/rules.real binary-arch-featureset %s" % makeflags] + cmds_source = ["$(MAKE) -f debian/rules.real source-featureset %s" % makeflags] + makefile.add('binary-arch_%s_%s_real' % (arch, featureset), cmds = cmds_binary_arch) + makefile.add('source_%s_%s_real' % (arch, featureset), cmds = cmds_source) + + flavour_makeflags_base = ( + ('compiler', 'COMPILER', False), + ('kernel-arch', 'KERNEL_ARCH', False), + ('cflags', 'CFLAGS_KERNEL', True), + ('override-host-type', 'OVERRIDE_HOST_TYPE', True), + ) + + flavour_makeflags_image = ( + ('type', 'TYPE', False), + ('initramfs', 'INITRAMFS', True), + ) + + flavour_makeflags_other = ( + ('localversion', 'LOCALVERSION', False), + ('localversion-image', 'LOCALVERSION_IMAGE', True), + ) + + def do_flavour_setup(self, vars, makeflags, arch, featureset, flavour, extra): + config_base = self.config.merge('base', arch, featureset, flavour) + config_description = self.config.merge('description', arch, featureset, flavour) + config_image = self.config.merge('image', arch, featureset, flavour) + + vars['class'] = config_description['hardware'] + vars['longclass'] = config_description.get('hardware-long') or vars['class'] + + vars['localversion-image'] = vars['localversion'] + override_localversion = config_image.get('override-localversion', None) + if override_localversion is not None: + vars['localversion-image'] = vars['localversion_headers'] + '-' + override_localversion + + self._setup_makeflags(self.flavour_makeflags_base, makeflags, config_base) + self._setup_makeflags(self.flavour_makeflags_image, makeflags, config_image) + self._setup_makeflags(self.flavour_makeflags_other, makeflags, vars) + + def do_flavour_packages(self, packages, makefile, arch, featureset, flavour, vars, makeflags, extra): + headers = self.templates["control.headers"] + + config_entry_base = self.config.merge('base', arch, featureset, flavour) + config_entry_description = self.config.merge('description', arch, featureset, flavour) + config_entry_image = self.config.merge('image', arch, featureset, flavour) + config_entry_image_dbg = self.config.merge('image-dbg', arch, featureset, flavour) + config_entry_relations = self.config.merge('relations', arch, featureset, flavour) + + compiler = config_entry_base.get('compiler', 'gcc') + relations_compiler = PackageRelation(config_entry_relations[compiler]) + relations_compiler_build_dep = PackageRelation(config_entry_relations[compiler]) + for group in relations_compiler_build_dep: + for item in group: + item.arches = [arch] + packages['source']['Build-Depends'].extend(relations_compiler_build_dep) + + image_fields = {'Description': PackageDescription()} + for field in 'Depends', 'Provides', 'Suggests', 'Recommends', 'Conflicts', 'Breaks': + image_fields[field] = PackageRelation(config_entry_image.get(field.lower(), None), override_arches=(arch,)) + + if config_entry_image.get('initramfs', True): + generators = config_entry_image['initramfs-generators'] + l = PackageRelationGroup() + for i in generators: + i = config_entry_relations.get(i, i) + l.append(i) + a = PackageRelationEntry(i) + if a.operator is not None: + a.operator = -a.operator + image_fields['Breaks'].append(PackageRelationGroup([a])) + for item in l: + item.arches = [arch] + image_fields['Depends'].append(l) + + bootloaders = config_entry_image.get('bootloaders') + if bootloaders: + l = PackageRelationGroup() + for i in bootloaders: + i = config_entry_relations.get(i, i) + l.append(i) + a = PackageRelationEntry(i) + if a.operator is not None: + a.operator = -a.operator + image_fields['Breaks'].append(PackageRelationGroup([a])) + for item in l: + item.arches = [arch] + image_fields['Suggests'].append(l) + + desc_parts = self.config.get_merge('description', arch, featureset, flavour, 'parts') + if desc_parts: + # XXX: Workaround, we need to support multiple entries of the same name + parts = list(set(desc_parts)) + parts.sort() + desc = image_fields['Description'] + for part in parts: + desc.append(config_entry_description['part-long-' + part]) + desc.append_short(config_entry_description.get('part-short-' + part, '')) + + packages_dummy = [] + packages_own = [] + + if config_entry_image['type'] == 'plain-s390-tape': + image = self.templates["control.image.type-standalone"] + build_modules = False + else: + build_modules = True + image = self.templates["control.image.type-%s" % config_entry_image['type']] + + config_entry_xen = self.config.merge('xen', arch, featureset, flavour) + if config_entry_xen.get('dom0-support', False): + p = self.process_packages(self.templates['control.xen-linux-system'], vars) + l = PackageRelationGroup() + for xen_flavour in config_entry_xen['flavours']: + l.append("xen-hypervisor-%s" % xen_flavour) + p[0]['Depends'].append(l) + packages_dummy.extend(p) + + vars.setdefault('desc', None) + + packages_own.append(self.process_real_image(image[0], image_fields, vars)) + packages_own.extend(self.process_packages(image[1:], vars)) + + if build_modules: + makeflags['MODULES'] = True + package_headers = self.process_package(headers[0], vars) + package_headers['Depends'].extend(relations_compiler) + packages_own.append(package_headers) + extra['headers_arch_depends'].append('%s (= ${binary:Version})' % packages_own[-1]['Package']) + + build_debug = config_entry_image_dbg.get('enabled') + if build_debug: + makeflags['DEBUG'] = True + packages_own.extend(self.process_packages(self.templates['control.image-dbg'], vars)) + + self.merge_packages(packages, packages_own + packages_dummy, arch) + + if config_entry_image['type'] == 'plain-xen': + for i in ('postinst', 'postrm', 'prerm'): + j = self.substitute(self.templates["image.xen.%s" % i], vars) + file("debian/%s.%s" % (packages_own[0]['Package'], i), 'w').write(j) + + def get_config(*entry_name): + entry_real = ('image',) + entry_name + entry = self.config.get(entry_real, None) + if entry is None: + return None + return entry.get('configs', None) + + def check_config_default(fail, f): + for d in self.config_dirs[::-1]: + f1 = d + '/' + f + if os.path.exists(f1): + return [f1] + if fail: + raise RuntimeError("%s unavailable" % f) + return [] + + def check_config_files(files): + ret = [] + for f in files: + for d in self.config_dirs[::-1]: + f1 = d + '/' + f + if os.path.exists(f1): + ret.append(f1) + break + else: + raise RuntimeError("%s unavailable" % f) + return ret + + def check_config(default, fail, *entry_name): + configs = get_config(*entry_name) + if configs is None: + return check_config_default(fail, default) + return check_config_files(configs) + + kconfig = check_config('config', True) + kconfig.extend(check_config("%s/config" % arch, True, arch)) + kconfig.extend(check_config("%s/config.%s" % (arch, flavour), False, arch, None, flavour)) + kconfig.extend(check_config("featureset-%s/config" % featureset, False, None, featureset)) + kconfig.extend(check_config("%s/%s/config" % (arch, featureset), False, arch, featureset)) + kconfig.extend(check_config("%s/%s/config.%s" % (arch, featureset, flavour), False, arch, featureset, flavour)) + makeflags['KCONFIG'] = ' '.join(kconfig) + if build_debug: + makeflags['KCONFIG_OPTIONS'] = '-o DEBUG_INFO=y' + + cmds_binary_arch = ["$(MAKE) -f debian/rules.real binary-arch-flavour %s" % makeflags] + if packages_dummy: + cmds_binary_arch.append("$(MAKE) -f debian/rules.real install-dummy DH_OPTIONS='%s' %s" % (' '.join(["-p%s" % i['Package'] for i in packages_dummy]), makeflags)) + cmds_build = ["$(MAKE) -f debian/rules.real build %s" % makeflags] + cmds_setup = ["$(MAKE) -f debian/rules.real setup-flavour %s" % makeflags] + makefile.add('binary-arch_%s_%s_%s_real' % (arch, featureset, flavour), cmds = cmds_binary_arch) + makefile.add('build_%s_%s_%s_real' % (arch, featureset, flavour), cmds = cmds_build) + makefile.add('setup_%s_%s_%s_real' % (arch, featureset, flavour), cmds = cmds_setup) + + def do_extra(self, packages, makefile): + apply = self.templates['patch.apply'] + + vars = { + 'revisions': 'orig base ' + ' '.join([i.revision for i in self.versions[::-1]]), + 'upstream': self.version.upstream, + 'linux_upstream': self.version.linux_upstream, + 'abiname': self.abiname, + } + + apply = self.substitute(apply, vars) + + file('debian/bin/patch.apply', 'w').write(apply) + + def merge_packages(self, packages, new, arch): + for new_package in new: + name = new_package['Package'] + if name in packages: + package = packages.get(name) + package['Architecture'].append(arch) + + for field in 'Depends', 'Provides', 'Suggests', 'Recommends', 'Conflicts': + if field in new_package: + if field in package: + v = package[field] + v.extend(new_package[field]) + else: + package[field] = new_package[field] + + else: + new_package['Architecture'] = [arch] + packages.append(new_package) + + def process_changelog(self): + act_upstream = self.changelog[0].version.linux_upstream + versions = [] + for i in self.changelog: + if i.version.linux_upstream != act_upstream: + break + versions.append(i.version) + self.versions = versions + version = self.version = self.changelog[0].version + if self.version.linux_modifier is not None: + self.abiname = '' + else: + self.abiname = '-%s' % self.config['abi',]['abiname'] + self.vars = { + 'upstreamversion': self.version.linux_upstream, + 'version': self.version.linux_version, + 'source_upstream': self.version.upstream, + 'source_package': self.changelog[0].source, + 'abiname': self.abiname, + } + self.config['version',] = {'source': self.version.complete, 'abiname': self.abiname} + + distribution = self.changelog[0].distribution + if distribution in ('unstable', ): + if (version.linux_revision_experimental or + version.linux_revision_other): + raise RuntimeError("Can't upload to %s with a version of %s" % + (distribution, version)) + if distribution in ('experimental', ): + if not version.linux_revision_experimental: + raise RuntimeError("Can't upload to %s with a version of %s" % + (distribution, version)) + + def process_real_image(self, entry, fields, vars): + entry = self.process_package(entry, vars) + for key, value in fields.iteritems(): + if key in entry: + real = entry[key] + real.extend(value) + elif value: + entry[key] = value + return entry + + def write(self, packages, makefile): + self.write_config() + super(Gencontrol, self).write(packages, makefile) + + def write_config(self): + f = file("debian/config.defines.dump", 'w') + self.config.dump(f) + f.close() + +if __name__ == '__main__': + Gencontrol()() --- linux-2.6-3.0.0~rc6.orig/debian/bin/abiupdate.py +++ linux-2.6-3.0.0~rc6/debian/bin/abiupdate.py @@ -0,0 +1,184 @@ +#!/usr/bin/env python + +import sys +sys.path.append(sys.path[0] + "/../lib/python") + +import optparse, os, shutil, tempfile, urllib2 +from debian_linux.abi import Symbols +from debian_linux.config import * +from debian_linux.debian import * + +default_url_base = "http://ftp.de.debian.org/debian/" +default_url_base_incoming = "http://incoming.debian.org/" + +class url_debian_flat(object): + def __init__(self, base): + self.base = base + + def __call__(self, source, filename): + return self.base + filename + +class url_debian_pool(object): + def __init__(self, base): + self.base = base + + def __call__(self, source, filename): + return self.base + "pool/main/" + source[0] + "/" + source + "/" + filename + +class main(object): + dir = None + + def __init__(self, url, url_config = None, arch = None, featureset = None, flavour = None): + self.log = sys.stdout.write + + self.url = self.url_config = url + if url_config is not None: + self.url_config = url_config + self.override_arch = arch + self.override_featureset = featureset + self.override_flavour = flavour + + changelog = Changelog(version = VersionLinux) + while changelog[0].distribution == 'UNRELEASED': + changelog.pop(0) + changelog = changelog[0] + + self.source = changelog.source + self.version = changelog.version.linux_version + self.version_source = changelog.version.complete + + local_config = ConfigCoreDump(fp = file("debian/config.defines.dump")) + + self.version_abi = self.version + '-' + local_config['abi',]['abiname'] + + def __call__(self): + self.dir = tempfile.mkdtemp(prefix = 'abiupdate') + try: + self.log("Retreive config\n") + config = self.get_config() + if self.override_arch: + arches = [self.override_arch] + else: + arches = config[('base',)]['arches'] + for arch in arches: + self.update_arch(config, arch) + finally: + shutil.rmtree(self.dir) + + def extract_package(self, filename, base): + base_out = self.dir + "/" + base + os.mkdir(base_out) + os.system("dpkg-deb --extract %s %s" % (filename, base_out)) + return base_out + + def get_abi(self, arch, prefix): + filename = "linux-headers-%s-%s_%s_%s.deb" % (self.version_abi, prefix, self.version_source, arch) + f = self.retrieve_package(self.url, filename) + d = self.extract_package(f, "linux-headers-%s_%s" % (prefix, arch)) + f1 = d + "/usr/src/linux-headers-%s-%s/Module.symvers" % (self.version_abi, prefix) + s = Symbols(open(f1)) + shutil.rmtree(d) + return s + + def get_config(self): + filename = "linux-support-%s_%s_all.deb" % (self.version_abi, self.version_source) + f = self.retrieve_package(self.url_config, filename) + d = self.extract_package(f, "linux-support") + c = d + "/usr/src/linux-support-" + self.version_abi + "/config.defines.dump" + config = ConfigCoreDump(fp = file(c)) + shutil.rmtree(d) + return config + + def retrieve_package(self, url, filename): + u = url(self.source, filename) + filename_out = self.dir + "/" + filename + + f_in = urllib2.urlopen(u) + f_out = file(filename_out, 'w') + while 1: + r = f_in.read() + if not r: + break + f_out.write(r) + return filename_out + + def save_abi(self, symbols, arch, featureset, flavour): + dir = "debian/abi/%s" % self.version_abi + if not os.path.exists(dir): + os.makedirs(dir) + out = "%s/%s_%s_%s" % (dir, arch, featureset, flavour) + symbols.write(open(out, 'w')) + + def update_arch(self, config, arch): + if self.override_featureset: + featuresets = [self.override_featureset] + else: + featuresets = config[('base', arch)]['featuresets'] + for featureset in featuresets: + self.update_featureset(config, arch, featureset) + + def update_featureset(self, config, arch, featureset): + config_base = config.merge('base', arch, featureset) + + if not config_base.get('enabled', True): + return + + if self.override_flavour: + flavours = [self.override_flavour] + else: + flavours = config_base['flavours'] + for flavour in flavours: + self.update_flavour(config, arch, featureset, flavour) + + def update_flavour(self, config, arch, featureset, flavour): + config_base = config.merge('base', arch, featureset, flavour) + + if not config_base.get('modules', True): + return + + self.log("Updating ABI for arch %s, featureset %s, flavour %s: " % (arch, featureset, flavour)) + try: + if featureset == 'none': + localversion = flavour + else: + localversion = featureset + '-' + flavour + + abi = self.get_abi(arch, localversion) + self.save_abi(abi, arch, featureset, flavour) + self.log("Ok.\n") + except urllib2.HTTPError, e: + self.log("Failed to retrieve %s: %s\n" % (e.filename, e)) + except StandardError, e: + self.log("FAILED!\n") + import traceback + traceback.print_exc(None, sys.stdout) + +if __name__ == '__main__': + options = optparse.OptionParser() + options.add_option("-i", "--incoming", action = "store_true", dest = "incoming") + options.add_option("--incoming-config", action = "store_true", dest = "incoming_config") + options.add_option("-u", "--url-base", dest = "url_base", default = default_url_base) + options.add_option("--url-base-incoming", dest = "url_base_incoming", default = default_url_base_incoming) + + opts, args = options.parse_args() + + kw = {} + if len(args) >= 1: + kw['arch'] =args[0] + if len(args) >= 2: + kw['featureset'] =args[1] + if len(args) >= 3: + kw['flavour'] =args[2] + + url_base = url_debian_pool(opts.url_base) + url_base_incoming = url_debian_flat(opts.url_base_incoming) + if opts.incoming_config: + url = url_config = url_base_incoming + else: + url_config = url_base + if opts.incoming: + url = url_base_incoming + else: + url = url_base + + main(url, url_config, **kw)() --- linux-2.6-3.0.0~rc6.orig/debian/templates/image.xen.prerm.in +++ linux-2.6-3.0.0~rc6/debian/templates/image.xen.prerm.in @@ -0,0 +1,23 @@ +#!/bin/bash + +set -e + +case "$1" in + remove) + update-initramfs -d -k @upstreamversion@@abiname@@localversion@ || true + ;; + + upgrade|deconfigure|failed-upgrade) + ;; + + *) + echo "prerm called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +#DEBHELPER# + +exit 0 + + --- linux-2.6-3.0.0~rc6.orig/debian/templates/control.xen-linux-system.in +++ linux-2.6-3.0.0~rc6/debian/templates/control.xen-linux-system.in @@ -0,0 +1,5 @@ +Package: xen-linux-system-@upstreamversion@@abiname@@localversion@ +Depends: linux-image-@upstreamversion@@abiname@@localversion@ (= ${binary:Version}), ${misc:Depends} +Description: Xen system with Linux @upstreamversion@ on @class@ (meta-package) + This package depends on the binary Linux image and hypervisors. + --- linux-2.6-3.0.0~rc6.orig/debian/templates/control.main.in +++ linux-2.6-3.0.0~rc6/debian/templates/control.main.in @@ -0,0 +1,77 @@ +Package: linux-tools-@version@ +Architecture: alpha amd64 armel armhf hppa i386 powerpc ppc64 s390 sh4 sparc sparc64 +Depends: ${shlibs:Depends}, ${misc:Depends}, ${perl:Depends}, ${python:Depends} +Recommends: linux-base (>= 2.6.32-16) +Suggests: linux-doc-@version@ +Description: Performance analysis tools for Linux @upstreamversion@ + This package contains the 'perf' performance analysis tools for Linux + kernel version @upstreamversion@. + . + The linux-base package contains a 'perf' command which will invoke the + appropriate version for the running kernel. + +Package: linux-source-@version@ +Architecture: all +Section: kernel +Provides: linux-source +Depends: binutils, bzip2, ${misc:Depends} +Recommends: libc6-dev | libc-dev, gcc, make +Suggests: libncurses-dev | ncurses-dev, kernel-package, libqt3-mt-dev +Description: Linux kernel source for version @version@ with Debian patches + This package provides source code for the Linux kernel version @version@. + This source closely tracks official Linux kernel releases. Debian's + modifications to that source consist of security fixes, bug fixes, and + features that have already been (or are believed to be) accepted by the + upstream maintainers. + +Package: linux-doc-@version@ +Architecture: all +Depends: ${misc:Depends} +Section: doc +Description: Linux kernel specific documentation for version @version@ + This package provides the various README files and HTML documentation for + the Linux kernel version @version@. Plenty of information, including the + descriptions of various kernel subsystems, filesystems, driver-specific + notes and the like. Consult the file + /usr/share/doc/linux-doc-@version@/Documentation/00-INDEX + for the detailed description of the contents. + +Package: linux-manual-@version@ +Architecture: all +Depends: ${misc:Depends} +Section: doc +Provides: linux-manual +Conflicts: linux-manual +Replaces: linux-manual +Description: Linux kernel API manual pages for version @version@ + This package provides the Kernel Hacker's Guide in the form of + manual pages, describing the kernel API functions. They + are installed into section 9 of the manual. + . + As the files containing manual pages for different kernel versions + are installed in the same location, only one linux-manual package + may be installed at a time. The linux-doc package containing the + documentation in other formats is free from such restriction. + +Package: linux-patch-debian-@version@ +Architecture: all +Depends: bzip2, linux-support-@upstreamversion@@abiname@, python, ${misc:Depends} +Suggests: linux-source-@version@ +Description: Debian patches to version @version@ of the Linux kernel + This package includes the patches used to produce the prepackaged + linux-source-@version@ package, as well as architecture-specific + patches. + . + Note that these patches do NOT apply against a pristine + Linux @version@ kernel but only against the kernel tarball + @source_package@_@source_upstream@.orig.tar.gz from the Debian archive. + +Package: linux-support-@upstreamversion@@abiname@ +Architecture: all +Section: devel +Depends: ${python:Depends}, ${misc:Depends} +Description: Support files for Linux @upstreamversion@ + This package provides support files for the Linux kernel build, + e.g. scripts to handle ABI information and for generation of + build system meta data. + --- linux-2.6-3.0.0~rc6.orig/debian/templates/patch.apply.in +++ linux-2.6-3.0.0~rc6/debian/templates/patch.apply.in @@ -0,0 +1,228 @@ +#!/usr/bin/env python + +import os, os.path, re, sys +from warnings import warn + +sys.path.append("/usr/share/linux-support-@linux_upstream@@abiname@/lib/python") + +from debian_linux.patches import PatchSeries, PatchSeriesList + +_default_home = "/usr/src/kernel-patches/all/@linux_upstream@/debian" +revisions = "@revisions@".split() +upstream = "@upstream@" + +class MatchExtra(object): + def __init__(self, arch, featureset): + self.arch, self.featureset = arch, featureset + + self.matched_arch = self.matched_featureset = False + + def __call__(self, obj): + if not self: + return False + + data = obj.data + + match_arch = [] + match_featureset = [] + for i in data: + if i.startswith("arch="): + match_arch.append(i[5:]) + elif i.startswith("featureset="): + match_featureset.append(i[11:]) + else: + raise RuntimeError('Ignored unknown modifier: %s' % i) + + ret_arch = ret_featureset = False + + if match_arch: + if self.arch is not None: + if self.arch in match_arch: + self.matched_arch = True + ret_arch = True + + else: + ret_arch = True + + if match_featureset: + if self.featureset is not None: + if self.featureset in match_featureset: + self.matched_featureset = True + ret_featureset = True + + else: + ret_featureset = True + + return ret_arch and ret_featureset + + def __nonzero__(self): + return self.arch is not None or self.featureset is not None + + def info(self): + ret = [] + if self.matched_arch: + ret.append("arch=%s" % self.arch) + if self.matched_featureset: + ret.append("featureset=%s" % self.featureset) + return ret + +_marker = object() + +class version_file(object): + _file = 'version.Debian' + extra = None + in_progress = False + + def __init__(self, upstream = None): + if os.path.exists(self._file): + s = file(self._file).readline().strip() + self._read(s) + elif upstream: + warn('No %s file, assuming Debian Linux %s' % (self._file, upstream)) + self.upstream = upstream + self.revision = 'orig' + else: + raise RuntimeError, "Not possible to determine version" + + def __str__(self): + if self.in_progress: + return "unstable" + ret = [self.upstream, self.revision] + if self.extra is not None: + ret.extend(self.extra.info()) + return ' '.join(ret) + + def _read(self, s): + if s == 'unstable': + raise RuntimeError("Tree is in an unstable condition. Can't continue!") + list = s.split() + self.upstream, self.revision = list[0:2] + + arch = featureset = None + for i in list[2:]: + if i.startswith("arch="): + arch = i[5:] + elif i.startswith("featureset="): + featureset = i[11:] + else: + raise RuntimeError("Can't parse extra information") + self.extra = MatchExtra(arch, featureset) + + def _write(self): + if os.path.lexists(self._file): + os.unlink(self._file) + file(self._file, 'w').write('%s\n' % self) + + def begin(self): + self.in_progress = True + self._write() + + def commit(self, revision, extra = _marker): + self.in_progress = False + self.revision = revision + if extra is not _marker: + self.extra = extra + self._write() + +def main(): + options, args = parse_options() + + if len(args) > 1: + print "Too much arguments" + return + + home = options.home + + vfile = version_file(upstream) + current_revision = vfile.revision + current_extra = vfile.extra + + if len(args) == 1: + target_revision = args[0] + else: + target_revision = revisions[-1] + target_extra = MatchExtra(options.arch, options.featureset) + + if vfile.upstream != upstream: + raise RuntimeError("Upstream version differs between tree (%s) and package (%s)" % (vfile.upstream, upstream)) + if current_revision not in revisions: + raise RuntimeError, "Current revision is not in our list of revisions" + if target_revision not in revisions: + raise RuntimeError, "Target revision is not in our list of revisions" + + if current_revision == target_revision and current_extra == target_extra: + print "Nothing to do" + return + + current_index = revisions.index(current_revision) + target_index = revisions.index(target_revision) + + if current_extra: + if current_revision != revisions[-1]: + raise RuntimeError, "Can't patch from %s with options %s" % (current, ' '.join(current_extra)) + consider = ['%s-extra' % i for i in revisions[1:current_index + 1]] + s = PatchSeriesList.read(home, consider) + vfile.begin() + s(cond = current_extra, reverse = True) + vfile.commit(current_revision, None) + + if current_index < target_index: + consider = revisions[current_index + 1:target_index + 1] + s = PatchSeriesList.read(home, consider) + vfile.begin() + s() + vfile.commit(target_revision) + elif current_index > target_index: + consider = revisions[target_index + 1:current_index + 1] + s = PatchSeriesList.read(home, consider) + vfile.begin() + s(reverse = True) + vfile.commit(target_revision) + + if target_extra: + consider = ['%s-extra' % i for i in revisions[1:target_index + 1]] + s = PatchSeriesList.read(home, consider) + vfile.begin() + s(cond = target_extra) + vfile.commit(target_revision, target_extra) + +def parse_options(): + from optparse import OptionParser + parser = OptionParser( + usage = "%prog [OPTION]... [TARGET]", + ) + parser.add_option( + '-a', '--arch', + dest = 'arch', + help = "arch", + ) + parser.add_option( + '-f', '--featureset', + dest = 'featureset', + help = "featureset", + ) + parser.add_option( + '-H', '--overwrite-home', + default = _default_home, dest = 'home', + help = "overwrite home [default: %default]", + ) + + options, args = parser.parse_args() + + if options.arch is None and options.featureset is not None: + raise RuntimeError('You specified a featureset without an arch, this is not really working') + + return options, args + +if __name__ == '__main__': + def showwarning(message, category, filename, lineno, + file=sys.stderr, line=''): + file.write("Warning: %s\n" % message) + import warnings + warnings.showwarning = showwarning + try: + main() + except RuntimeError, e: + sys.stderr.write("Error: %s\n" % e) + raise SystemExit, 1 + --- linux-2.6-3.0.0~rc6.orig/debian/templates/control.headers.in +++ linux-2.6-3.0.0~rc6/debian/templates/control.headers.in @@ -0,0 +1,10 @@ +Package: linux-headers-@upstreamversion@@abiname@@localversion@ +Depends: linux-headers-@upstreamversion@@abiname@-common@localversion_headers@ (= ${binary:Version}), linux-kbuild-@version@, ${misc:Depends} +Provides: linux-headers +Description: Header files for Linux @upstreamversion@@abiname@@localversion@ + This package provides the architecture-specific kernel header files + for Linux kernel @upstreamversion@@abiname@@localversion@, generally + used for building out-of-tree kernel modules. These files are going to be + installed into /usr/src/linux-headers-@upstreamversion@@abiname@@localversion@, and can + be used for building modules that load into the kernel provided by the + linux-image-@upstreamversion@@abiname@@localversion@ package. --- linux-2.6-3.0.0~rc6.orig/debian/templates/image-dbg.lintian-override.in +++ linux-2.6-3.0.0~rc6/debian/templates/image-dbg.lintian-override.in @@ -0,0 +1,2 @@ +# Kernel dbg packages contain a full image with debug data +linux-image-=V-dbg: dbg-package-missing-depends --- linux-2.6-3.0.0~rc6.orig/debian/templates/control.image-dbg.in +++ linux-2.6-3.0.0~rc6/debian/templates/control.image-dbg.in @@ -0,0 +1,7 @@ +Package: linux-image-@upstreamversion@@abiname@@localversion@-dbg +Depends: linux-image-@upstreamversion@@abiname@@localversion@, ${misc:Depends} +Section: debug +Priority: extra +Description: Debugging infos for Linux @upstreamversion@@abiname@@localversion@ + This package provides the binary debug image and pre-built debug loadable + modules for Linux kernel @upstreamversion@ on @longclass@ machines. --- linux-2.6-3.0.0~rc6.orig/debian/templates/control.image.type-modulesextra.in +++ linux-2.6-3.0.0~rc6/debian/templates/control.image.type-modulesextra.in @@ -0,0 +1,11 @@ +Package: linux-image-@upstreamversion@@abiname@@localversion@ +Provides: linux-image +Depends: linux-modules-@upstreamversion@@abiname@@localversion@ (= ${binary:Version}), ${misc:Depends} +Suggests: linux-doc-@version@ +Description: Linux @upstreamversion@ for @class@ + The Linux kernel @upstreamversion@ for use on @longclass@. + +Package: linux-modules-@upstreamversion@@abiname@@localversion@ +Depends: module-init-tools, ${misc:Depends} +Description: Linux @upstreamversion@ modules for @class@ + Modules for Linux kernel @upstreamversion@ for use on @longclass@. --- linux-2.6-3.0.0~rc6.orig/debian/templates/control.image.type-plain.in +++ linux-2.6-3.0.0~rc6/debian/templates/control.image.type-plain.in @@ -0,0 +1,8 @@ +Package: linux-image-@upstreamversion@@abiname@@localversion@ +Provides: linux-image, linux-modules-@upstreamversion@@abiname@@localversion@ +Pre-Depends: debconf | debconf-2.0 +Depends: module-init-tools, linux-base (>= 3~), ${shlibs:Depends}, ${misc:Depends} +Recommends: firmware-linux-free (>= 3~) +Suggests: linux-doc-@version@ +Description: Linux @upstreamversion@ for @class@ + The Linux kernel @upstreamversion@ and modules for use on @longclass@. --- linux-2.6-3.0.0~rc6.orig/debian/templates/control.source.in +++ linux-2.6-3.0.0~rc6/debian/templates/control.source.in @@ -0,0 +1,9 @@ +Section: kernel +Priority: optional +Maintainer: Debian Kernel Team +Uploaders: Bastian Blank , Frederik Schüler , maximilian attems , Ben Hutchings +Standards-Version: 3.9.2 +Build-Depends: debhelper (>> 7), cpio, module-init-tools, python, lzma [armel], libelf-dev, libdw-dev, binutils-dev, asciidoc, xmlto, libperl-dev, python-dev, libnewt-dev, python-support +Build-Depends-Indep: bzip2 +Vcs-Svn: svn://svn.debian.org/svn/kernel/dists/sid/linux-2.6/ +Vcs-Browser: http://svn.debian.org/wsvn/kernel/dists/sid/linux-2.6/?op=log --- linux-2.6-3.0.0~rc6.orig/debian/templates/image.xen.postrm.in +++ linux-2.6-3.0.0~rc6/debian/templates/image.xen.postrm.in @@ -0,0 +1,21 @@ +#!/bin/bash + +set -e + +case "$1" in + remove) + command -v update-grub > /dev/null && update-grub + ;; + + purge|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear) + ;; + + *) + echo "postrm called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +#DEBHELPER# + +exit 0 --- linux-2.6-3.0.0~rc6.orig/debian/templates/control.image.type-standalone.in +++ linux-2.6-3.0.0~rc6/debian/templates/control.image.type-standalone.in @@ -0,0 +1,6 @@ +Package: linux-image-@upstreamversion@@abiname@@localversion@ +Provides: linux-image +Suggests: linux-doc-@version@ +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: Linux @upstreamversion@ for @class@ + The Linux kernel @upstreamversion@ for use on @longclass@. --- linux-2.6-3.0.0~rc6.orig/debian/templates/control.libc-dev.in +++ linux-2.6-3.0.0~rc6/debian/templates/control.libc-dev.in @@ -0,0 +1,9 @@ +Package: linux-libc-dev +Section: devel +Depends: ${misc:Depends} +Provides: linux-kernel-headers +Replaces: linux-kernel-headers +Conflicts: linux-kernel-headers +Description: Linux support headers for userspace development + This package provides userspaces headers from the Linux kernel. These headers + are used by the installed headers for GNU glibc and other system libraries. --- linux-2.6-3.0.0~rc6.orig/debian/templates/image.xen.postinst.in +++ linux-2.6-3.0.0~rc6/debian/templates/image.xen.postinst.in @@ -0,0 +1,28 @@ +#!/bin/bash + +set -e + +case "$1" in + configure) + if [ "$2" ]; then + update-initramfs -u -k @upstreamversion@@abiname@@localversion@ + else + update-initramfs -c -t -k @upstreamversion@@abiname@@localversion@ + command -v update-grub > /dev/null && update-grub + fi + ;; + + abort-upgrade|abort-remove|abort-deconfigure) + ;; + + *) + echo "postinst called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +#DEBHELPER# + +exit 0 + + --- linux-2.6-3.0.0~rc6.orig/debian/templates/patch.unpatch +++ linux-2.6-3.0.0~rc6/debian/templates/patch.unpatch @@ -0,0 +1,4 @@ +#!/bin/sh +set -e + +exec "$(dirname $0)/../apply/debian" orig --- linux-2.6-3.0.0~rc6.orig/debian/templates/control.headers.arch.in +++ linux-2.6-3.0.0~rc6/debian/templates/control.headers.arch.in @@ -0,0 +1,14 @@ +Package: linux-headers-@upstreamversion@@abiname@-all +Depends: linux-headers-@upstreamversion@@abiname@-all-${kernel:Arch} (= ${binary:Version}), ${misc:Depends} +Description: All header files for Linux @version@ (meta-package) + This package depends against all architecture-specific kernel header files + for Linux kernel version @upstreamversion@, generally used for building out-of-tree + kernel modules. + +Package: linux-headers-@upstreamversion@@abiname@-all-@arch@ +Depends: ${misc:Depends} +Description: All header files for Linux @version@ (meta-package) + This package depends against all architecture-specific kernel header files + for Linux kernel version @upstreamversion@, generally used for building out-of-tree + kernel modules. + --- linux-2.6-3.0.0~rc6.orig/debian/templates/control.headers.featureset.in +++ linux-2.6-3.0.0~rc6/debian/templates/control.headers.featureset.in @@ -0,0 +1,8 @@ +Package: linux-headers-@upstreamversion@@abiname@-common@localversion_headers@ +Depends: ${misc:Depends} +Description: Common header files for Linux @upstreamversion@@abiname@@localversion_headers@ + This package provides the architecture-specific common kernel header files + for Linux kernel version @upstreamversion@@abiname@@localversion_headers@, generally used for building out-of-tree + kernel modules. To obtain a complete set of headers you also need to install + the linux-headers-@upstreamversion@@abiname@-(flavour) package, matching the + flavour of the kernel you intend the build for. --- linux-2.6-3.0.0~rc6.orig/debian/templates/temp.headers.plain/postinst +++ linux-2.6-3.0.0~rc6/debian/templates/temp.headers.plain/postinst @@ -0,0 +1,26 @@ +#!/usr/bin/perl +# Author: Michael Gilbert +# Origin: Stripped down version of the linux-headers postinst from Ubuntu's +# 2.6.32-14-generic kernel, which was itself derived from a +# Debian linux-image postinst script. + +$|=1; +my $version = "=V"; + +if (-d "/etc/kernel/header_postinst.d") { + print STDERR "Examining /etc/kernel/header_postinst.d.\n"; + system ("run-parts --verbose --exit-on-error --arg=$version " . + "/etc/kernel/header_postinst.d") && + die "Failed to process /etc/kernel/header_postinst.d"; +} + +if (-d "/etc/kernel/header_postinst.d/$version") { + print STDERR "Examining /etc/kernel/header_postinst.d/$version.\n"; + system ("run-parts --verbose --exit-on-error --arg=$version " . + "/etc/kernel/header_postinst.d/$version") && + die "Failed to process /etc/kernel/header_postinst.d/$version"; +} + +exit 0; + +__END__ --- linux-2.6-3.0.0~rc6.orig/debian/templates/temp.image.plain/preinst +++ linux-2.6-3.0.0~rc6/debian/templates/temp.image.plain/preinst @@ -0,0 +1,162 @@ +#! /usr/bin/perl +# +use strict; +use warnings; + +use Debconf::Client::ConfModule qw(:all); +version('2.0'); +my $capb=capb("backup"); + +$|=1; + +# Predefined values: +my $version = "=V"; +my $link_in_boot = ""; +my $no_symlink = ""; +my $do_symlink = "Yes"; # target machine defined +my $kimage = "=K"; +my $use_hard_links = ''; # hardlinks do not wirk across fs boundaries +my $preinst_hook = ''; #Normally we do not +my $minimal_swap = ''; # Do not swap symlinks +my $ignore_depmod_err = ''; # normally we do not +my $relink_src_link = 'YES'; # There is no harm in checking the link +my $relink_build_link = 'YES'; # There is no harm in checking the link +my $force_build_link = ''; # There is no harm in checking the link +my $kernel_arch = "=B"; +my $ramdisk = "=MK"; # List of tools to create initial ram fs. +my $package_name = "linux-image-$version"; + +#known variables +my $image_dest = "/"; +my $realimageloc = "/boot/"; +my $CONF_LOC = '/etc/kernel-img.conf'; + +my $modules_base = '/lib/modules'; + +die "Pre inst Internal error. Aborting." unless $version; + +exit 0 if $ARGV[0] =~ /abort-upgrade/; +exit 1 unless $ARGV[0] =~ /(install|upgrade)/; + +if (-r "$CONF_LOC" && -f "$CONF_LOC" ) { + if (open(CONF, "$CONF_LOC")) { + while () { + chomp; + s/\#.*$//g; + next if /^\s*$/; + + $do_symlink = "" if /do_symlinks\s*=\s*(no|false|0)\s*$/i; + $no_symlink = "" if /no_symlinks\s*=\s*(no|false|0)\s*$/i; + $link_in_boot = "" if /link_in_boot\s*=\s*(no|false|0)\s*$/i; + $use_hard_links = '' if /use_hard_links\s*=\s*(no|false|0)\s*$/i; + $minimal_swap = '' if /minimal_swap\s*=\s*(no|false|0)\s*$/i; + $ignore_depmod_err = '' if /ignore_depmod_err\s*=\s*(no|false|0)\s*$/i; + $relink_src_link = '' if /relink_src_link\s*=\s*(no|false|0)\s*$/i; + $relink_build_link = '' if /relink_build_link\s*=\s*(no|false|0)\s*$/i; + $force_build_link = '' if /force_build_link\s*=\s*(no|false|0)\s*$/i; + + $do_symlink = "Yes" if /do_symlinks\s*=\s*(yes|true|1)\s*$/i; + $no_symlink = "Yes" if /no_symlinks\s*=\s*(yes|true|1)\s*$/i; + $link_in_boot = "Yes" if /link_in_boot\s*=\s*(yes|true|1)\s*$/i; + $use_hard_links = "Yes" if /use_hard_links\s*=\s*(yes|true|1)\s*$/i; + $minimal_swap = 'Yes' if /minimal_swap\s*=\s*(yes|true|1)\s*$/i; + $ignore_depmod_err = 'Yes' if /ignore_depmod_err\s*=\s*(yes|true|1)\s*$/i; + $relink_src_link = 'Yes' if /relink_src_link\s*=\s*(yes|true|1)\s*$/i; + $relink_build_link = 'Yes' if /relink_build_link\s*=\s*(yes|true|1)\s*$/i; + $force_build_link = 'Yes' if /force_build_link\s*=\s*(yes|true|1)\s*$/i; + + $image_dest = "$1" if /image_dest\s*=\s*(\S+)/i; + $preinst_hook = "$1" if /preinst_hook\s*=\s*(\S+)/i; + $ramdisk = "$1" if /ramdisk\s*=\s*(.+)$/i; + } + close CONF; + } +} + +$ENV{KERNEL_ARCH}=$kernel_arch if $kernel_arch; + + +if (-d "$modules_base/$version" && -l "$modules_base/$version/build" ) { + rename("$modules_base/$version/build", "$modules_base/$version/build.save") || + die "failed to move $modules_base/$version/build:$!"; +} + +# set the env var stem +$ENV{'STEM'} = "linux"; + +sub exec_script { + my $type = shift; + my $script = shift; + print STDERR "Running $type hook script $script.\n"; + system ("$script $version $realimageloc$kimage-$version") && + print STDERR "User $type hook script [$script] "; + if ($?) { + if ($? == -1) { + print STDERR "failed to execute: $!\n"; + } + elsif ($? & 127) { + printf STDERR "died with signal %d, %s coredump\n", + ($? & 127), ($? & 128) ? 'with' : 'without'; + } + else { + printf STDERR "exited with value %d\n", $? >> 8; + } + exit $? >> 8; + } +} +sub run_hook { + my $type = shift; + my $script = shift; + if ($script =~ m,^/,) { + # Full path provided for the hook script + if (-x "$script") { + &exec_script($type,$script); + } + else { + die "The provided $type hook script [$script] could not be run.\n"; + } + } + else { + # Look for it in a safe path + for my $path ('/bin', '/sbin', '/usr/bin', '/usr/sbin') { + if (-x "$path/$script") { + &exec_script($type, "$path/$script"); + return 0; + } + } + # No luck + print STDERR "Could not find $type hook script [$script].\n"; + die "Looked in: '/bin', '/sbin', '/usr/bin', '/usr/sbin'\n"; + } +} + + +my $options; +for (@ARGV) { + s,','\\'',g; + $options .= " '$_'"; +} +$ENV{'DEB_MAINT_PARAMS'}="$options"; + +## Run user hook script here, if any +if (-x "$preinst_hook") { + &run_hook("preinst", $preinst_hook); +} +if (-d "/etc/kernel/preinst.d") { + print STDERR "Examining /etc/kernel/preinst.d/\n"; + system ("run-parts --verbose --exit-on-error --arg=$version" . + " --arg=$realimageloc$kimage-$version" . + " /etc/kernel/preinst.d") && + die "Failed to process /etc/kernel/preinst.d"; +} +if (-d "/etc/kernel/preinst.d/$version") { + print STDERR "Examining /etc/kernel/preinst.d/$version.\n"; + system ("run-parts --verbose --exit-on-error --arg=$version" . + " --arg=$realimageloc$kimage-$version" . + " /etc/kernel/preinst.d/$version") && + die "Failed to process /etc/kernel/preinst.d/$version"; +} + +exit 0; + +__END__ --- linux-2.6-3.0.0~rc6.orig/debian/templates/temp.image.plain/postrm +++ linux-2.6-3.0.0~rc6/debian/templates/temp.image.plain/postrm @@ -0,0 +1,296 @@ +#! /usr/bin/perl +# +use strict; +use warnings; +use Cwd 'abs_path'; + +# Debconf may not be around here. +my $have_debconf = 0; +my $capb; + +eval {require Debconf::Client::ConfModule;}; +if ( ! $@ ) +{ + $have_debconf++; + import Debconf::Client::ConfModule ':all'; + version('2.0'); + $capb=capb("backup"); +} + +$|=1; +# Predefined values: +my $version = "=V"; +my $link_in_boot = ""; +my $no_symlink = ""; +my $do_symlink = "Yes"; # target machine defined +my $do_boot_enable = "Yes"; # target machine defined +my $kimage = "=K"; +my $initrd = "=I"; # initrd kernel +my $use_hard_links = ''; # hardlinks do not work across fs boundaries +my $postrm_hook = ''; #Normally we do not +my $minimal_swap = ''; # Do not swap symlinks +my $ignore_depmod_err = ''; # normally we do not +my $relink_build_link = 'YES'; # There is no harm in checking the link +my $force_build_link = ''; # we shall not create a dangling link +my $kernel_arch = "=B"; +my $ramdisk = "=MK"; # List of tools to create initial ram fs. +my $package_name = "linux-image-$version"; + +#known variables +my $image_dest = "/"; +my $realimageloc = "/boot/"; +my $CONF_LOC = '/etc/kernel-img.conf'; + +chdir('/') or die "could not chdir to /:$!\n"; + + +if (-r "$CONF_LOC" && -f "$CONF_LOC" ) { + if (open(CONF, "$CONF_LOC")) { + while () { + chomp; + s/\#.*$//g; + next if /^\s*$/; + + $do_symlink = "" if /do_symlinks\s*=\s*(no|false|0)\s*$/i; + $no_symlink = "" if /no_symlinks\s*=\s*(no|false|0)\s*$/i; + $link_in_boot = "" if /link_in_boot\s*=\s*(no|false|0)\s*$/i; + $do_boot_enable = '' if /do_boot_enable\s*=\s*(no|false|0)\s*$/i; + $use_hard_links = '' if /use_hard_links\s*=\s*(no|false|0)\s*$/i; + $minimal_swap = '' if /minimal_swap\s*=\s*(no|false|0)\s*$/i; + $ignore_depmod_err = '' if /ignore_depmod_err\s*=\s*(no|false|0)\s*$/i; + $relink_build_link = '' if /relink_build_link\s*=\s*(no|false|0)\s*$/i; + $force_build_link = '' if /force_build_link\s*=\s*(no|false|0)\s*$/i; + + $do_symlink = "Yes" if /do_symlinks\s*=\s*(yes|true|1)\s*$/i; + $no_symlink = "Yes" if /no_symlinks\s*=\s*(yes|true|1)\s*$/i; + $link_in_boot = "Yes" if /link_in_boot\s*=\s*(yes|true|1)\s*$/i; + $use_hard_links = "Yes" if /use_hard_links\s*=\s*(yes|true|1)\s*$/i; + $minimal_swap = 'Yes' if /minimal_swap\s*=\s*(yes|true|1)\s*$/i; + $ignore_depmod_err = 'Yes' if /ignore_depmod_err\s*=\s*(yes|true|1)\s*$/i; + $relink_build_link = 'Yes' if /relink_build_link\s*=\s*(yes|true|1)\s*$/i; + $force_build_link = 'Yes' if /force_build_link\s*=\s*(yes|true|1)\s*$/i; + + $image_dest = "$1" if /image_dest\s*=\s*(\S+)/i; + $postrm_hook = "$1" if /postrm_hook\s*=\s*(\S+)/i; + } + close CONF; + } +} + +if ($link_in_boot) { + $image_dest = $realimageloc; +} + +$image_dest = "$image_dest/"; +$image_dest =~ s|/+$|/|o; + +# The destdir may be gone by now. +if (-d "$image_dest") { + chdir("$image_dest") or die "could not chdir to $image_dest:$!\n"; +} + +$ENV{KERNEL_ARCH}=$kernel_arch if $kernel_arch; + + +###################################################################### +###################################################################### +############ +###################################################################### +###################################################################### +sub remove_sym_link { + my $bad_image = $_[0]; + + warn "Removing symbolic link $bad_image \n"; + warn "You may need to re-run your boot loader\n"; + # Remove the dangling link + unlink "$bad_image"; +} + +###################################################################### +###################################################################### +############ +###################################################################### +###################################################################### +sub CanonicalizePath { + my $path = join '/', @_; + my @work = split '/', $path; + my @out; + my $is_absolute; + + if (@work && $work[0] eq "") { $is_absolute = 1; shift @work; } + + while (@work) { + my $seg = shift @work; + if ($seg eq "." || $seg eq "") { + } elsif ($seg eq "..") { + if (@out && $out[-1] ne "..") { + pop @out; + } else { + # Leading "..", or "../..", etc. + push @out, $seg; + } + } else { + push @out, $seg; + } + } + + unshift @out, "" if $is_absolute; + return join('/', @out); +} + +###################################################################### +###################################################################### +############ +###################################################################### +###################################################################### +# This removes dangling symlinks. What do we do about hard links? Surely a +# something with the nane $image_dest . "$kimage" ought not to be left behind? +sub image_magic { + my $kimage = $_[0]; + my $image_dest = $_[1]; + + if (-l "$kimage") { + # There is a symbolic link + my $force_move = 0; + my $vmlinuz_target = readlink "$kimage"; + my $real_target = ''; + $real_target = abs_path($vmlinuz_target) if defined ($vmlinuz_target); + if (!defined($vmlinuz_target) || ! -f "$real_target") { + # what, a dangling symlink? + warn "The link " . $image_dest . "$kimage is a damaged link\n"; + # Remove the dangling link + &remove_sym_link("$kimage"); + } + else { + my $canonical_target = CanonicalizePath("$vmlinuz_target"); + if (! -e $canonical_target) { + warn "The link " . $image_dest . "$kimage is a dangling link\n"; + &remove_sym_link("$kimage"); + } + } + } +} + +# set the env var stem +$ENV{'STEM'} = "linux"; + +sub exec_script { + my $type = shift; + my $script = shift; + print STDERR "Running $type hook script $script.\n"; + system ("$script $version $realimageloc$kimage-$version") && + print STDERR "User $type hook script [$script] "; + if ($?) { + if ($? == -1) { + print STDERR "failed to execute: $!\n"; + } + elsif ($? & 127) { + printf STDERR "died with signal %d, %s coredump\n", + ($? & 127), ($? & 128) ? 'with' : 'without'; + } + else { + printf STDERR "exited with value %d\n", $? >> 8; + } + } +} +sub run_hook { + my $type = shift; + my $script = shift; + if ($script =~ m,^/,) { + # Full path provided for the hook script + if (-x "$script") { + &exec_script($type,$script); + } + else { + warn "The provided $type hook script [$script] could not be run.\n"; + } + } + else { + # Look for it in a safe path + for my $path ('/bin', '/sbin', '/usr/bin', '/usr/sbin') { + if (-x "$path/$script") { + &exec_script($type, "$path/$script"); + return 0; + } + } + # No luck + print STDERR "Could not find $type hook script [$script].\n"; + warn "Looked in: '/bin', '/sbin', '/usr/bin', '/usr/sbin'\n"; + } +} + +my $options; +for (@ARGV) { + s,','\\'',g; + $options .= " '$_'"; +} +$ENV{'DEB_MAINT_PARAMS'}="$options"; + +## Run user hook script here, if any +if ($postrm_hook) { + &run_hook("postrm", $postrm_hook); +} +if (-d "/etc/kernel/postrm.d") { + warn "Examining /etc/kernel/postrm.d .\n"; + system ("run-parts --verbose --exit-on-error --arg=$version " . + "--arg=$realimageloc$kimage-$version " . + "/etc/kernel/postrm.d") && + die "Failed to process /etc/kernel/postrm.d"; +} +if (-d "/etc/kernel/postrm.d/$version") { + warn "Examining /etc/kernel/postrm.d/$version .\n"; + system ("run-parts --verbose --exit-on-error --arg=$version " . + "--arg=$realimageloc$kimage-$version " . + "/etc/kernel/postrm.d/$version") && + die "Failed to process /etc/kernel/postrm.d/$version"; +} + +# purge initramfs and related +if ($ARGV[0] !~ /upgrade/) { + if (-f $realimageloc . "initrd.img-$version") { + unlink $realimageloc . "initrd.img-$version"; + } + if (-f $realimageloc . "initrd.img-$version.bak") { + unlink $realimageloc . "initrd.img-$version.bak"; + } + if (-f "/var/lib/initramfs-tools/$version") { + unlink "/var/lib/initramfs-tools/$version"; + } + # check and remove damaged and dangling symlinks + image_magic($kimage, $image_dest); + image_magic($kimage . ".old", $image_dest); + image_magic("initrd.img", $image_dest) if $initrd; + image_magic("initrd.img.old", $image_dest) if $initrd; +} + + +# Ignore all invocations except when called on to purge. +exit 0 unless $ARGV[0] =~ /purge/; + +my $ret = purge(); + +my @files_to_remove = qw{ + modules.dep modules.isapnpmap modules.pcimap + modules.usbmap modules.parportmap + modules.generic_string modules.ieee1394map + modules.ieee1394map modules.pnpbiosmap + modules.alias modules.ccwmap modules.inputmap + modules.symbols build source modules.ofmap + modules.seriomap modules.alias.bin + modules.dep.bin modules.symbols.bin + modules.softdep modules.devname + }; + +foreach my $extra_file (@files_to_remove) { + if (-f "/lib/modules/$version/$extra_file") { + unlink "/lib/modules/$version/$extra_file"; + } +} + +if (-d "/lib/modules/$version" ) { + system ("rmdir", "/lib/modules/$version"); +} + +exit 0; + +__END__ --- linux-2.6-3.0.0~rc6.orig/debian/templates/temp.image.plain/templates +++ linux-2.6-3.0.0~rc6/debian/templates/temp.image.plain/templates @@ -0,0 +1,63 @@ +# These templates have mostly been reviewed by the debian-l10n-english +# team +# +# If modifications/additions/rewording are needed, please ask +# debian-l10n-english@lists.debian.org for advice. +# +# Even minor modifications require translation updates and such +# changes should be coordinated with translators and reviewers. + +Template: linux-image-=V/postinst/depmod-error-initrd-=V +Type: boolean +Default: false +_Description: Abort installation after depmod error? + The 'depmod' command exited with the exit code ${exit_value} + (${SIGNAL}${CORE}). + . + Since this image uses initrd, the ${modules_base}/=V/modules.dep file + will not be deleted, even though it may be invalid. + . + You should abort the installation and fix the + errors in depmod, or regenerate the initrd image with a known good + modules.dep file. If you don't abort the installation, there is + a danger that the system will fail to boot. + +Template: linux-image-=V/prerm/removing-running-kernel-=V +Type: boolean +Default: true +_Description: Abort kernel removal? + You are running a kernel (version ${running}) and attempting to remove + the same version. + . + This can make the system unbootable as it will remove + /boot/vmlinuz-${running} and all modules under the directory + /lib/modules/${running}. This can only be fixed with a copy of the + kernel image and the corresponding modules. + . + It is highly recommended to abort the kernel removal unless you are + prepared to fix the system after removal. + +Template: linux-image-=V/postinst/missing-firmware-=V +Type: note +#flag:translate!:3 +_Description: Required firmware files may be missing + This system is currently running Linux ${runningversion} and you are + installing Linux ${version}. In the new version some of the drivers + used on this system may require additional firmware files: + . + ${missing} + . + Most firmware files are not included in the system because they do + not conform to the Debian Free Software Guidelines. You may need to + reconfigure the package manager to include the contrib and non-free + sections of the package archive before you can install these + firmware files. + +# This has not yet been reviewed +Template: linux-image-=V/postinst/ignoring-ramdisk +Type: error +_Description: Ramdisk configuration must be updated + Kernel packages will no longer run a specific ramdisk creator. The + ramdisk creator package must install a script in + /etc/kernel/postinst.d, and you should remove the line beginning + 'ramdisk =' from /etc/kernel-img.conf. --- linux-2.6-3.0.0~rc6.orig/debian/templates/temp.image.plain/postinst +++ linux-2.6-3.0.0~rc6/debian/templates/temp.image.plain/postinst @@ -0,0 +1,790 @@ +#! /usr/bin/perl +# +use strict; +use warnings; +use Cwd 'abs_path'; +use Debconf::Client::ConfModule qw(:all); +use POSIX (); +version('2.0'); +my $capb = capb('backup', 'escape'); + +$|=1; + +# Predefined values: +my $version = "=V"; +my $link_in_boot = ""; +my $no_symlink = ""; +my $do_symlink = "Yes"; # target machine defined +my $kimage = "=K"; +my $initrd = "=I"; # initrd kernel +my $mkimage = ""; # command to generate the initrd image +my $use_hard_links = ''; # hardlinks do not work across fs boundaries +my $postinst_hook = ''; #Normally we do not +my $minimal_swap = ''; # Do not swap symlinks +my $ignore_depmod_err = ''; # normally we do not +my $relink_src_link = 'YES'; # There is no harm in checking the link +my $relink_build_link = 'YES'; # There is no harm in checking the link +my $force_build_link = ''; # There is no harm in checking the link +my $kernel_arch = "=B"; +my $ramdisk = ''; +my $package_name = "linux-image-$version"; + +#known variables +my $image_dest = "/"; +my $realimageloc = "/boot/"; +my $have_conffile = ""; + +my $modules_base = '/lib/modules'; +my $CONF_LOC = '/etc/kernel-img.conf'; + +# Ignore all invocations except when called on to configure. +exit 0 unless $ARGV[0] =~ /configure/; + +my $DEBUG = 0; + +# Do some preliminary sanity checks here to ensure we actually have an +# valid image dir +chdir('/') or die "could not chdir to /:$!\n"; +die "Internal Error: ($realimageloc) is not a directory!\n" + unless -d $realimageloc; + +if (-r "$CONF_LOC" && -f "$CONF_LOC" ) { + if (open(CONF, "$CONF_LOC")) { + while () { + chomp; + s/\#.*$//g; + next if /^\s*$/; + + $do_symlink = "" if /do_symlinks\s*=\s*(no|false|0)\s*$/i; + $no_symlink = "" if /no_symlinks\s*=\s*(no|false|0)\s*$/i; + $link_in_boot = "" if /link_in_boot\s*=\s*(no|false|0)\s*$/i; + $use_hard_links = '' if /use_hard_links\s*=\s*(no|false|0)\s*$/i; + $minimal_swap = '' if /minimal_swap\s*=\s*(no|false|0)\s*$/i; + $ignore_depmod_err = '' if /ignore_depmod_err\s*=\s*(no|false|0)\s*$/i; + $relink_src_link = '' if /relink_src_link\s*=\s*(no|false|0)\s*$/i; + $relink_build_link = '' if /relink_build_link\s*=\s*(no|false|0)\s*$/i; + $force_build_link = '' if /force_build_link\s*=\s*(no|false|0)\s*$/i; + + $do_symlink = "Yes" if /do_symlinks\s*=\s*(yes|true|1)\s*$/i; + $no_symlink = "Yes" if /no_symlinks\s*=\s*(yes|true|1)\s*$/i; + $link_in_boot = "Yes" if /link_in_boot\s*=\s*(yes|true|1)\s*$/i; + $use_hard_links = "Yes" if /use_hard_links\s*=\s*(yes|true|1)\s*$/i; + $minimal_swap = 'Yes' if /minimal_swap\s*=\s*(yes|true|1)\s*$/i; + $ignore_depmod_err = 'Yes' if /ignore_depmod_err\s*=\s*(yes|true|1)\s*$/i; + $relink_src_link = 'Yes' if /relink_src_link\s*=\s*(yes|true|1)\s*$/i; + $relink_build_link = 'Yes' if /relink_build_link\s*=\s*(yes|true|1)\s*$/i; + $force_build_link = 'Yes' if /force_build_link\s*=\s*(yes|true|1)\s*$/i; + + $image_dest = "$1" if /image_dest\s*=\s*(\S+)/i; + $postinst_hook = "$1" if /postinst_hook\s*=\s*(\S+)/i; + $mkimage = "$1" if /mkimage\s*=\s*(.+)$/i; + $ramdisk = "$1" if /ramdisk\s*=\s*(.+)$/i; + } + close CONF; + $have_conffile = "Yes"; + } +} + + +if ($link_in_boot) { + $image_dest = $realimageloc; +} + +# Tack on at least one trainling / +$image_dest = "$image_dest/"; +$image_dest =~ s|^/*|/|o; +$image_dest =~ s|/+$|/|o; + +if (! -d "$image_dest") { + die "Expected Image Destination dir ($image_dest) to be a valid directory!\n"; +} + +# sanity +if ($do_symlink && $no_symlink) { + warn "Both do_symlinks and no_symlinks options enabled; disabling no_symlinks\n"; + $no_symlink = 0; +} + +# most of our work is done in $image_dest (nominally /) +chdir("$image_dest") or die "could not chdir to $image_dest:$!\n"; + +$ENV{KERNEL_ARCH}=$kernel_arch if $kernel_arch; + + +die "Internal Error: Could not find image (" . $realimageloc + . "$kimage-$version)\n" unless -e $realimageloc + . "$kimage-$version"; + + +###################################################################### +## Fix the build link +###################################################################### +sub fix_build_link { + return unless -d "$modules_base/$version"; + # if we saved a build link in preinst, restore the link + if (! -e "$modules_base/$version/build" && + -l "$modules_base/$version/build.save" ) { + rename("$modules_base/$version/build.save", "$modules_base/$version/build") || + die "failed to move $modules_base/$version/build:$!"; + } + if ($relink_build_link || $force_build_link) { + my $build_target; + my $real_target = ''; + if (-l "$modules_base/$version/build") { + $build_target = readlink "$modules_base/$version/build"; + } else { + return; + } + # Determine what the real file name is, and test that for existence + $real_target = abs_path($build_target) if defined($build_target); + if (!defined($build_target) || ! -d "$real_target") { # Danglink link + my $num = unlink "$modules_base/$version/build"; + if ($num != 1) { + warn "error unlinking $modules_base/$version/build"; + } else { + if ($force_build_link || -d "/usr/src/linux-headers-$version") { + my $result = symlink ("/usr/src/linux-headers-$version", + "$modules_base/$version/build"); + if (! $result) { + warn "Could not link /usr/src/linux-headers-$version to $modules_base/$version/build:$!" + } + } + } + } + } +} + +if ($relink_build_link || $force_build_link) { + &fix_build_link(); +} +###################################################################### +## Fix the source link +###################################################################### +sub fix_source_link { + return unless -d "$modules_base/$version"; + if ($relink_src_link) { + my $source_target; + my $real_target = ''; + + if (-l "$modules_base/$version/source") { + $source_target = readlink "$modules_base/$version/source"; + } else { + return; + } + # Determine what the real file name is, and test that for existence + $real_target = abs_path($source_target) if defined($source_target); + if (!defined($source_target) || ! -d "$real_target") { # Danglink link + my $num = unlink "$modules_base/$version/source"; + if ($num != 1) { + warn "error unlinking $modules_base/$version/source"; + } + } + } +} + +if ($relink_src_link) { + &fix_source_link(); +} +###################################################################### +###################################################################### +########### Test whether a relative symlinkwould be OK ####### +###################################################################### +###################################################################### +sub test_relative { + my %params = @_; + my $cwd; + + die "Internal Error: Missing Required paramater 'Old Dir' " + unless $params{'Old Dir'}; + die "Internal Error: Missing Required paramater New Dir' " + unless $params{'New Dir'}; + + + die "Internal Error: No such dir $params{'Old Dir'} " + unless -d $params{'Old Dir'}; + die "Internal Error: No such dir $params{'New Dir'} " + unless -d $params{'New Dir'}; + + warn "Test relative: testing $params{'Old Dir'} -> $params{'New Dir'}" + if $DEBUG; + chomp($cwd = `pwd`); + chdir ($params{'New Dir'}) or die "Could not chdir to $params{'New Dir'}:$!"; + my $ok = 0; + $params{'Old Dir'} =~ s|^/*||o; + if (-d $params{'Old Dir'} ) { + if (defined $params{'Test File'}) { + if (-e $params{'Old Dir'} . $params{'Test File'}) { + $ok = 1; + } + } else { + $ok = 1; # well, backward compatibility + } + } + chdir ($cwd) or die "Could not chdir to $params{'New Dir'}:$!"; + return $ok; +} + + +sub spath { + my %params = @_; + + die "Missing Required paramater 'Old'" unless $params{'Old'}; + die "Missing Required paramater 'New'" unless $params{'New'}; + + my @olddir = split '/', `readlink -q -m $params{'Old'}`; + my @newdir = split '/', `readlink -q -m $params{'New'}`; + my @outdir = @olddir; + + my $out = ''; + my $i; + for ($i = 0; $i <= $#olddir && $i <= $#newdir; $i++) { + $out++ if ($olddir[$i] ne $newdir[$i]); + shift @outdir unless $out; + unshift @outdir, ".." if $out; + } + if ($#newdir > $#olddir) { + for ($i=0; $i < $#newdir; $i++) { + unshift @outdir, ".."; + } + } + return join ('/', @outdir); +} + +# This routine is invoked if there is a symbolic link in place +# in $image_dest/$kimage -- so a symlink exists in the destination. +# What we are trying to determine is if we need to move the symbolic link over +# to the the .old location +sub move_p { + my $kimage = $_[0]; # Name of the symbolic link + my $image_dest = $_[1]; # The directory the links goes into + my $image_name = $_[2]; + my $src_dir = $_[3]; + my $force_move = 0; + warn "Move?: kimage=$kimage, image_dest=$image_dest, \n" . + "\timage_name=$image_name, src_dir=$src_dir" if $DEBUG; + + if ($no_symlink) { + # we do not want links, yet we have a symbolic link here! + warn "found a symbolic link in " . $image_dest . "$kimage \n" . + "even though no_symlink is defined\n" if $no_symlink; + # make sure we change this state of affairs + $force_move = 1; + return $force_move; + } + + warn "DEBUG: OK. We found symlink, and we should have a symlink here.\n" + if $DEBUG; + my $vmlinuz_target = readlink "$kimage"; + my $real_target = ''; + my $target = `readlink -q -m "${realimageloc}${kimage}-$version"`; + $real_target = abs_path($vmlinuz_target) if defined($vmlinuz_target); + + if (!defined($vmlinuz_target) || ! -f "$real_target") { + # what, a dangling symlink? + warn "The link " . $image_dest . "$kimage is a dangling link" . + "to $real_target\n"; + $force_move = 1; + return $force_move; + } + + + warn "DEBUG: The link $kimage points to ($vmlinuz_target)\n" if $DEBUG; + warn "DEBUG: ($vmlinuz_target) is really ($real_target)\n" if $DEBUG; + my $cwd; + chomp ($cwd=`pwd`); + if ($vmlinuz_target !~ m|^/|o) { + $vmlinuz_target = $cwd . "/" . $vmlinuz_target; + $vmlinuz_target =~ s|/+|/|o; + } + $vmlinuz_target = `readlink -q -m $vmlinuz_target`; + + if ("$vmlinuz_target" ne "$target") { + warn "DEBUG: We need to handle this.\n" if $DEBUG; + if ($minimal_swap) { + warn "DEBUG: Minimal swap.\n" if $DEBUG; + if (-l "$kimage.old") { + warn "DEBUG: There is an old link at $kimage.old\n" if $DEBUG; + my $old_target = readlink "$kimage.old"; + my $real_old_target = ''; + $real_old_target=abs_path($old_target) if defined ($old_target); + + if ($real_old_target && -f "$real_old_target") { + if ($old_target !~ m|^/|o) { + $old_target = $cwd . "/" . $old_target; + $old_target =~ s|/+|/|o; + } + $old_target = `readlink -q -m $old_target`; + if ("$old_target" ne "$target") { + $force_move = 1; + warn "DEBUG: Old link ($old_target) does not point to us ($target)\n" + if $DEBUG; + } + else { # The .old points to the current + warn "$kimage.old --> $target -- doing nothing"; + $force_move = 0; + } + } + else { + warn "DEBUG: Well, the old link does not exist -- so we move\n" + if $DEBUG; + $force_move = 1; + } + } + else { + warn "DEBUG: No .old link -- OK to move\n" + if $DEBUG; + $force_move = 1; + } + } + else { + warn "DEBUG: ok, minimal swap is no-- so we move.\n" + if $DEBUG; + $force_move = 1; + } + } + else { # already have proper link + warn "$kimage($vmlinuz_target) points to $target ($real_target) -- doing nothing"; + $force_move = 0; + } + return $force_move; +} + + +# This routine moves the symbolic link around (/vmlinuz -> /vmlinuz.old) +# It pays attention to whether we should the fact whether we should be using +# hard links or not. +sub really_move_link { + my $kimage = $_[0]; # Name of the symbolic link + my $image_dest = $_[1]; # The directory the links goes into + my $image_name = $_[2]; + my $src_dir = $_[3]; + warn "really_move_link: kimage=$kimage, image_dest=$image_dest\n" . + "\t image_name=$image_name, src_dir=$src_dir" if $DEBUG; + + # don't clobber $kimage.old quite yet + rename("$kimage", "$kimage.$$") || + die "failed to move " . $image_dest . "$kimage:$!"; + my $Old = $src_dir; + my $cwd; + + chomp($cwd=`pwd`); + if (test_relative ('Old Dir' => $Old, 'New Dir' => $cwd, + 'Test File' => "$image_name")) { + $Old =~ s|^/*||o; + } + # Special case is they are in the same dir + my $rel_path = spath('Old' => "$Old", 'New' => "$cwd" ); + $Old ="" if $rel_path =~ m/^\s*$/o; + + if ($use_hard_links =~ m/YES/i) { + if (! link("${Old}${image_name}", "$kimage")) { + rename("$kimage.$$", "$kimage"); + die("Failed to link ${Old}${image_name} to " . + "${image_dest}${kimage}.\n"); + } + } + else { + if (! symlink("${Old}${image_name}", "$kimage")) { + rename("$kimage.$$", "$kimage"); + die("Failed to symbolic-link ${Old}${image_name} to " . + "${image_dest}${kimage}.\n"); + } + } + + # Ok, now we may clobber the previous .old file + if (-l "$kimage.old" || ! -e "$kimage.old" ) { + rename("$kimage.$$", "$kimage.old"); + } + else { + warn "$kimage.old is not a symlink, not clobbering\n"; + warn "rm $kimage.$$"; + } +} + +# This routine handles a request to do symlinks, but there is no +# symlink file already there. Either we are supposed to use copy, or we are +# installing on a pristine system, or the user does not want symbolic links at +# all. We use a configuration file to tell the last two cases apart, creating +# a config file if needed. +sub handle_missing_link { + my $kimage = $_[0]; # Name of the symbolic link + my $image_dest = $_[1]; # The directory the links goes into + my $image_name = $_[2]; + my $src_dir = $_[3]; + warn "handle_missing_link: kimage=$kimage, image_dest=$image_dest\n" . + "\t image_name=$image_name, src_dir=$src_dir" if $DEBUG; + + if ($no_symlink) { + my $ret = system("cp -a --backup=t " . $realimageloc . + "$image_name " . " $kimage"); + if ($ret) { + die("Failed to copy " . $realimageloc . "$image_name to " + . $image_dest . "$kimage .\n"); + } + } + + if (! $no_symlink && $do_symlink =~ /Yes/i) { + my $Old = $realimageloc; + my $New = $image_dest; + my $Name = "$image_name"; + my $Link_Dest = "$kimage"; + + if (test_relative ('Old Dir' => $Old, + 'New Dir' => $New, + 'Test File' => $Name)) { + $Old =~ s|^/*||o; + } + # Special case is they are in the same dir + my $rel_path = spath('Old' => "$Old", 'New' => "$New" ); + $Old ="" if $rel_path =~ m/^\s*$/o; + + symlink($Old . "$Name", "$Link_Dest") || + die("Failed to symbolic-link ${Old}$Name to $Link_Dest.\n"); + + } +} + +# This routine handles the rest of the cases, where the user has requested +# non-traditional handling, like using cp or hard links. +sub handle_non_symlinks { + my $kimage = $_[0]; # Name of the symbolic link + my $image_dest = $_[1]; # The directory the links goes into + my $image_name = $_[2]; + my $src_dir = $_[3]; + warn "handle_non_link: kimage=$kimage, image_dest=$image_dest\n" . + "\t image_name=$image_name, src_dir=$src_dir" if $DEBUG; + + # Save the current image. We do this in all four cases + rename("$kimage", "$kimage.$$") || + die "failed to move " . $image_dest . "$kimage:$!"; + + ##,#### + # case One + #`#### + if ($no_symlink) { + # Maybe /$image_dest is on a dos system? + my $ret = system("cp -a --backup=t " . $realimageloc + . "$image_name " . "$kimage"); + if ($ret) { + if (-e "$kimage.$$") { + rename("$kimage.$$", "$kimage"); + } + die("Failed to copy " . $realimageloc . "$image_name to " + . $image_dest . "$kimage .\n"); + } + } + ##,#### + # case Two + #`#### + elsif ($use_hard_links =~ m/YES/i ) { + # Ok then. this ought to be a hard link, and hence fair game + # don't clobber $kimage.old quite yet + my $Old = $realimageloc; + my $cwd; + chomp($cwd=`pwd`); + if (test_relative ('Old Dir' => $Old, 'New Dir' => $cwd, + 'Test File' => "$image_name")) { + $Old =~ s|^/*||o; + } + # Special case is they are in the same dir + my $rel_path = spath('Old' => "$Old", 'New' => "$cwd" ); + $Old ="" if $rel_path =~ m/^\s*$/o; + + if (! link($Old . "$image_name", "$kimage")) { + rename("$kimage.$$", "$kimage"); + die("Failed to hard link " . $realimageloc . "$image_name to " + . $image_dest . "$kimage .\n"); + } + } + ##,#### + # case Three + #`#### + else { + # We just use cp + my $ret = system("cp -a --backup=t " . $realimageloc + . "$image_name " . "$kimage"); + if ($ret) { + if (-e "$kimage.$$") { + rename("$kimage.$$", "$kimage"); + } + die("Failed to copy " . $realimageloc . "$image_name to " + . $image_dest . "$kimage .\n"); + } + } + # Ok, now we may clobber the previous .old file + rename("$kimage.$$", "$kimage.old") if -e "$kimage.$$"; +} + +# This routine is responsible for setting up the symbolic links +# So, the actual kernel image lives in +# $realimageloc/$image_name (/boot/vmlinuz-2.6.12). +# This routine creates symbolic links in $image_dest/$kimage (/vmlinuz) +sub image_magic { + my $kimage = $_[0]; # Name of the symbolic link + my $image_dest = $_[1]; # The directory the links goes into + my $image_name = "$kimage-$version"; + my $src_dir = $realimageloc; + warn "image_magic: kimage=$kimage, image_dest=$image_dest\n" . + "\t image_name=$image_name, src_dir=$src_dir" if $DEBUG; + + if (-l "$kimage") { # There is a symbolic link + warn "DEBUG: There is a symlink for $kimage\n" if $DEBUG; + my $force_move = move_p($kimage, $image_dest, $image_name, $src_dir); + + if ($force_move) { + really_move_link($kimage, $image_dest, $image_name, $src_dir); + } + } + elsif (! -e "$kimage") { + # Hmm. Pristine system? How can that be? Installing from scratch? + # Or maybe the user does not want a symbolic link here. + # Possibly they do not want a link here. (we should be in / + # here[$image_dest, really] + handle_missing_link($kimage, $image_dest, $image_name, $src_dir); + } + elsif (-e "$kimage" ) { + # OK, $kimage exists -- but is not a link + handle_non_symlinks($kimage, $image_dest, $image_name, $src_dir); + } +} + +###################################################################### +###################################################################### +###################################################################### +###################################################################### + +sub do_modules { + print STDERR "Running depmod.\n"; + my $ret = system("depmod -a -F $realimageloc/System.map-$version $version"); + my $exit_value = $? >> 8; + my $signal_num = $? & 127; + my $dumped_core = $? & 128; + if ($ret) { + my $seen; + my $answer; + my $question; + $question = "${package_name}/postinst/depmod-error-initrd-$version"; + + ($ret,$seen) = fset ("$question", 'seen', 'false'); + die "Error setting debconf flags in $question: $seen" if $ret; + + $ret = subst("$question", 'modules_base', "$modules_base"); + die "Error setting debconf substitutions in $question: $seen" if $ret; + + $ret = subst("$question", 'SIGNAL', ", and got a signal $signal_num"); + die "Error setting debconf substitutions in $question: $seen" if $ret; + + if ($dumped_core) { + $ret = subst("$question", 'CORE', ", and dumped core"); + die "Error setting debconf substitutions in $question: $seen" if $ret; + } + else { + $ret = subst("$question", 'CORE', " "); + die "Error setting debconf substitutions in $question: $seen" if $ret; + } + + ($ret,$seen) = input('medium', "$question"); + if ($ret && $ret != 30 ) { + die "Error setting debconf question $question: $seen"; + } + + ($ret,$seen) = go (); + if ($ret && $ret != 30 ) { + die "Error asking debconf question $question: $seen"; + } + + ($ret,$answer) = get("$question"); + die "Error retreiving answer for $question: $answer" if $ret; + + if (! $ignore_depmod_err) { + if ($answer =~ /^(y|t)/i) { + exit(1); + } + else { + print STDERR "Ok, continuing as directed\n"; + } + } + } + + # If we are installing (not upgrading) a package for a newer + # upstream version than that of the running kernel, check whether + # the user might be missing necessary firmware, perhaps because + # it has now been removed from the kernel. + # + # We base this check on the modules used in the running kernel and + # the corresponding (by name) modules in the new kernel. This is + # not entirely accurate because: + # 1. A device may now be handled by a module with a different name, + # leading us to miss the dependency + # 2. A device may be handled by a module that needs firmware only + # for some other device, leading us to claim a dependency wrongly + + if (!defined($ARGV[1]) || $ARGV[1] eq '') { + sub version_code { + my $version = shift; + $version =~ s/^2\.(\d+)\.(\d+).*/2*65536 + $1*256 + $2/e + or $version =~ s/^(\d+)\.(\d+).*/$1*65536 + $2*256/e + or $version = 0; + return $version; + } + (undef, undef, my $running_version) = POSIX::uname(); + + if (version_code($version) > version_code($running_version)) { + my $missing = ''; + my %module_paths; + open(DEP, "<$modules_base/$version/modules.dep") or return; + while () { + if (m|(.*/([^/]*)\.ko):|) { + my ($path, $module) = ($1, $2); + $module =~ s/-/_/g; + $module_paths{$module} = $path; + } + } + close(DEP); + open(MODULES, ') { + s/ .*//s; + my $module = $_; + my $module_path = $module_paths{$module}; + if (defined($module_path)) { + my $first = 1; + if ($module_path !~ m|^/|) { + $module_path = "$modules_base/$version/$module_path"; + } + open(MODINFO, "modinfo -F firmware '$module_path' |"); + while () { + chomp; + my $firmware = $_; + unless (-e "/lib/firmware/$firmware" || + -e "/lib/firmware/$version/$firmware") { + if ($first) { + $missing .= "\\n" if $missing ne ''; + $missing .= "$module: "; + $first = 0; + } else { + $missing .= ', '; + } + $missing .= $firmware; + } + } + close(MODINFO); + } + } + close(MODULES); + + if ($missing ne '') { + my ($ret, $seen); + my $text = "${package_name}/postinst/missing-firmware-${version}"; + + ($ret, $seen) = subst($text, 'runningversion', $running_version); + die "Error setting debconf substitutions in $text: $seen" if $ret; + + ($ret, $seen) = subst($text, 'version', $version); + die "Error setting debconf substitutions in $text: $seen" if $ret; + + ($ret, $seen) = subst($text, 'missing', $missing); + die "Error setting debconf substitutions in $text: $seen" if $ret; + + ($ret, $seen) = input('high', $text); + if ($ret && $ret != 30) { + die "Error setting debconf question $text: $seen"; + } + + ($ret, $seen) = go(); + if ($ret && $ret != 30) { + die "Error asking debconf question $text: $seen"; + } + } + } + } +} + +# We may not have any modules installed +if (-d "$modules_base/$version") { + &do_modules(); +} + + +# Warn if we are ignoring the old ramdisk setting +if ($ramdisk =~ /\S/) { + my ($question, $ret, $seen); + $question = "${package_name}/postinst/ignoring-ramdisk"; + ($ret,$seen) = input('high', "$question"); + die "Error setting debconf question $question: $seen" if $ret && $ret != 30; + ($ret,$seen) = go(); + die "Error asking debconf question $question: $seen" if $ret && $ret != 30; +} + +# Only change the symlinks if we are not being upgraded +if (! defined $ARGV[1] || ! $ARGV[1] || $ARGV[1] =~ m//o) { + image_magic($kimage, $image_dest); + if ($initrd) { + image_magic("initrd.img", $image_dest); + } +} +else { + if (! -e "$kimage") { + handle_missing_link($kimage, $image_dest, "$kimage-$version", + $realimageloc); + } + if ($initrd && ! -e "initrd.img") { + handle_missing_link("initrd.img", $image_dest, "initrd.img-$version", + $realimageloc); + } +} + +# set the env var stem +$ENV{'STEM'} = "linux"; +sub run_hook { + my $type = shift; + my $script = shift; + + print STDERR "Running $script.\n"; + system ("$script $version $realimageloc$kimage-$version") && + print STDERR "User $type hook script [$script] "; + if ($?) { + if ($? == -1) { + print STDERR "failed to execute: $!\n"; + } + elsif ($? & 127) { + printf STDERR "died with signal %d, %s coredump\n", + ($? & 127), ($? & 128) ? 'with' : 'without'; + } + else { + printf STDERR "exited with value %d\n", $? >> 8; + } + exit $? >> 8; + } +} + +my $options; +for (@ARGV) { + s,','\\'',g; + $options .= " '$_'"; +} +$ENV{'DEB_MAINT_PARAMS'}="$options"; + +## Run user hook script here, if any +if ($postinst_hook) { + &run_hook("postinst", $postinst_hook); +} + +if (-d "/etc/kernel/postinst.d") { + print STDERR "Examining /etc/kernel/postinst.d.\n"; + system ("run-parts --verbose --exit-on-error --arg=$version " . + "--arg=$realimageloc$kimage-$version " . + "/etc/kernel/postinst.d") && + die "Failed to process /etc/kernel/postinst.d"; +} + +if (-d "/etc/kernel/postinst.d/$version") { + print STDERR "Examining /etc/kernel/postinst.d/$version.\n"; + system ("run-parts --verbose --exit-on-error --arg=$version " . + "--arg=$realimageloc$kimage-$version " . + "/etc/kernel/postinst.d/$version") && + die "Failed to process /etc/kernel/postinst.d/$version"; +} + +exit 0; + +__END__ --- linux-2.6-3.0.0~rc6.orig/debian/templates/temp.image.plain/prerm +++ linux-2.6-3.0.0~rc6/debian/templates/temp.image.plain/prerm @@ -0,0 +1,200 @@ +#! /usr/bin/perl +# +use strict; +use warnings; +use Debconf::Client::ConfModule qw(:all); +version('2.0'); +my $capb=capb("backup"); + +$|=1; +# Predefined values: +my $version = "=V"; +my $link_in_boot = ""; +my $no_symlink = ""; +my $do_symlink = "Yes"; # target machine defined +my $do_boot_enable = "Yes"; # target machine defined +my $kimage = "=K"; +my $use_hard_links = ''; # hardlinks do not wirk across fs boundaries +my $prerm_hook = ''; #Normally we do not +my $minimal_swap = ''; # Do not swap symlinks +my $ignore_depmod_err = ''; # normally we do not +my $relink_build_link = 'YES'; # There is no harm in checking the link +my $force_build_link = ''; # There is no harm in checking the link +my $kernel_arch = "=B"; +my $package_name = "linux-image-$version"; + +#known variables +my $image_dest = "/"; +my $realimageloc = "/boot/"; +my $CONF_LOC = '/etc/kernel-img.conf'; + +# Variables used +my $image=''; +my $ret=0; +my $seen=''; +my $answer=''; +my $running = ''; +my $WouldInvalidate = 0; + +if ($ARGV[0] && ($ARGV[0] =~ /remove/ || $ARGV[0] =~ /upgrade/)) { + if (-l "/usr/doc/linux-image-$version") { + unlink "/usr/doc/linux-image-$version"; + } +} + +# Ignore all invocations uxcept when called on to remove +exit 0 unless ($ARGV[0] && $ARGV[0] =~ /remove/) ; + +if (-r "$CONF_LOC" && -f "$CONF_LOC" ) { + if (open(CONF, "$CONF_LOC")) { + while () { + chomp; + s/\#.*$//g; + next if /^\s*$/; + + $do_symlink = "" if /do_symlinks\s*=\s*(no|false|0)\s*$/i; + $no_symlink = "" if /no_symlinks\s*=\s*(no|false|0)\s*$/i; + $link_in_boot = "" if /link_in_boot\s*=\s*(no|false|0)\s*$/i; + $do_boot_enable = '' if /do_boot_enable\s*=\s*(no|false|0)\s*$/i; + $use_hard_links = '' if /use_hard_links\s*=\s*(no|false|0)\s*$/i; + $minimal_swap = '' if /minimal_swap\s*=\s*(no|false|0)\s*$/i; + $ignore_depmod_err = '' if /ignore_depmod_err\s*=\s*(no|false|0)\s*$/i; + $relink_build_link = '' if /relink_build_link\s*=\s*(no|false|0)\s*$/i; + $force_build_link = '' if /force_build_link\s*=\s*(no|false|0)\s*$/i; + + + $do_symlink = "Yes" if /do_symlinks\s*=\s*(yes|true|1)\s*$/i; + $no_symlink = "Yes" if /no_symlinks\s*=\s*(yes|true|1)\s*$/i; + $link_in_boot = "Yes" if /link_in_boot\s*=\s*(yes|true|1)\s*$/i; + $do_boot_enable = "Yes" if /do_boot_enable\s*=\s*(yes|true|1)\s*$/i; + $use_hard_links = "Yes" if /use_hard_links\s*=\s*(yes|true|1)\s*$/i; + $minimal_swap = 'Yes' if /minimal_swap\s*=\s*(yes|true|1)\s*$/i; + $ignore_depmod_err = 'Yes' if /ignore_depmod_err\s*=\s*(yes|true|1)\s*$/i; + $relink_build_link = 'Yes' if /relink_build_link\s*=\s*(yes|true|1)\s*$/i; + $force_build_link = 'Yes' if /force_build_link\s*=\s*(yes|true|1)\s*$/i; + + $image_dest = "$1" if /image_dest\s*=\s*(\S+)/i; + $prerm_hook = "$1" if /prerm_hook\s*=\s*(\S+)/i; + } + close CONF; + } +} + + +$ENV{KERNEL_ARCH}=$kernel_arch if $kernel_arch; + +#check to see if we are trying to remove a running kernel +# if so we abort right now. +chop($running=`uname -r`); +if ($running eq $version) { + my $question = "${package_name}/prerm/removing-running-kernel-$version"; + + ($ret,$seen) = fset ("$question", 'seen', 'false'); + die "Error setting debconf flags in $question: $seen" if $ret; + + $ret = subst("$question", 'running', "$running"); + die "Error setting debconf substitutions in $question: $seen" if $ret; + + ($ret,$seen) = input('critical', "$question"); + if ($ret && $ret != 30 ) { + die "Error setting debconf question $question: $seen"; + } + + ($ret,$seen) = go (); + if ($ret && $ret != 30 ) { + die "Error asking debconf question $question: $seen"; + } + + ($ret,$answer) = get("$question"); + die "Error retreiving answer for $question: $answer" if $ret; + + if ($answer =~ /^(y|t)/i) { + exit 1; #Operation not permitted + } + else { + print STDERR "Ok, proceeding with removing running kernel image.\n"; + } +} + +#Now, they have an alternate kernel which they are currently running + +chdir("/") or die "could not chdir to /:$!\n"; + + +# set the env var stem +$ENV{'STEM'} = "linux"; + +sub exec_script { + my $type = shift; + my $script = shift; + print STDERR "Running $type hook script $script.\n"; + system ("$script $version $realimageloc$kimage-$version") && + print STDERR "User $type hook script [$script] "; + if ($?) { + if ($? == -1) { + print STDERR "failed to execute: $!\n"; + } + elsif ($? & 127) { + printf STDERR "died with signal %d, %s coredump\n", + ($? & 127), ($? & 128) ? 'with' : 'without'; + } + else { + printf STDERR "exited with value %d\n", $? >> 8; + } + exit $? >> 8; + } +} +sub run_hook { + my $type = shift; + my $script = shift; + if ($script =~ m,^/,) { + # Full path provided for the hook script + if (-x "$script") { + &exec_script($type,$script); + } + else { + die "The provided $type hook script [$script] could not be run.\n"; + } + } + else { + # Look for it in a safe path + for my $path ('/bin', '/sbin', '/usr/bin', '/usr/sbin') { + if (-x "$path/$script") { + &exec_script($type, "$path/$script"); + return 0; + } + } + # No luck + print STDERR "Could not find $type hook script [$script].\n"; + die "Looked in: '/bin', '/sbin', '/usr/bin', '/usr/sbin'\n"; + } +} + + +my $options; +for (@ARGV) { + s,','\\'',g; + $options .= " '$_'"; +} +$ENV{'DEB_MAINT_PARAMS'}="$options"; + +## Run user hook script here, if any +if (-x "$prerm_hook") { + &run_hook("prerm", $prerm_hook); +} +if (-d "/etc/kernel/prerm.d") { + print STDERR "Examining /etc/kernel/prerm.d.\n"; + system ("run-parts --verbose --exit-on-error --arg=$version " . + "--arg=$realimageloc$kimage-$version /etc/kernel/prerm.d") && + die "Failed to process /etc/kernel/prerm.d"; +} +if (-d "/etc/kernel/prerm.d/$version") { + print STDERR "Examining /etc/kernel/prerm.d/$version.\n"; + system ("run-parts --verbose --exit-on-error --arg=$version" . + " --arg=$realimageloc$kimage-$version " . + "/etc/kernel/prerm.d/$version") && + die "Failed to process /etc/kernel/prerm.d/$version"; +} + +exit 0; +__END__ --- linux-2.6-3.0.0~rc6.orig/debian/templates/image.plain.bug/include-0version +++ linux-2.6-3.0.0~rc6/debian/templates/image.plain.bug/include-0version @@ -0,0 +1,9 @@ +add_0version() { + echo '** Version:' >&3 + cat /proc/version >&3 + echo >&3 +} + +ask_0version() { + true +} --- linux-2.6-3.0.0~rc6.orig/debian/templates/image.plain.bug/include-dmesg +++ linux-2.6-3.0.0~rc6/debian/templates/image.plain.bug/include-dmesg @@ -0,0 +1,12 @@ +add_dmesg() { + echo '** Kernel log:' >&3 + dmesg | tail -n 100 >&3 + echo >&3 +} + +ask_dmesg() { + # Remind the user to attach the kernel log. This should also trigger + # a reminder in some MUAs if the user tries to send without it. + echo '** Kernel log: boot messages should be attached' >&3 + echo >&3 +} --- linux-2.6-3.0.0~rc6.orig/debian/templates/image.plain.bug/include-model +++ linux-2.6-3.0.0~rc6/debian/templates/image.plain.bug/include-model @@ -0,0 +1,55 @@ +grep_model() { + case "$(uname -m)" in + alpha) + egrep '^(system (type|variation|revision)|platform string)\b' /proc/cpuinfo + ;; + arm*) + egrep '^(Processor|Hardware|Revision)\b' /proc/cpuinfo + ;; + i386|ia64|x86_64) + local found= + for name in {sys,product,chassis,bios,board}_{vendor,name,version}; do + if [ -f /sys/class/dmi/id/$name ]; then + echo -n "$name: " + cat /sys/class/dmi/id/$name + found=y + fi + done + test -n "$found" + ;; + mips|mips64) + egrep '^(system type|cpu model)\b' /proc/cpuinfo + ;; + parisc|parisc64) + egrep '^(model|[hs]version)\b' /proc/cpuinfo + ;; + ppc|ppc64) + egrep -i '^(board|machine|model|motherboard|platform|revision|vendor)\b' /proc/cpuinfo + ;; + s390|s390x) + egrep '^processor\b' /proc/cpuinfo + ;; + sparc|sparc64) + egrep '^(cpu|fpu|pmu|prom|type)\b' /proc/cpuinfo + ;; + sh4|sh4a) + egrep '^(machine|cpu)\b' /proc/cpuinfo + ;; + *) + false + ;; + esac +} + +add_model() { + local found= + echo '** Model information' >&3 + grep_model >&3 2>/dev/null || echo "not available" >&3 + echo >&3 +} + +ask_model() { + # This is still valid as long as the bug is being reported on the same + # system. + test $same_system = nop || add_model +} --- linux-2.6-3.0.0~rc6.orig/debian/templates/image.plain.bug/include-1cmdline +++ linux-2.6-3.0.0~rc6/debian/templates/image.plain.bug/include-1cmdline @@ -0,0 +1,9 @@ +add_1cmdline() { + echo '** Command line:' >&3 + cat /proc/cmdline >&3 + echo >&3 +} + +ask_1cmdline() { + true +} --- linux-2.6-3.0.0~rc6.orig/debian/templates/image.plain.bug/include-modules +++ linux-2.6-3.0.0~rc6/debian/templates/image.plain.bug/include-modules @@ -0,0 +1,10 @@ +add_modules() { + echo '** Loaded modules:' >&3 + lsmod >&3 + echo >&3 +} + +ask_modules() { + true +} + --- linux-2.6-3.0.0~rc6.orig/debian/templates/image.plain.bug/include-sound +++ linux-2.6-3.0.0~rc6/debian/templates/image.plain.bug/include-sound @@ -0,0 +1,11 @@ +add_sound() { + [ -f /proc/asound/cards ] && return + echo '** Sound cards:' >&3 + cat /proc/asound/cards >&3 + # amixer >&3 + echo >&3 +} + +ask_sound() { + true +} --- linux-2.6-3.0.0~rc6.orig/debian/templates/image.plain.bug/presubj +++ linux-2.6-3.0.0~rc6/debian/templates/image.plain.bug/presubj @@ -0,0 +1,8 @@ +Please ensure that you are currently running the kernel version that you +are reporting on. This will allow your bug report to include useful +diagnostic information about the running kernel. + +If you are reporting that the kernel fails to boot, please use a digital +camera, serial console or netconsole to record the boot messages and +attach these to your report. You can use the kernel parameter +'boot_delay=1000' to slow down the boot messages. --- linux-2.6-3.0.0~rc6.orig/debian/templates/image.plain.bug/include-pci +++ linux-2.6-3.0.0~rc6/debian/templates/image.plain.bug/include-pci @@ -0,0 +1,16 @@ +add_pci() { + echo '** PCI devices:' >&3 + if command -v lspci > /dev/null; then + lspci -nnvv >&3 + else + echo 'not available' >&3 + fi + echo >&3 +} + +ask_pci() { + # This information shouldn't vary much between kernel versions, so + # include it anyway. + test $same_system = nop || add_pci +} + --- linux-2.6-3.0.0~rc6.orig/debian/templates/image.plain.bug/include-network +++ linux-2.6-3.0.0~rc6/debian/templates/image.plain.bug/include-network @@ -0,0 +1,44 @@ +_add_etc_network_interfaces() { + echo '** Network interface configuration:' >&3 + # Hide passwords/keys + awk '$1 ~ /key|pass|^wpa-(anonymous|identity|phase|pin|private|psk)/ { gsub(".", "*", $2); } + $1 == "ethtool-wol" { gsub(".", "*", $3); } + !/^[[:space:]]*\#/ { print; } + ' &3 + echo >&3 +} + +add_network() { + yesno "Include network configuration and status from this computer? " nop + test $REPLY = yep || return 0 + + _add_etc_network_interfaces + echo '** Network status:' >&3 + if command -v ip >/dev/null; then + echo '*** IP interfaces and addresses:' >&3 + ip address show >&3 + echo >&3 + fi + echo '*** Device statistics:' >&3 + cat /proc/net/dev >&3 + echo >&3 + if command -v netstat >/dev/null; then + echo '*** Protocol statistics:' >&3 + netstat -s >&3 || true + echo >&3 + fi + echo '*** Device features:' >&3 + for dir in /sys/class/net/*; do + echo -n "${dir##*/}: " >&3 + cat "$dir"/features >&3 + done + echo >&3 +} + +ask_network() { + test $same_system = yep || return 0 + yesno "Include network configuration from this computer? " nop + test $REPLY = yep || return 0 + + _add_etc_network_interfaces +} --- linux-2.6-3.0.0~rc6.orig/debian/templates/image.plain.bug/include-usb +++ linux-2.6-3.0.0~rc6/debian/templates/image.plain.bug/include-usb @@ -0,0 +1,11 @@ +add_usb() { + echo '** USB devices:' >&3 + lsusb >&3 2>/dev/null || echo 'not available' >&3 + echo >&3 +} + +ask_usb() { + # This information shouldn't vary much between kernel versions, so + # include it anyway. + test $same_system = nop || add_usb +} --- linux-2.6-3.0.0~rc6.orig/debian/templates/image.plain.bug/include-1tainted +++ linux-2.6-3.0.0~rc6/debian/templates/image.plain.bug/include-1tainted @@ -0,0 +1,49 @@ +TAINT_PROPRIETARY_MODULE=0 +TAINT_FORCED_MODULE=1 +TAINT_UNSAFE_SMP=2 +TAINT_FORCED_RMMOD=3 +TAINT_MACHINE_CHECK=4 +TAINT_BAD_PAGE=5 +TAINT_USER=6 +TAINT_DIE=7 +TAINT_OVERRIDDEN_ACPI_TABLE=8 +TAINT_WARN=9 +TAINT_CRAP=10 +TAINT_FIRMWARE_WORKAROUND=11 +TAINT_OOT_MODULE=12 + +_check() { + if [ $(($tainted & 1<<$1)) -ne 0 ]; then + result_short="$result_short$2" + result_long="$result_long * $3\n" + fi +} + +add_1tainted() { + tainted=$(cat /proc/sys/kernel/tainted) + if [ "$tainted" -gt 0 ]; then + local result_short result_long + _check $TAINT_PROPRIETARY_MODULE 'P' 'Proprietary module has been loaded.' + _check $TAINT_FORCED_MODULE 'F' 'Module has been forcibly loaded.' + _check $TAINT_UNSAFE_SMP 'S' 'SMP with CPUs not designed for SMP.' + _check $TAINT_FORCED_RMMOD 'R' 'User forced a module unload.' + _check $TAINT_MACHINE_CHECK 'M' 'System experienced a machine check exception.' + _check $TAINT_BAD_PAGE 'B' 'System has hit bad_page.' + _check $TAINT_USER 'U' 'Userspace-defined naughtiness.' + _check $TAINT_DIE 'D' 'Kernel has oopsed before.' + _check $TAINT_OVERRIDDEN_ACPI_TABLE 'A' 'ACPI table overridden.' + _check $TAINT_WARN 'W' 'Taint on warning.' + _check $TAINT_CRAP 'C' 'Module from drivers/staging has been loaded.' + _check $TAINT_FIRMWARE_WORKAROUND 'I' 'Working around severe firmware bug.' + _check $TAINT_OOT_MODULE 'O' 'Out-of-tree module has been loaded.' + echo "** Tainted: $result_short ($tainted)" >&3 + printf "$result_long" >&3 + else + echo '** Not tainted' >&3 + fi + echo >&3 +} + +ask_1tainted() { + true +} --- linux-2.6-3.0.0~rc6.orig/debian/templates/image.plain.bug/script +++ linux-2.6-3.0.0~rc6/debian/templates/image.plain.bug/script @@ -0,0 +1,26 @@ +#!/bin/bash +set -e + +PATH=/sbin:/bin:/usr/sbin:/usr/bin + +dir="$(dirname $0)" + +. "$dir"/info + +for file in "$dir"/include-*; do + name="$(echo $file | sed -e 's,^.*/include-,,')" + hooks+=($name) + . "$file" +done + +if [ "$RELEASE" == "$(uname -r)" ]; then + for hook in ${hooks[@]}; do + add_$hook + done +else + yesno "Does the bug you are reporting affect this computer? " yep + same_system=$REPLY + for hook in ${hooks[@]}; do + ask_$hook + done +fi --- linux-2.6-3.0.0~rc6.orig/debian/templates/image.plain.bug/control +++ linux-2.6-3.0.0~rc6/debian/templates/image.plain.bug/control @@ -0,0 +1,2 @@ +Submit-As: linux-2.6 +Package-Status: firmware-bnx2 firmware-bnx2x firmware-ipw2x00 firmware-ivtv firmware-iwlwifi firmware-linux firmware-linux-nonfree firmware-qlogic firmware-ralink xen-hypervisor --- linux-2.6-3.0.0~rc6.orig/debian/config/defines +++ linux-2.6-3.0.0~rc6/debian/config/defines @@ -0,0 +1,49 @@ +[abi] +abiname: 1 + +[base] +arches: + alpha + amd64 + armel + armhf + hppa + i386 + ia64 + m68k + mips + mipsel + powerpc + ppc64 + s390 + sh4 + sparc + sparc64 +compiler: gcc-4.4 +featuresets: + none + +[description] +part-long-up: This kernel is not suitable for SMP (multi-processor, + multi-core or hyper-threaded) systems. +part-long-xen: This kernel also runs on a Xen hypervisor. + It supports both privileged (dom0) and unprivileged (domU) operation. + +[image] +initramfs-generators: initramfs-tools initramfs-fallback +type: plain + +[relations] +# compilers +gcc-4.4: gcc-4.4 +gcc-4.5: gcc-4.5 + +# initramfs-generators +initramfs-fallback: linux-initramfs-tool +initramfs-tools: initramfs-tools (>= 0.99) + +# bootloaders +elilo: elilo (>= 3.12-3.1~) +lilo: lilo (>= 22.8-8.2~) +s390-tools: s390-tools (>= 1.8.3-2~) + --- linux-2.6-3.0.0~rc6.orig/debian/config/config +++ linux-2.6-3.0.0~rc6/debian/config/config @@ -0,0 +1,4531 @@ +## +## file: block/Kconfig +## +CONFIG_BLOCK=y +CONFIG_LBDAF=y +CONFIG_BLK_DEV_BSG=y +CONFIG_BLK_DEV_INTEGRITY=y + +## +## file: block/Kconfig.iosched +## +CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y +CONFIG_CFQ_GROUP_IOSCHED=y +## choice: Default I/O scheduler +# CONFIG_DEFAULT_DEADLINE is not set +CONFIG_DEFAULT_CFQ=y +# CONFIG_DEFAULT_NOOP is not set +## end choice + +## +## file: crypto/Kconfig +## +CONFIG_CRYPTO=y +CONFIG_CRYPTO_FIPS=y +CONFIG_CRYPTO_MANAGER=y +# CONFIG_CRYPTO_MANAGER_DISABLE_TESTS is not set +CONFIG_CRYPTO_GF128MUL=m +CONFIG_CRYPTO_NULL=m +CONFIG_CRYPTO_PCRYPT=m +# CONFIG_CRYPTO_CRYPTD is not set +CONFIG_CRYPTO_AUTHENC=m +CONFIG_CRYPTO_TEST=m +CONFIG_CRYPTO_CCM=m +CONFIG_CRYPTO_GCM=m +CONFIG_CRYPTO_SEQIV=m +CONFIG_CRYPTO_CBC=m +CONFIG_CRYPTO_CTR=m +CONFIG_CRYPTO_CTS=m +CONFIG_CRYPTO_ECB=m +CONFIG_CRYPTO_LRW=m +CONFIG_CRYPTO_PCBC=m +CONFIG_CRYPTO_XTS=m +CONFIG_CRYPTO_HMAC=m +CONFIG_CRYPTO_XCBC=m +CONFIG_CRYPTO_VMAC=m +CONFIG_CRYPTO_CRC32C=m +CONFIG_CRYPTO_GHASH=m +CONFIG_CRYPTO_MD4=m +CONFIG_CRYPTO_MD5=y +CONFIG_CRYPTO_MICHAEL_MIC=m +CONFIG_CRYPTO_RMD128=m +CONFIG_CRYPTO_RMD160=m +CONFIG_CRYPTO_RMD256=m +CONFIG_CRYPTO_RMD320=m +CONFIG_CRYPTO_SHA1=m +CONFIG_CRYPTO_SHA256=m +CONFIG_CRYPTO_SHA512=m +CONFIG_CRYPTO_TGR192=m +CONFIG_CRYPTO_WP512=m +CONFIG_CRYPTO_AES=m +CONFIG_CRYPTO_ANUBIS=m +CONFIG_CRYPTO_ARC4=m +CONFIG_CRYPTO_BLOWFISH=m +CONFIG_CRYPTO_CAMELLIA=m +CONFIG_CRYPTO_CAST5=m +CONFIG_CRYPTO_CAST6=m +CONFIG_CRYPTO_DES=m +CONFIG_CRYPTO_FCRYPT=m +CONFIG_CRYPTO_KHAZAD=m +CONFIG_CRYPTO_SALSA20=m +CONFIG_CRYPTO_SEED=m +CONFIG_CRYPTO_SERPENT=m +CONFIG_CRYPTO_TEA=m +CONFIG_CRYPTO_TWOFISH=m +CONFIG_CRYPTO_DEFLATE=m +CONFIG_CRYPTO_ZLIB=m +CONFIG_CRYPTO_LZO=m +CONFIG_CRYPTO_ANSI_CPRNG=m +CONFIG_CRYPTO_USER_API_HASH=m +CONFIG_CRYPTO_USER_API_SKCIPHER=m + +## +## file: drivers/accessibility/Kconfig +## +CONFIG_ACCESSIBILITY=y +CONFIG_A11Y_BRAILLE_CONSOLE=y + +## +## file: drivers/ata/Kconfig +## +CONFIG_ATA=m +CONFIG_ATA_VERBOSE_ERROR=y +CONFIG_ATA_ACPI=y +CONFIG_SATA_PMP=y +CONFIG_SATA_AHCI=m +# CONFIG_SATA_AHCI_PLATFORM is not set +CONFIG_SATA_INIC162X=m +CONFIG_SATA_ACARD_AHCI=m +CONFIG_SATA_SIL24=m +CONFIG_ATA_SFF=y +CONFIG_PDC_ADMA=m +CONFIG_SATA_QSTOR=m +CONFIG_SATA_SX4=m +CONFIG_ATA_BMDMA=y +CONFIG_ATA_PIIX=m +CONFIG_SATA_MV=m +CONFIG_SATA_NV=m +CONFIG_SATA_PROMISE=m +CONFIG_SATA_SIL=m +CONFIG_SATA_SIS=m +CONFIG_SATA_SVW=m +CONFIG_SATA_ULI=m +CONFIG_SATA_VIA=m +CONFIG_SATA_VITESSE=m +# CONFIG_PATA_ALI is not set +# CONFIG_PATA_AMD is not set +CONFIG_PATA_ARASAN_CF=m +CONFIG_PATA_ARTOP=m +# CONFIG_PATA_ATIIXP is not set +CONFIG_PATA_ATP867X=m +CONFIG_PATA_CMD64X=m +# CONFIG_PATA_CS5520 is not set +# CONFIG_PATA_CS5530 is not set +# CONFIG_PATA_CYPRESS is not set +# CONFIG_PATA_EFAR is not set +# CONFIG_PATA_HPT366 is not set +# CONFIG_PATA_HPT37X is not set +# CONFIG_PATA_HPT3X2N is not set +# CONFIG_PATA_HPT3X3 is not set +# CONFIG_PATA_IT8213 is not set +CONFIG_PATA_IT821X=m +CONFIG_PATA_JMICRON=m +CONFIG_PATA_MARVELL=m +# CONFIG_PATA_NETCELL is not set +# CONFIG_PATA_NINJA32 is not set +# CONFIG_PATA_NS87415 is not set +# CONFIG_PATA_OLDPIIX is not set +# CONFIG_PATA_OPTIDMA is not set +# CONFIG_PATA_PDC2027X is not set +# CONFIG_PATA_PDC_OLD is not set +# CONFIG_PATA_RADISYS is not set +CONFIG_PATA_RDC=m +# CONFIG_PATA_SC1200 is not set +CONFIG_PATA_SCH=m +# CONFIG_PATA_SERVERWORKS is not set +# CONFIG_PATA_SIL680 is not set +CONFIG_PATA_SIS=m +CONFIG_PATA_TOSHIBA=m +# CONFIG_PATA_TRIFLEX is not set +# CONFIG_PATA_VIA is not set +# CONFIG_PATA_WINBOND is not set +# CONFIG_PATA_CMD640_PCI is not set +# CONFIG_PATA_ISAPNP is not set +# CONFIG_PATA_MPIIX is not set +# CONFIG_PATA_NS87410 is not set +# CONFIG_PATA_OPTI is not set +# CONFIG_PATA_PCMCIA is not set +# CONFIG_PATA_QDI is not set +# CONFIG_PATA_RZ1000 is not set +# CONFIG_PATA_WINBOND_VLB is not set +# CONFIG_PATA_ACPI is not set +CONFIG_ATA_GENERIC=m +# CONFIG_PATA_LEGACY is not set + +## +## file: drivers/atm/Kconfig +## +CONFIG_ATM_DUMMY=m +CONFIG_ATM_NICSTAR=m +CONFIG_ATM_NICSTAR_USE_SUNI=y +CONFIG_ATM_NICSTAR_USE_IDT77105=y +CONFIG_ATM_IA=m +# CONFIG_ATM_IA_DEBUG is not set +CONFIG_ATM_FORE200E=m +CONFIG_ATM_SOLOS=m + +## +## file: drivers/auxdisplay/Kconfig +## +# CONFIG_AUXDISPLAY is not set + +## +## file: drivers/base/Kconfig +## +CONFIG_UEVENT_HELPER_PATH="" +CONFIG_DEVTMPFS=y +# CONFIG_DEVTMPFS_MOUNT is not set +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_FW_LOADER=y +# CONFIG_FIRMWARE_IN_KERNEL is not set +CONFIG_EXTRA_FIRMWARE="" +# CONFIG_DEBUG_DRIVER is not set +# CONFIG_DEBUG_DEVRES is not set + +## +## file: drivers/bcma/Kconfig +## +# CONFIG_BCMA is not set + +## +## file: drivers/block/Kconfig +## +CONFIG_BLK_DEV=y +CONFIG_BLK_DEV_LOOP=m +# CONFIG_BLK_DEV_CRYPTOLOOP is not set +CONFIG_BLK_DEV_NBD=m +CONFIG_BLK_DEV_OSD=m +CONFIG_BLK_DEV_RAM=m +CONFIG_BLK_DEV_RAM_COUNT=16 +# CONFIG_BLK_DEV_XIP is not set +CONFIG_ATA_OVER_ETH=m +CONFIG_VIRTIO_BLK=m +# CONFIG_BLK_DEV_HD is not set +CONFIG_BLK_DEV_RBD=m + +## +## file: drivers/block/drbd/Kconfig +## +CONFIG_BLK_DEV_DRBD=m +# CONFIG_DRBD_FAULT_INJECTION is not set + +## +## file: drivers/bluetooth/Kconfig +## +CONFIG_BT_HCIBTUSB=m +CONFIG_BT_HCIBTSDIO=m +CONFIG_BT_HCIUART_ATH3K=y +CONFIG_BT_HCIUART_LL=y +CONFIG_BT_MRVL=m +CONFIG_BT_MRVL_SDIO=m +CONFIG_BT_ATH3K=m +CONFIG_BT_WILINK=m + +## +## file: drivers/char/Kconfig +## +# CONFIG_DEVKMEM is not set +CONFIG_VIRTIO_CONSOLE=m +# CONFIG_R3964 is not set +CONFIG_PC8736x_GPIO=m +CONFIG_NSC_GPIO=m +# CONFIG_RAW_DRIVER is not set +CONFIG_HANGCHECK_TIMER=m +CONFIG_TELCLOCK=m +CONFIG_RAMOOPS=m + +## +## file: drivers/char/hw_random/Kconfig +## +# CONFIG_HW_RANDOM is not set +CONFIG_HW_RANDOM_TIMERIOMEM=m +CONFIG_HW_RANDOM_VIRTIO=m + +## +## file: drivers/char/pcmcia/Kconfig +## +CONFIG_SYNCLINK_CS=m +CONFIG_CARDMAN_4000=m +CONFIG_CARDMAN_4040=m +CONFIG_IPWIRELESS=m + +## +## file: drivers/connector/Kconfig +## +CONFIG_CONNECTOR=m + +## +## file: drivers/cpufreq/Kconfig +## +CONFIG_CPU_FREQ=y +CONFIG_CPU_FREQ_STAT=m +# CONFIG_CPU_FREQ_STAT_DETAILS is not set +## choice: Default CPUFreq governor +CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y +# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set +## end choice +CONFIG_CPU_FREQ_GOV_PERFORMANCE=y +CONFIG_CPU_FREQ_GOV_POWERSAVE=m +CONFIG_CPU_FREQ_GOV_USERSPACE=m +CONFIG_CPU_FREQ_GOV_ONDEMAND=m +CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m + +## +## file: drivers/crypto/Kconfig +## +CONFIG_CRYPTO_HW=y +CONFIG_CRYPTO_DEV_HIFN_795X=m +CONFIG_CRYPTO_DEV_HIFN_795X_RNG=y + +## +## file: drivers/dma/Kconfig +## +# CONFIG_DMADEVICES_DEBUG is not set +CONFIG_ASYNC_TX_DMA=y +# CONFIG_DMATEST is not set + +## +## file: drivers/edac/Kconfig +## +CONFIG_EDAC_I82975X=m +CONFIG_EDAC_I3200=m +CONFIG_EDAC_X38=m +CONFIG_EDAC_I5400=m +CONFIG_EDAC_I7CORE=m +CONFIG_EDAC_I5100=m + +## +## file: drivers/firewire/Kconfig +## +CONFIG_FIREWIRE=m +CONFIG_FIREWIRE_OHCI=m +CONFIG_FIREWIRE_SBP2=m +CONFIG_FIREWIRE_NET=m +CONFIG_FIREWIRE_NOSY=m + +## +## file: drivers/gpio/Kconfig +## +# CONFIG_GPIOLIB is not set +# CONFIG_DEBUG_GPIO is not set +# CONFIG_GPIO_SYSFS is not set +# CONFIG_GPIO_BASIC_MMIO is not set +# CONFIG_GPIO_IT8761E is not set +# CONFIG_GPIO_SCH is not set +# CONFIG_GPIO_VX855 is not set +# CONFIG_GPIO_MAX7300 is not set +# CONFIG_GPIO_MAX732X is not set +# CONFIG_GPIO_PCA953X is not set +# CONFIG_GPIO_PCF857X is not set +# CONFIG_GPIO_ADP5588 is not set +# CONFIG_GPIO_CS5535 is not set +# CONFIG_GPIO_LANGWELL is not set +# CONFIG_GPIO_PCH is not set +# CONFIG_GPIO_RDC321X is not set +# CONFIG_GPIO_MAX7301 is not set +# CONFIG_GPIO_MCP23S08 is not set +# CONFIG_GPIO_MC33880 is not set +# CONFIG_GPIO_74X164 is not set + +## +## file: drivers/gpu/drm/Kconfig +## +CONFIG_DRM_VIA=m +CONFIG_DRM_SAVAGE=m + +## +## file: drivers/gpu/drm/nouveau/Kconfig +## +CONFIG_DRM_NOUVEAU=m +CONFIG_DRM_NOUVEAU_BACKLIGHT=y + +## +## file: drivers/gpu/drm/radeon/Kconfig +## +CONFIG_DRM_RADEON_KMS=y + +## +## file: drivers/gpu/drm/vmwgfx/Kconfig +## +CONFIG_DRM_VMWGFX=m + +## +## file: drivers/hid/Kconfig +## +CONFIG_HID_SUPPORT=y +CONFIG_HID=m +CONFIG_HIDRAW=y +CONFIG_HID_ACRUX=m +CONFIG_HID_ACRUX_FF=m +CONFIG_HID_PRODIKEYS=m +CONFIG_HID_DRAGONRISE=m +CONFIG_DRAGONRISE_FF=y +CONFIG_HID_EMS_FF=m +CONFIG_HID_ELECOM=m +CONFIG_HID_KEYTOUCH=m +CONFIG_HID_UCLOGIC=m +CONFIG_HID_WALTOP=m +CONFIG_HID_GYRATION=m +CONFIG_HID_TWINHAN=m +CONFIG_HID_LCPOWER=m +CONFIG_LOGITECH_FF=y +CONFIG_LOGIRUMBLEPAD2_FF=y +CONFIG_LOGIG940_FF=y +CONFIG_LOGIWII_FF=y +CONFIG_HID_MAGICMOUSE=m +CONFIG_HID_MULTITOUCH=m +CONFIG_HID_NTRIG=m +CONFIG_HID_ORTEK=m +CONFIG_HID_PANTHERLORD=m +CONFIG_PANTHERLORD_FF=y +CONFIG_HID_PETALYNX=m +CONFIG_HID_PICOLCD=m +CONFIG_HID_QUANTA=m +CONFIG_HID_ROCCAT=m +CONFIG_HID_ROCCAT_ARVO=m +CONFIG_HID_ROCCAT_KONE=m +CONFIG_HID_ROCCAT_KONEPLUS=m +CONFIG_HID_ROCCAT_KOVAPLUS=m +CONFIG_HID_ROCCAT_PYRA=m +CONFIG_HID_SAMSUNG=m +CONFIG_HID_SONY=m +CONFIG_HID_SUNPLUS=m +CONFIG_HID_GREENASIA=m +CONFIG_GREENASIA_FF=y +CONFIG_HID_SMARTJOYPLUS=m +CONFIG_SMARTJOYPLUS_FF=y +CONFIG_HID_TOPSEED=m +CONFIG_HID_THRUSTMASTER=m +CONFIG_THRUSTMASTER_FF=y +CONFIG_HID_WACOM=m +CONFIG_HID_WACOM_POWER_SUPPLY=y +CONFIG_HID_ZEROPLUS=m +CONFIG_ZEROPLUS_FF=y +CONFIG_HID_ZYDACRON=m + +## +## file: drivers/hid/usbhid/Kconfig +## +CONFIG_HID_PID=y +CONFIG_USB_HIDDEV=y + +## +## file: drivers/hwmon/Kconfig +## +CONFIG_HWMON=y +# CONFIG_HWMON_DEBUG_CHIP is not set +CONFIG_SENSORS_ABITUGURU=m +CONFIG_SENSORS_ABITUGURU3=m +CONFIG_SENSORS_AD7414=m +CONFIG_SENSORS_AD7418=m +CONFIG_SENSORS_ADCXX=m +CONFIG_SENSORS_ADM1029=m +CONFIG_SENSORS_ADM9240=m +CONFIG_SENSORS_ADT7411=m +CONFIG_SENSORS_ADT7462=m +CONFIG_SENSORS_ADT7470=m +CONFIG_SENSORS_ADT7475=m +CONFIG_SENSORS_ASC7621=m +CONFIG_SENSORS_ATXP1=m +CONFIG_SENSORS_DS620=m +CONFIG_SENSORS_I5K_AMB=m +CONFIG_SENSORS_F71882FG=m +CONFIG_SENSORS_F75375S=m +CONFIG_SENSORS_FSCHMD=m +CONFIG_SENSORS_G760A=m +CONFIG_SENSORS_CORETEMP=m +CONFIG_SENSORS_IBMAEM=m +CONFIG_SENSORS_IBMPEX=m +CONFIG_SENSORS_LINEAGE=m +CONFIG_SENSORS_LM70=m +CONFIG_SENSORS_LM73=m +CONFIG_SENSORS_LM93=m +CONFIG_SENSORS_LTC4151=m +CONFIG_SENSORS_LTC4215=m +CONFIG_SENSORS_LTC4245=m +CONFIG_SENSORS_LTC4261=m +CONFIG_SENSORS_LM95241=m +CONFIG_SENSORS_MAX1111=m +CONFIG_SENSORS_MAX6642=m +CONFIG_SENSORS_MAX6650=m +CONFIG_SENSORS_MAX16065=m +CONFIG_SENSORS_MAX6639=m +CONFIG_SENSORS_PC87427=m +CONFIG_SMBUS=m +CONFIG_SENSORS_PMBUS=m +CONFIG_SENSORS_SHT15=m +CONFIG_SENSORS_SHT21=m +CONFIG_SENSORS_DME1737=m +CONFIG_SENSORS_EMC1403=m +CONFIG_SENSORS_EMC6W201=m +CONFIG_SENSORS_SMSC47M192=m +CONFIG_SENSORS_SCH5627=m +CONFIG_SENSORS_ADS1015=m +CONFIG_SENSORS_ADS7828=m +CONFIG_SENSORS_ADS7871=m +CONFIG_SENSORS_AMC6821=m +CONFIG_SENSORS_THMC50=m +CONFIG_SENSORS_TMP102=m +CONFIG_SENSORS_TMP401=m +CONFIG_SENSORS_TMP421=m +CONFIG_SENSORS_VIA_CPUTEMP=m +CONFIG_SENSORS_VT1211=m +CONFIG_SENSORS_VT8231=m +CONFIG_SENSORS_W83791D=m +CONFIG_SENSORS_W83792D=m +CONFIG_SENSORS_W83793=m +CONFIG_SENSORS_W83795=m +# CONFIG_SENSORS_W83795_FANCTRL is not set +CONFIG_SENSORS_W83L786NG=m +CONFIG_SENSORS_W83627EHF=m +CONFIG_SENSORS_WM831X=m +CONFIG_SENSORS_WM8350=m +CONFIG_SENSORS_APPLESMC=m +CONFIG_SENSORS_MC13783_ADC=m +CONFIG_SENSORS_ATK0110=m + +## +## file: drivers/i2c/Kconfig +## +CONFIG_I2C_COMPAT=y +# CONFIG_I2C_MUX is not set +CONFIG_I2C_HELPER_AUTO=y + +## +## file: drivers/i2c/busses/Kconfig +## +CONFIG_I2C_ISCH=m +CONFIG_I2C_NFORCE2_S4985=m +# CONFIG_I2C_GPIO is not set +# CONFIG_I2C_INTEL_MID is not set +CONFIG_I2C_OCORES=m +CONFIG_I2C_PCA_PLATFORM=m +CONFIG_I2C_SIMTEC=m +# CONFIG_I2C_XILINX is not set +CONFIG_I2C_DIOLAN_U2C=m +CONFIG_I2C_TAOS_EVM=m +CONFIG_I2C_TINY_USB=m + +## +## file: drivers/ide/Kconfig +## +CONFIG_IDE_GD=m +CONFIG_IDE_GD_ATA=y +CONFIG_IDE_GD_ATAPI=y +CONFIG_BLK_DEV_DELKIN=m +# CONFIG_IDE_TASK_IOCTL is not set +CONFIG_IDE_PROC_FS=y +# CONFIG_BLK_DEV_PLATFORM is not set +# CONFIG_BLK_DEV_JMICRON is not set +CONFIG_BLK_DEV_IT8172=m +CONFIG_BLK_DEV_IT8213=m +# CONFIG_BLK_DEV_IT821X is not set +CONFIG_BLK_DEV_TC86C001=m + +## +## file: drivers/idle/Kconfig +## +CONFIG_I7300_IDLE=m + +## +## file: drivers/ieee802154/Kconfig +## +CONFIG_IEEE802154_DRIVERS=m +CONFIG_IEEE802154_FAKEHARD=m + +## +## file: drivers/infiniband/Kconfig +## +CONFIG_INFINIBAND=m +CONFIG_INFINIBAND_USER_MAD=m +CONFIG_INFINIBAND_USER_ACCESS=m + +## +## file: drivers/infiniband/hw/amso1100/Kconfig +## +CONFIG_INFINIBAND_AMSO1100=m +# CONFIG_INFINIBAND_AMSO1100_DEBUG is not set + +## +## file: drivers/infiniband/hw/cxgb3/Kconfig +## +CONFIG_INFINIBAND_CXGB3=m +# CONFIG_INFINIBAND_CXGB3_DEBUG is not set + +## +## file: drivers/infiniband/hw/cxgb4/Kconfig +## +CONFIG_INFINIBAND_CXGB4=m + +## +## file: drivers/infiniband/hw/ipath/Kconfig +## +CONFIG_INFINIBAND_IPATH=m + +## +## file: drivers/infiniband/hw/mlx4/Kconfig +## +CONFIG_MLX4_INFINIBAND=m + +## +## file: drivers/infiniband/hw/mthca/Kconfig +## +CONFIG_INFINIBAND_MTHCA=m +CONFIG_INFINIBAND_MTHCA_DEBUG=y + +## +## file: drivers/infiniband/hw/nes/Kconfig +## +CONFIG_INFINIBAND_NES=m +# CONFIG_INFINIBAND_NES_DEBUG is not set + +## +## file: drivers/infiniband/hw/qib/Kconfig +## +CONFIG_INFINIBAND_QIB=m + +## +## file: drivers/infiniband/ulp/ipoib/Kconfig +## +CONFIG_INFINIBAND_IPOIB=m +CONFIG_INFINIBAND_IPOIB_CM=y +CONFIG_INFINIBAND_IPOIB_DEBUG=y +# CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set + +## +## file: drivers/infiniband/ulp/iser/Kconfig +## +CONFIG_INFINIBAND_ISER=m + +## +## file: drivers/infiniband/ulp/srp/Kconfig +## +CONFIG_INFINIBAND_SRP=m + +## +## file: drivers/input/Kconfig +## +CONFIG_INPUT=y +CONFIG_INPUT_FF_MEMLESS=m +# CONFIG_INPUT_POLLDEV is not set +CONFIG_INPUT_SPARSEKMAP=m +CONFIG_INPUT_MOUSEDEV=y +CONFIG_INPUT_MOUSEDEV_PSAUX=y +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 +CONFIG_INPUT_JOYDEV=m +CONFIG_INPUT_EVDEV=m +# CONFIG_INPUT_EVBUG is not set + +## +## file: drivers/input/joystick/Kconfig +## +CONFIG_JOYSTICK_ANALOG=m +CONFIG_JOYSTICK_A3D=m +CONFIG_JOYSTICK_ADI=m +CONFIG_JOYSTICK_COBRA=m +CONFIG_JOYSTICK_GF2K=m +CONFIG_JOYSTICK_GRIP=m +CONFIG_JOYSTICK_GRIP_MP=m +CONFIG_JOYSTICK_GUILLEMOT=m +CONFIG_JOYSTICK_INTERACT=m +CONFIG_JOYSTICK_SIDEWINDER=m +CONFIG_JOYSTICK_TMDC=m +CONFIG_JOYSTICK_WARRIOR=m +CONFIG_JOYSTICK_MAGELLAN=m +CONFIG_JOYSTICK_SPACEORB=m +CONFIG_JOYSTICK_SPACEBALL=m +CONFIG_JOYSTICK_STINGER=m +CONFIG_JOYSTICK_TWIDJOY=m +CONFIG_JOYSTICK_ZHENHUA=m +CONFIG_JOYSTICK_DB9=m +CONFIG_JOYSTICK_GAMECON=m +CONFIG_JOYSTICK_TURBOGRAFX=m +CONFIG_JOYSTICK_JOYDUMP=m +CONFIG_JOYSTICK_XPAD=m +CONFIG_JOYSTICK_XPAD_FF=y +CONFIG_JOYSTICK_XPAD_LEDS=y +CONFIG_JOYSTICK_WALKERA0701=m + +## +## file: drivers/input/joystick/iforce/Kconfig +## +CONFIG_JOYSTICK_IFORCE=m +CONFIG_JOYSTICK_IFORCE_USB=y +CONFIG_JOYSTICK_IFORCE_232=y + +## +## file: drivers/input/keyboard/Kconfig +## +CONFIG_KEYBOARD_ADP5588=m +CONFIG_KEYBOARD_QT2160=m +# CONFIG_KEYBOARD_GPIO is not set +# CONFIG_KEYBOARD_GPIO_POLLED is not set +# CONFIG_KEYBOARD_TCA6416 is not set +# CONFIG_KEYBOARD_MATRIX is not set +CONFIG_KEYBOARD_LM8323=m +CONFIG_KEYBOARD_MAX7359=m +# CONFIG_KEYBOARD_MCS is not set +# CONFIG_KEYBOARD_MPR121 is not set +CONFIG_KEYBOARD_OPENCORES=m +CONFIG_KEYBOARD_STOWAWAY=m + +## +## file: drivers/input/misc/Kconfig +## +CONFIG_INPUT_ATI_REMOTE=m +CONFIG_INPUT_ATI_REMOTE2=m +CONFIG_INPUT_KEYSPAN_REMOTE=m +CONFIG_INPUT_POWERMATE=m +CONFIG_INPUT_YEALINK=m +CONFIG_INPUT_CM109=m +CONFIG_INPUT_PCF50633_PMU=m +# CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set +CONFIG_INPUT_WM831X_ON=m + +## +## file: drivers/input/mouse/Kconfig +## +CONFIG_MOUSE_PS2_ALPS=y +CONFIG_MOUSE_PS2_ELANTECH=y +CONFIG_MOUSE_PS2_SENTELIC=y +# CONFIG_MOUSE_PS2_TOUCHKIT is not set +# CONFIG_MOUSE_GPIO is not set +CONFIG_MOUSE_SYNAPTICS_I2C=m + +## +## file: drivers/input/serio/Kconfig +## +CONFIG_SERIO_ALTERA_PS2=m + +## +## file: drivers/input/tablet/Kconfig +## +CONFIG_INPUT_TABLET=y +CONFIG_TABLET_USB_ACECAD=m +CONFIG_TABLET_USB_AIPTEK=m +CONFIG_TABLET_USB_GTCO=m +CONFIG_TABLET_USB_HANWANG=m +CONFIG_TABLET_USB_KBTAB=m +CONFIG_TABLET_USB_WACOM=m + +## +## file: drivers/input/touchscreen/Kconfig +## +CONFIG_TOUCHSCREEN_ADS7846=m +CONFIG_TOUCHSCREEN_AD7877=m +CONFIG_TOUCHSCREEN_AD7879=m +CONFIG_TOUCHSCREEN_AD7879_I2C=m +CONFIG_TOUCHSCREEN_DYNAPRO=m +CONFIG_TOUCHSCREEN_HAMPSHIRE=m +CONFIG_TOUCHSCREEN_EETI=m +CONFIG_TOUCHSCREEN_FUJITSU=m +CONFIG_TOUCHSCREEN_GUNZE=m +CONFIG_TOUCHSCREEN_ELO=m +CONFIG_TOUCHSCREEN_WACOM_W8001=m +CONFIG_TOUCHSCREEN_MCS5000=m +CONFIG_TOUCHSCREEN_MTOUCH=m +CONFIG_TOUCHSCREEN_INEXIO=m +CONFIG_TOUCHSCREEN_MK712=m +CONFIG_TOUCHSCREEN_HTCPEN=m +CONFIG_TOUCHSCREEN_PENMOUNT=m +CONFIG_TOUCHSCREEN_TOUCHRIGHT=m +CONFIG_TOUCHSCREEN_TOUCHWIN=m +CONFIG_TOUCHSCREEN_UCB1400=m +CONFIG_TOUCHSCREEN_WM97XX=m +CONFIG_TOUCHSCREEN_WM9705=y +CONFIG_TOUCHSCREEN_WM9712=y +CONFIG_TOUCHSCREEN_WM9713=y +CONFIG_TOUCHSCREEN_USB_COMPOSITE=m +CONFIG_TOUCHSCREEN_MC13783=m +CONFIG_TOUCHSCREEN_USB_EGALAX=y +CONFIG_TOUCHSCREEN_USB_PANJIT=y +CONFIG_TOUCHSCREEN_USB_3M=y +CONFIG_TOUCHSCREEN_USB_ITM=y +CONFIG_TOUCHSCREEN_USB_ETURBO=y +CONFIG_TOUCHSCREEN_USB_GUNZE=y +CONFIG_TOUCHSCREEN_USB_DMC_TSC10=y +CONFIG_TOUCHSCREEN_USB_IRTOUCH=y +CONFIG_TOUCHSCREEN_USB_E2I=y +CONFIG_TOUCHSCREEN_TOUCHIT213=m +CONFIG_TOUCHSCREEN_TSC2007=m +CONFIG_TOUCHSCREEN_W90X900=m +CONFIG_TOUCHSCREEN_TPS6507X=m + +## +## file: drivers/isdn/Kconfig +## +# CONFIG_ISDN is not set +# CONFIG_ISDN_I4L is not set + +## +## file: drivers/isdn/capi/Kconfig +## +CONFIG_CAPI_TRACE=y + +## +## file: drivers/isdn/gigaset/Kconfig +## +CONFIG_ISDN_DRV_GIGASET=m +CONFIG_GIGASET_CAPI=y +CONFIG_GIGASET_BASE=m +CONFIG_GIGASET_M105=m +CONFIG_GIGASET_M101=m +# CONFIG_GIGASET_DEBUG is not set + +## +## file: drivers/isdn/hardware/mISDN/Kconfig +## +CONFIG_MISDN_HFCPCI=m +CONFIG_MISDN_HFCMULTI=m +CONFIG_MISDN_HFCUSB=m +CONFIG_MISDN_AVMFRITZ=m +CONFIG_MISDN_SPEEDFAX=m +CONFIG_MISDN_INFINEON=m +CONFIG_MISDN_W6692=m +#. Binds a generic PCI bridge +# CONFIG_MISDN_NETJET is not set + +## +## file: drivers/isdn/hysdn/Kconfig +## +CONFIG_HYSDN=m +CONFIG_HYSDN_CAPI=y + +## +## file: drivers/isdn/mISDN/Kconfig +## +CONFIG_MISDN=m +CONFIG_MISDN_DSP=m +CONFIG_MISDN_L1OIP=m + +## +## file: drivers/leds/Kconfig +## +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y +CONFIG_LEDS_NET48XX=m +CONFIG_LEDS_ALIX2=m +CONFIG_LEDS_PCA9532=m +# CONFIG_LEDS_GPIO is not set +CONFIG_LEDS_LP3944=m +CONFIG_LEDS_PCA955X=m +CONFIG_LEDS_WM831X_STATUS=m +CONFIG_LEDS_WM8350=m +CONFIG_LEDS_DAC124S085=m +CONFIG_LEDS_REGULATOR=m +CONFIG_LEDS_BD2802=m +CONFIG_LEDS_INTEL_SS4200=m +CONFIG_LEDS_LT3593=m +CONFIG_LEDS_DELL_NETBOOKS=m +CONFIG_LEDS_MC13783=m +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_TRIGGER_TIMER=m +CONFIG_LEDS_TRIGGER_IDE_DISK=y +CONFIG_LEDS_TRIGGER_HEARTBEAT=m +CONFIG_LEDS_TRIGGER_BACKLIGHT=m +CONFIG_LEDS_TRIGGER_DEFAULT_ON=m + +## +## file: drivers/md/Kconfig +## +CONFIG_MD=y +CONFIG_BLK_DEV_MD=m +CONFIG_MD_LINEAR=m +CONFIG_MD_RAID0=m +CONFIG_MD_RAID1=m +CONFIG_MD_RAID10=m +CONFIG_MD_RAID456=m +#. Experimental +# CONFIG_MULTICORE_RAID456 is not set +CONFIG_MD_MULTIPATH=m +CONFIG_MD_FAULTY=m +CONFIG_BLK_DEV_DM=m +# CONFIG_DM_DEBUG is not set +CONFIG_DM_CRYPT=m +CONFIG_DM_SNAPSHOT=m +CONFIG_DM_MIRROR=m +CONFIG_DM_RAID=m +CONFIG_DM_LOG_USERSPACE=m +CONFIG_DM_ZERO=m +CONFIG_DM_MULTIPATH=m +CONFIG_DM_MULTIPATH_QL=m +CONFIG_DM_MULTIPATH_ST=m +CONFIG_DM_DELAY=m +CONFIG_DM_UEVENT=y +CONFIG_DM_FLAKEY=m + +## +## file: drivers/media/Kconfig +## +CONFIG_MEDIA_SUPPORT=m +CONFIG_MEDIA_CONTROLLER=y +CONFIG_VIDEO_DEV=m + +## +## file: drivers/media/common/tuners/Kconfig +## +CONFIG_MEDIA_ATTACH=y +# CONFIG_MEDIA_TUNER_CUSTOMISE is not set +CONFIG_MEDIA_TUNER_TDA827X=m +CONFIG_MEDIA_TUNER_TEA5761=y +CONFIG_MEDIA_TUNER_MT2060=m +CONFIG_MEDIA_TUNER_MT2131=m +CONFIG_MEDIA_TUNER_QT1010=m + +## +## file: drivers/media/dvb/Kconfig +## +CONFIG_DVB_MAX_ADAPTERS=8 +CONFIG_DVB_DYNAMIC_MINORS=y +CONFIG_DVB_CAPTURE_DRIVERS=y + +## +## file: drivers/media/dvb/b2c2/Kconfig +## +CONFIG_DVB_B2C2_FLEXCOP=m +CONFIG_DVB_B2C2_FLEXCOP_PCI=m +CONFIG_DVB_B2C2_FLEXCOP_USB=m +# CONFIG_DVB_B2C2_FLEXCOP_DEBUG is not set + +## +## file: drivers/media/dvb/bt8xx/Kconfig +## +CONFIG_DVB_BT8XX=m + +## +## file: drivers/media/dvb/dm1105/Kconfig +## +CONFIG_DVB_DM1105=m + +## +## file: drivers/media/dvb/dvb-usb/Kconfig +## +CONFIG_DVB_USB=m +# CONFIG_DVB_USB_DEBUG is not set +CONFIG_DVB_USB_A800=m +CONFIG_DVB_USB_DIBUSB_MB=m +CONFIG_DVB_USB_DIBUSB_MB_FAULTY=y +CONFIG_DVB_USB_DIBUSB_MC=m +CONFIG_DVB_USB_DIB0700=m +CONFIG_DVB_USB_UMT_010=m +CONFIG_DVB_USB_CXUSB=m +CONFIG_DVB_USB_M920X=m +CONFIG_DVB_USB_GL861=m +CONFIG_DVB_USB_AU6610=m +CONFIG_DVB_USB_DIGITV=m +CONFIG_DVB_USB_VP7045=m +CONFIG_DVB_USB_VP702X=m +CONFIG_DVB_USB_GP8PSK=m +CONFIG_DVB_USB_NOVA_T_USB2=m +CONFIG_DVB_USB_TTUSB2=m +CONFIG_DVB_USB_DTT200U=m +CONFIG_DVB_USB_OPERA1=m +CONFIG_DVB_USB_AF9005=m +CONFIG_DVB_USB_AF9005_REMOTE=m +CONFIG_DVB_USB_DW2102=m +CONFIG_DVB_USB_CINERGY_T2=m +CONFIG_DVB_USB_ANYSEE=m +CONFIG_DVB_USB_DTV5100=m +CONFIG_DVB_USB_AF9015=m +CONFIG_DVB_USB_CE6230=m +CONFIG_DVB_USB_FRIIO=m +CONFIG_DVB_USB_EC168=m +CONFIG_DVB_USB_AZ6027=m +CONFIG_DVB_USB_LME2510=m +CONFIG_DVB_USB_TECHNISAT_USB2=m + +## +## file: drivers/media/dvb/firewire/Kconfig +## +CONFIG_DVB_FIREDTV=m + +## +## file: drivers/media/dvb/frontends/Kconfig +## +# CONFIG_DVB_FE_CUSTOMISE is not set +CONFIG_DVB_CX24110=m +CONFIG_DVB_CX24123=m +CONFIG_DVB_MT312=m +CONFIG_DVB_S5H1420=m +CONFIG_DVB_STV0299=m +CONFIG_DVB_TDA8083=m +CONFIG_DVB_TDA10086=m +CONFIG_DVB_VES1X93=m +CONFIG_DVB_TUNER_ITD1000=m +CONFIG_DVB_TDA826X=m +CONFIG_DVB_TUA6100=m +CONFIG_DVB_SP8870=m +CONFIG_DVB_SP887X=m +CONFIG_DVB_CX22700=m +CONFIG_DVB_CX22702=m +CONFIG_DVB_L64781=m +CONFIG_DVB_TDA1004X=m +CONFIG_DVB_NXT6000=m +CONFIG_DVB_MT352=m +CONFIG_DVB_ZL10353=m +CONFIG_DVB_DIB3000MB=m +CONFIG_DVB_DIB3000MC=m +CONFIG_DVB_DIB7000M=m +CONFIG_DVB_DIB7000P=m +CONFIG_DVB_VES1820=m +CONFIG_DVB_TDA10021=m +CONFIG_DVB_TDA10023=m +CONFIG_DVB_STV0297=m +CONFIG_DVB_NXT200X=m +CONFIG_DVB_OR51211=m +CONFIG_DVB_OR51132=m +CONFIG_DVB_BCM3510=m +CONFIG_DVB_LGDT330X=m +CONFIG_DVB_S5H1409=m +CONFIG_DVB_AU8522=m +CONFIG_DVB_S921=m +CONFIG_DVB_PLL=m +CONFIG_DVB_LNBP21=m +CONFIG_DVB_ISL6405=m +CONFIG_DVB_ISL6421=m +CONFIG_DVB_LGS8GXX=m +CONFIG_DVB_DUMMY_FE=m + +## +## file: drivers/media/dvb/mantis/Kconfig +## +CONFIG_MANTIS_CORE=m +CONFIG_DVB_MANTIS=m +CONFIG_DVB_HOPPER=m + +## +## file: drivers/media/dvb/ngene/Kconfig +## +CONFIG_DVB_NGENE=m + +## +## file: drivers/media/dvb/pluto2/Kconfig +## +CONFIG_DVB_PLUTO2=m + +## +## file: drivers/media/dvb/pt1/Kconfig +## +CONFIG_DVB_PT1=m + +## +## file: drivers/media/dvb/siano/Kconfig +## +CONFIG_SMS_SIANO_MDTV=m +CONFIG_SMS_USB_DRV=m +CONFIG_SMS_SDIO_DRV=m + +## +## file: drivers/media/dvb/ttpci/Kconfig +## +CONFIG_DVB_AV7110=m +CONFIG_DVB_AV7110_OSD=y +CONFIG_DVB_BUDGET_CORE=m +CONFIG_DVB_BUDGET=m +CONFIG_DVB_BUDGET_CI=m +CONFIG_DVB_BUDGET_AV=m +CONFIG_DVB_BUDGET_PATCH=m + +## +## file: drivers/media/dvb/ttusb-budget/Kconfig +## +CONFIG_DVB_TTUSB_BUDGET=m + +## +## file: drivers/media/dvb/ttusb-dec/Kconfig +## +CONFIG_DVB_TTUSB_DEC=m + +## +## file: drivers/media/radio/Kconfig +## +CONFIG_RADIO_ADAPTERS=y +CONFIG_I2C_SI4713=m +CONFIG_RADIO_SI4713=m +CONFIG_RADIO_SI470X=y +CONFIG_USB_MR800=m +CONFIG_RADIO_TEA5764=m +CONFIG_RADIO_SAA7706H=m +CONFIG_RADIO_TEF6862=m +CONFIG_RADIO_WL1273=m + +## +## file: drivers/media/radio/si470x/Kconfig +## +CONFIG_USB_SI470X=m +CONFIG_I2C_SI470X=y + +## +## file: drivers/media/radio/wl128x/Kconfig +## +CONFIG_RADIO_WL128X=m + +## +## file: drivers/media/rc/Kconfig +## +CONFIG_RC_CORE=m +CONFIG_IR_NEC_DECODER=m +CONFIG_IR_RC5_DECODER=m +CONFIG_IR_RC6_DECODER=m +CONFIG_IR_JVC_DECODER=m +CONFIG_IR_SONY_DECODER=m +CONFIG_IR_RC5_SZ_DECODER=m +CONFIG_IR_LIRC_CODEC=m +CONFIG_IR_ENE=m +CONFIG_IR_IMON=m +CONFIG_IR_MCEUSB=m +# CONFIG_IR_NUVOTON is not set +CONFIG_IR_REDRAT3=m +CONFIG_IR_STREAMZAP=m +CONFIG_RC_LOOPBACK=m + +## +## file: drivers/media/rc/keymaps/Kconfig +## +CONFIG_RC_MAP=m + +## +## file: drivers/media/video/Kconfig +## +CONFIG_VIDEO_CAPTURE_DRIVERS=y +# CONFIG_VIDEO_ADV_DEBUG is not set +# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set +CONFIG_VIDEO_HELPER_CHIPS_AUTO=y +CONFIG_VIDEO_TVAUDIO=m +CONFIG_VIDEO_TDA7432=m +CONFIG_VIDEO_TDA9840=m +CONFIG_VIDEO_TEA6415C=m +CONFIG_VIDEO_TEA6420=m +CONFIG_VIDEO_MSP3400=m +CONFIG_VIDEO_CS53L32A=m +CONFIG_VIDEO_TLV320AIC23B=m +CONFIG_VIDEO_WM8775=m +CONFIG_VIDEO_WM8739=m +CONFIG_VIDEO_SAA6588=m +CONFIG_VIDEO_BT819=m +CONFIG_VIDEO_BT856=m +CONFIG_VIDEO_KS0127=m +CONFIG_VIDEO_SAA7110=m +CONFIG_VIDEO_SAA711X=m +CONFIG_VIDEO_TVP5150=m +CONFIG_VIDEO_VPX3220=m +CONFIG_VIDEO_CX2341X=m +CONFIG_VIDEO_SAA7127=m +CONFIG_VIDEO_SAA7185=m +CONFIG_VIDEO_ADV7170=m +CONFIG_VIDEO_ADV7175=m +CONFIG_VIDEO_OV7670=m +CONFIG_VIDEO_UPD64031A=m +CONFIG_VIDEO_UPD64083=m +CONFIG_VIDEO_VIVI=m +CONFIG_VIDEO_PMS=m +CONFIG_VIDEO_BWQCAM=m +CONFIG_VIDEO_CQCAM=m +CONFIG_VIDEO_W9966=m +CONFIG_VIDEO_MEYE=m +CONFIG_VIDEO_MXB=m +CONFIG_VIDEO_HEXIUM_ORION=m +CONFIG_VIDEO_HEXIUM_GEMINI=m +CONFIG_VIDEO_CAFE_CCIC=m +CONFIG_SOC_CAMERA=m +CONFIG_SOC_CAMERA_MT9M001=m +CONFIG_SOC_CAMERA_MT9M111=m +CONFIG_SOC_CAMERA_MT9T031=m +CONFIG_SOC_CAMERA_MT9T112=m +CONFIG_SOC_CAMERA_MT9V022=m +CONFIG_SOC_CAMERA_RJ54N1=m +CONFIG_SOC_CAMERA_TW9910=m +CONFIG_SOC_CAMERA_PLATFORM=m +CONFIG_SOC_CAMERA_OV772X=m +CONFIG_SOC_CAMERA_OV9640=m +CONFIG_VIDEO_SH_MOBILE_CEU=m +CONFIG_V4L_USB_DRIVERS=y +CONFIG_USB_ZR364XX=m +CONFIG_USB_STKWEBCAM=m +CONFIG_USB_S2255=m +CONFIG_V4L_MEM2MEM_DRIVERS=y +# CONFIG_VIDEO_MEM2MEM_TESTDEV is not set + +## +## file: drivers/media/video/au0828/Kconfig +## +CONFIG_VIDEO_AU0828=m + +## +## file: drivers/media/video/bt8xx/Kconfig +## +CONFIG_VIDEO_BT848=m +CONFIG_VIDEO_BT848_DVB=y + +## +## file: drivers/media/video/cpia2/Kconfig +## +CONFIG_VIDEO_CPIA2=m + +## +## file: drivers/media/video/cx18/Kconfig +## +CONFIG_VIDEO_CX18=m +CONFIG_VIDEO_CX18_ALSA=m + +## +## file: drivers/media/video/cx231xx/Kconfig +## +CONFIG_VIDEO_CX231XX=m +CONFIG_VIDEO_CX231XX_RC=y +CONFIG_VIDEO_CX231XX_ALSA=m +CONFIG_VIDEO_CX231XX_DVB=m + +## +## file: drivers/media/video/cx23885/Kconfig +## +CONFIG_VIDEO_CX23885=m + +## +## file: drivers/media/video/cx25840/Kconfig +## +CONFIG_VIDEO_CX25840=m + +## +## file: drivers/media/video/cx88/Kconfig +## +CONFIG_VIDEO_CX88=m +CONFIG_VIDEO_CX88_ALSA=m +CONFIG_VIDEO_CX88_BLACKBIRD=m +CONFIG_VIDEO_CX88_DVB=m +CONFIG_VIDEO_CX88_VP3054=m + +## +## file: drivers/media/video/em28xx/Kconfig +## +CONFIG_VIDEO_EM28XX=m +CONFIG_VIDEO_EM28XX_ALSA=m +CONFIG_VIDEO_EM28XX_DVB=m + +## +## file: drivers/media/video/et61x251/Kconfig +## +CONFIG_USB_ET61X251=m + +## +## file: drivers/media/video/gspca/Kconfig +## +CONFIG_USB_GSPCA=m +CONFIG_USB_GSPCA_BENQ=m +CONFIG_USB_GSPCA_CONEX=m +CONFIG_USB_GSPCA_CPIA1=m +CONFIG_USB_GSPCA_ETOMS=m +CONFIG_USB_GSPCA_FINEPIX=m +CONFIG_USB_GSPCA_JEILINJ=m +CONFIG_USB_GSPCA_KINECT=m +CONFIG_USB_GSPCA_KONICA=m +CONFIG_USB_GSPCA_MARS=m +CONFIG_USB_GSPCA_MR97310A=m +CONFIG_USB_GSPCA_NW80X=m +CONFIG_USB_GSPCA_OV519=m +CONFIG_USB_GSPCA_OV534=m +CONFIG_USB_GSPCA_OV534_9=m +CONFIG_USB_GSPCA_PAC207=m +CONFIG_USB_GSPCA_PAC7302=m +CONFIG_USB_GSPCA_PAC7311=m +CONFIG_USB_GSPCA_SN9C2028=m +CONFIG_USB_GSPCA_SN9C20X=m +CONFIG_USB_GSPCA_SONIXB=m +CONFIG_USB_GSPCA_SONIXJ=m +CONFIG_USB_GSPCA_SPCA500=m +CONFIG_USB_GSPCA_SPCA501=m +CONFIG_USB_GSPCA_SPCA505=m +CONFIG_USB_GSPCA_SPCA506=m +CONFIG_USB_GSPCA_SPCA508=m +CONFIG_USB_GSPCA_SPCA561=m +CONFIG_USB_GSPCA_SPCA1528=m +CONFIG_USB_GSPCA_SQ905=m +CONFIG_USB_GSPCA_SQ905C=m +CONFIG_USB_GSPCA_SQ930X=m +CONFIG_USB_GSPCA_STK014=m +CONFIG_USB_GSPCA_STV0680=m +CONFIG_USB_GSPCA_SUNPLUS=m +CONFIG_USB_GSPCA_T613=m +CONFIG_USB_GSPCA_TV8532=m +CONFIG_USB_GSPCA_VC032X=m +CONFIG_USB_GSPCA_VICAM=m +CONFIG_USB_GSPCA_XIRLINK_CIT=m +CONFIG_USB_GSPCA_ZC3XX=m + +## +## file: drivers/media/video/gspca/gl860/Kconfig +## +CONFIG_USB_GL860=m + +## +## file: drivers/media/video/gspca/m5602/Kconfig +## +CONFIG_USB_M5602=m + +## +## file: drivers/media/video/gspca/stv06xx/Kconfig +## +CONFIG_USB_STV06XX=m + +## +## file: drivers/media/video/hdpvr/Kconfig +## +CONFIG_VIDEO_HDPVR=m + +## +## file: drivers/media/video/ivtv/Kconfig +## +CONFIG_VIDEO_IVTV=m +CONFIG_VIDEO_FB_IVTV=m + +## +## file: drivers/media/video/pvrusb2/Kconfig +## +CONFIG_VIDEO_PVRUSB2=m +CONFIG_VIDEO_PVRUSB2_SYSFS=y +CONFIG_VIDEO_PVRUSB2_DVB=y +# CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set + +## +## file: drivers/media/video/pwc/Kconfig +## +CONFIG_USB_PWC=m +# CONFIG_USB_PWC_DEBUG is not set +CONFIG_USB_PWC_INPUT_EVDEV=y + +## +## file: drivers/media/video/saa7134/Kconfig +## +CONFIG_VIDEO_SAA7134=m +CONFIG_VIDEO_SAA7134_ALSA=m +CONFIG_VIDEO_SAA7134_RC=y +CONFIG_VIDEO_SAA7134_DVB=m + +## +## file: drivers/media/video/saa7164/Kconfig +## +CONFIG_VIDEO_SAA7164=m + +## +## file: drivers/media/video/sn9c102/Kconfig +## +CONFIG_USB_SN9C102=m + +## +## file: drivers/media/video/tlg2300/Kconfig +## +CONFIG_VIDEO_TLG2300=m + +## +## file: drivers/media/video/usbvision/Kconfig +## +CONFIG_VIDEO_USBVISION=m + +## +## file: drivers/media/video/uvc/Kconfig +## +CONFIG_USB_VIDEO_CLASS=m +CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y + +## +## file: drivers/media/video/zoran/Kconfig +## +CONFIG_VIDEO_ZORAN=m +CONFIG_VIDEO_ZORAN_DC30=m +CONFIG_VIDEO_ZORAN_ZR36060=m +CONFIG_VIDEO_ZORAN_BUZ=m +CONFIG_VIDEO_ZORAN_DC10=m +CONFIG_VIDEO_ZORAN_LML33=m +CONFIG_VIDEO_ZORAN_LML33R10=m +CONFIG_VIDEO_ZORAN_AVS6EYES=m + +## +## file: drivers/memstick/Kconfig +## +CONFIG_MEMSTICK=m +# CONFIG_MEMSTICK_DEBUG is not set + +## +## file: drivers/memstick/core/Kconfig +## +# CONFIG_MEMSTICK_UNSAFE_RESUME is not set +CONFIG_MSPRO_BLOCK=m + +## +## file: drivers/memstick/host/Kconfig +## +CONFIG_MEMSTICK_TIFM_MS=m +CONFIG_MEMSTICK_JMICRON_38X=m +CONFIG_MEMSTICK_R592=m + +## +## file: drivers/message/fusion/Kconfig +## +CONFIG_FUSION=y +CONFIG_FUSION_SPI=m +CONFIG_FUSION_FC=m +CONFIG_FUSION_SAS=m +CONFIG_FUSION_MAX_SGE=128 +CONFIG_FUSION_CTL=m +CONFIG_FUSION_LAN=m +# CONFIG_FUSION_LOGGING is not set + +## +## file: drivers/message/i2o/Kconfig +## +CONFIG_I2O_LCT_NOTIFY_ON_CHANGES=y +CONFIG_I2O_EXT_ADAPTEC=y +CONFIG_I2O_EXT_ADAPTEC_DMA64=y +CONFIG_I2O_CONFIG_OLD_IOCTL=y +CONFIG_I2O_BUS=m + +## +## file: drivers/mfd/Kconfig +## +CONFIG_MFD_SUPPORT=y +CONFIG_MFD_SM501=m +CONFIG_HTC_PASIC3=m +CONFIG_TPS65010=m +CONFIG_MFD_WM8400=m +# CONFIG_MFD_WM8350_I2C is not set +# CONFIG_MFD_WM8994 is not set +CONFIG_MFD_PCF50633=m +CONFIG_PCF50633_ADC=m +CONFIG_PCF50633_GPIO=m +# CONFIG_AB3100_CORE is not set +CONFIG_AB3100_OTP=m +# CONFIG_EZX_PCAP is not set +CONFIG_LPC_SCH=m + +## +## file: drivers/misc/Kconfig +## +CONFIG_MISC_DEVICES=y +CONFIG_AD525X_DPOT=m +CONFIG_AD525X_DPOT_I2C=m +CONFIG_AD525X_DPOT_SPI=m +# CONFIG_INTEL_MID_PTI is not set +CONFIG_SGI_IOC4=m +CONFIG_TIFM_CORE=m +CONFIG_TIFM_7XX1=m +CONFIG_ICS932S401=m +CONFIG_ENCLOSURE_SERVICES=m +CONFIG_SGI_XP=m +CONFIG_CS5535_CLOCK_EVENT_SRC=m +CONFIG_SGI_GRU=m +# CONFIG_SGI_GRU_DEBUG is not set +CONFIG_APDS9802ALS=m +CONFIG_ISL29003=m +CONFIG_ISL29020=m +CONFIG_SENSORS_TSL2550=m +CONFIG_SENSORS_BH1780=m +CONFIG_SENSORS_BH1770=m +CONFIG_SENSORS_APDS990X=m +CONFIG_HMC6352=m +CONFIG_DS1682=m +CONFIG_TI_DAC7512=m +CONFIG_VMWARE_BALLOON=m +CONFIG_BMP085=m +# CONFIG_PCH_PHUB is not set + +## +## file: drivers/misc/c2port/Kconfig +## +CONFIG_C2PORT=m +CONFIG_C2PORT_DURAMAR_2150=m + +## +## file: drivers/misc/cb710/Kconfig +## +CONFIG_CB710_CORE=m +# CONFIG_CB710_DEBUG is not set + +## +## file: drivers/misc/eeprom/Kconfig +## +CONFIG_EEPROM_AT24=m +CONFIG_EEPROM_AT25=m +CONFIG_EEPROM_LEGACY=m +CONFIG_EEPROM_MAX6875=m +CONFIG_EEPROM_93CX6=m + +## +## file: drivers/misc/iwmc3200top/Kconfig +## +# CONFIG_IWMC3200TOP_DEBUG is not set +# CONFIG_IWMC3200TOP_DEBUGFS is not set + +## +## file: drivers/misc/lis3lv02d/Kconfig +## +CONFIG_SENSORS_LIS3_I2C=m + +## +## file: drivers/misc/ti-st/Kconfig +## +# CONFIG_TI_ST is not set + +## +## file: drivers/mmc/card/Kconfig +## +CONFIG_MMC_BLOCK_MINORS=8 +CONFIG_MMC_BLOCK_BOUNCE=y +CONFIG_SDIO_UART=m +# CONFIG_MMC_TEST is not set + +## +## file: drivers/mmc/core/Kconfig +## +# CONFIG_MMC_UNSAFE_RESUME is not set + +## +## file: drivers/mmc/host/Kconfig +## +CONFIG_MMC_SDHCI=m +CONFIG_MMC_SDHCI_PCI=m +CONFIG_MMC_RICOH_MMC=y +CONFIG_MMC_SDHCI_PLTFM=m +CONFIG_MMC_WBSD=m +CONFIG_MMC_TIFM_SD=m +CONFIG_MMC_SPI=m +CONFIG_MMC_SDRICOH_CS=m +CONFIG_MMC_CB710=m +CONFIG_MMC_VIA_SDMMC=m +CONFIG_MMC_VUB300=m +CONFIG_MMC_USHC=m + +## +## file: drivers/mtd/Kconfig +## +# CONFIG_MTD_TESTS is not set +CONFIG_MTD_AR7_PARTS=m +CONFIG_MTD_BLKDEVS=m +CONFIG_RFD_FTL=m +CONFIG_SSFDC=m +# CONFIG_SM_FTL is not set +CONFIG_MTD_OOPS=m +CONFIG_MTD_SWAP=m + +## +## file: drivers/mtd/devices/Kconfig +## +CONFIG_MTD_DATAFLASH=m +# CONFIG_MTD_DATAFLASH_WRITE_VERIFY is not set +# CONFIG_MTD_DATAFLASH_OTP is not set +CONFIG_MTD_M25P80=m +CONFIG_M25PXX_USE_FAST_READ=y +CONFIG_MTD_SST25L=m + +## +## file: drivers/mtd/lpddr/Kconfig +## +CONFIG_MTD_LPDDR=m + +## +## file: drivers/mtd/maps/Kconfig +## +# CONFIG_MTD_ESB2ROM is not set +# CONFIG_MTD_CK804XROM is not set +CONFIG_MTD_PCMCIA=m +# CONFIG_MTD_GPIO_ADDR is not set +CONFIG_MTD_INTEL_VR_NOR=m +CONFIG_MTD_PLATRAM=m +# CONFIG_MTD_LATCH_ADDR is not set + +## +## file: drivers/mtd/nand/Kconfig +## +# CONFIG_MTD_NAND_ECC_SMC is not set +# CONFIG_MTD_NAND_MUSEUM_IDS is not set +# CONFIG_MTD_NAND_DENALI is not set +CONFIG_MTD_NAND_RICOH=m +CONFIG_MTD_NAND_CAFE=m +CONFIG_MTD_NAND_CS553X=m +CONFIG_MTD_NAND_NANDSIM=m +CONFIG_MTD_ALAUDA=m + +## +## file: drivers/mtd/onenand/Kconfig +## +CONFIG_MTD_ONENAND=m +CONFIG_MTD_ONENAND_VERIFY_WRITE=y +CONFIG_MTD_ONENAND_GENERIC=m +# CONFIG_MTD_ONENAND_OTP is not set +CONFIG_MTD_ONENAND_2X_PROGRAM=y +CONFIG_MTD_ONENAND_SIM=m + +## +## file: drivers/mtd/ubi/Kconfig +## +CONFIG_MTD_UBI=m +CONFIG_MTD_UBI_WL_THRESHOLD=4096 +CONFIG_MTD_UBI_BEB_RESERVE=1 +# CONFIG_MTD_UBI_GLUEBI is not set +# CONFIG_MTD_UBI_DEBUG is not set + +## +## file: drivers/net/Kconfig +## +CONFIG_NETDEVICES=y +CONFIG_IFB=m +CONFIG_DUMMY=m +CONFIG_BONDING=m +CONFIG_MACVLAN=m +CONFIG_MACVTAP=m +CONFIG_EQUALIZER=m +CONFIG_TUN=m +CONFIG_VETH=m +CONFIG_MII=m +CONFIG_NET_ETHERNET=y +CONFIG_CASSINI=m +CONFIG_ENC28J60=m +# CONFIG_ENC28J60_WRITEVERIFY is not set +CONFIG_ETHOC=m +CONFIG_DNET=m +CONFIG_PCNET32=m +CONFIG_KSZ884X_PCI=m +CONFIG_R6040=m +CONFIG_SMSC9420=m +CONFIG_TLAN=m +CONFIG_KS8842=m +CONFIG_KS8851=m +CONFIG_KS8851_MLL=m +CONFIG_SC92031=m +# CONFIG_NET_POCKET is not set +CONFIG_ATL2=m +CONFIG_NETDEV_1000=y +CONFIG_ACENIC=m +# CONFIG_ACENIC_OMIT_TIGON_I is not set +CONFIG_DL2K=m +CONFIG_E1000=m +CONFIG_E1000E=m +CONFIG_IP1000=m +CONFIG_IGB=m +CONFIG_IGB_DCA=y +CONFIG_IGBVF=m +CONFIG_NS83820=m +CONFIG_HAMACHI=m +CONFIG_YELLOWFIN=m +CONFIG_R8169=m +CONFIG_SIS190=m +CONFIG_SKGE=m +# CONFIG_SKGE_DEBUG is not set +CONFIG_SKY2=m +# CONFIG_SKY2_DEBUG is not set +CONFIG_VIA_VELOCITY=m +CONFIG_TIGON3=m +CONFIG_BNX2=m +CONFIG_CNIC=m +CONFIG_QLA3XXX=m +CONFIG_ATL1=m +CONFIG_ATL1E=m +CONFIG_ATL1C=m +CONFIG_JME=m +# CONFIG_PCH_GBE is not set +CONFIG_NETDEV_10000=y +CONFIG_CHELSIO_T1=m +CONFIG_CHELSIO_T1_1G=y +CONFIG_CHELSIO_T3=m +CONFIG_CHELSIO_T4=m +CONFIG_CHELSIO_T4VF=m +CONFIG_ENIC=m +CONFIG_IXGBE=m +CONFIG_IXGBE_DCA=y +CONFIG_IXGBE_DCB=y +CONFIG_IXGBEVF=m +CONFIG_IXGB=m +CONFIG_S2IO=m +CONFIG_VXGE=m +# CONFIG_VXGE_DEBUG_TRACE_ALL is not set +CONFIG_MYRI10GE=m +CONFIG_MYRI10GE_DCA=y +CONFIG_NETXEN_NIC=m +CONFIG_NIU=m +CONFIG_MLX4_EN=m +CONFIG_MLX4_DEBUG=y +CONFIG_TEHUTI=m +CONFIG_BNX2X=m +CONFIG_QLCNIC=m +CONFIG_QLGE=m +CONFIG_BNA=m +CONFIG_DEFXX=m +# CONFIG_DEFXX_MMIO is not set +CONFIG_PPP=m +CONFIG_PPP_MULTILINK=y +CONFIG_PPP_FILTER=y +CONFIG_PPP_ASYNC=m +CONFIG_PPP_SYNC_TTY=m +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_BSDCOMP=m +CONFIG_PPP_MPPE=m +CONFIG_PPPOE=m +CONFIG_PPTP=m +CONFIG_PPPOATM=m +CONFIG_PPPOL2TP=m +CONFIG_SLIP=m +CONFIG_SLIP_COMPRESSED=y +CONFIG_SLIP_SMART=y +CONFIG_SLIP_MODE_SLIP6=y +CONFIG_NETCONSOLE=m +CONFIG_NETCONSOLE_DYNAMIC=y +CONFIG_VIRTIO_NET=m +CONFIG_VMXNET3=m + +## +## file: drivers/net/appletalk/Kconfig +## +CONFIG_ATALK=m +CONFIG_DEV_APPLETALK=y +CONFIG_LTPC=m +CONFIG_IPDDP=m +CONFIG_IPDDP_ENCAP=y +CONFIG_IPDDP_DECAP=y + +## +## file: drivers/net/benet/Kconfig +## +CONFIG_BE2NET=m + +## +## file: drivers/net/can/Kconfig +## +CONFIG_CAN_VCAN=m +CONFIG_CAN_SLCAN=m +CONFIG_CAN_DEV=m +CONFIG_CAN_CALC_BITTIMING=y +CONFIG_CAN_MCP251X=m +# CONFIG_PCH_CAN is not set +# CONFIG_CAN_DEBUG_DEVICES is not set + +## +## file: drivers/net/can/c_can/Kconfig +## +# CONFIG_CAN_C_CAN is not set + +## +## file: drivers/net/can/sja1000/Kconfig +## +CONFIG_CAN_SJA1000=m +CONFIG_CAN_SJA1000_ISA=m +# CONFIG_CAN_SJA1000_PLATFORM is not set +CONFIG_CAN_EMS_PCI=m +CONFIG_CAN_KVASER_PCI=m +CONFIG_CAN_PLX_PCI=m +CONFIG_CAN_TSCAN1=m + +## +## file: drivers/net/can/softing/Kconfig +## +CONFIG_CAN_SOFTING=m +CONFIG_CAN_SOFTING_CS=m + +## +## file: drivers/net/can/usb/Kconfig +## +CONFIG_CAN_EMS_USB=m +CONFIG_CAN_ESD_USB2=m + +## +## file: drivers/net/hamradio/Kconfig +## +CONFIG_MKISS=m +CONFIG_6PACK=m +CONFIG_BPQETHER=m +CONFIG_BAYCOM_SER_FDX=m +CONFIG_BAYCOM_SER_HDX=m +CONFIG_BAYCOM_PAR=m +CONFIG_BAYCOM_EPP=m +CONFIG_YAM=m + +## +## file: drivers/net/irda/Kconfig +## +CONFIG_DONGLE=y +CONFIG_ESI_DONGLE=m +CONFIG_ACTISYS_DONGLE=m +CONFIG_TEKRAM_DONGLE=m +CONFIG_TOIM3232_DONGLE=m +CONFIG_LITELINK_DONGLE=m +CONFIG_MA600_DONGLE=m +CONFIG_GIRBIL_DONGLE=m +CONFIG_MCP2120_DONGLE=m +CONFIG_OLD_BELKIN_DONGLE=m +CONFIG_ACT200L_DONGLE=m +CONFIG_KINGSUN_DONGLE=m +CONFIG_KSDAZZLE_DONGLE=m +CONFIG_KS959_DONGLE=m +CONFIG_MCS_FIR=m + +## +## file: drivers/net/pcmcia/Kconfig +## +CONFIG_PCMCIA_IBMTR=m + +## +## file: drivers/net/phy/Kconfig +## +CONFIG_PHYLIB=m +CONFIG_MARVELL_PHY=m +CONFIG_DAVICOM_PHY=m +CONFIG_QSEMI_PHY=m +CONFIG_LXT_PHY=m +CONFIG_CICADA_PHY=m +CONFIG_VITESSE_PHY=m +CONFIG_SMSC_PHY=m +CONFIG_BROADCOM_PHY=m +# CONFIG_BCM63XX_PHY is not set +CONFIG_ICPLUS_PHY=m +CONFIG_REALTEK_PHY=m +CONFIG_NATIONAL_PHY=m +CONFIG_STE10XP=m +CONFIG_LSI_ET1011C_PHY=m +CONFIG_MICREL_PHY=m +CONFIG_FIXED_PHY=y +CONFIG_MDIO_BITBANG=m +# CONFIG_MDIO_GPIO is not set + +## +## file: drivers/net/sfc/Kconfig +## +CONFIG_SFC=m +CONFIG_SFC_MTD=y + +## +## file: drivers/net/stmmac/Kconfig +## +# CONFIG_STMMAC_ETH is not set + +## +## file: drivers/net/tokenring/Kconfig +## +CONFIG_TR=y +CONFIG_IBMTR=m +CONFIG_IBMOL=m +CONFIG_IBMLS=m +CONFIG_3C359=m +CONFIG_TMS380TR=m +CONFIG_TMSPCI=m +CONFIG_SKISA=m +CONFIG_PROTEON=m +CONFIG_ABYSS=m +CONFIG_SMCTR=m + +## +## file: drivers/net/tulip/Kconfig +## +CONFIG_DE2104X_DSL=0 +CONFIG_TULIP_NAPI=y +CONFIG_TULIP_NAPI_HW_MITIGATION=y +CONFIG_ULI526X=m + +## +## file: drivers/net/usb/Kconfig +## +CONFIG_USB_CATC=m +CONFIG_USB_KAWETH=m +CONFIG_USB_PEGASUS=m +CONFIG_USB_RTL8150=m +CONFIG_USB_USBNET=m +CONFIG_USB_NET_AX8817X=m +CONFIG_USB_NET_CDCETHER=m +CONFIG_USB_NET_CDC_EEM=m +CONFIG_USB_NET_CDC_NCM=m +CONFIG_USB_NET_DM9601=m +CONFIG_USB_NET_SMSC75XX=m +CONFIG_USB_NET_SMSC95XX=m +CONFIG_USB_NET_GL620A=m +CONFIG_USB_NET_NET1080=m +CONFIG_USB_NET_PLUSB=m +CONFIG_USB_NET_MCS7830=m +CONFIG_USB_NET_RNDIS_HOST=m +CONFIG_USB_NET_CDC_SUBSET=m +CONFIG_USB_ALI_M5632=y +CONFIG_USB_AN2720=y +CONFIG_USB_BELKIN=y +CONFIG_USB_ARMLINUX=y +CONFIG_USB_EPSON2888=y +CONFIG_USB_KC2190=y +CONFIG_USB_NET_ZAURUS=m +CONFIG_USB_NET_CX82310_ETH=m +CONFIG_USB_NET_KALMIA=m +CONFIG_USB_HSO=m +CONFIG_USB_NET_INT51X1=m +CONFIG_USB_CDC_PHONET=m +CONFIG_USB_IPHETH=m +CONFIG_USB_SIERRA_NET=m +CONFIG_USB_VL600=m + +## +## file: drivers/net/wan/Kconfig +## +CONFIG_HDLC=m +CONFIG_HDLC_RAW=m +CONFIG_HDLC_RAW_ETH=m +CONFIG_HDLC_CISCO=m +CONFIG_HDLC_FR=m +CONFIG_HDLC_PPP=m +# CONFIG_HDLC_X25 is not set +# CONFIG_PC300TOO is not set +CONFIG_WAN_ROUTER_DRIVERS=m +# CONFIG_CYCLOMX_X25 is not set + +## +## file: drivers/net/wimax/i2400m/Kconfig +## +CONFIG_WIMAX_I2400M_USB=m +CONFIG_WIMAX_I2400M_SDIO=m +CONFIG_WIMAX_IWMC3200_SDIO=y +CONFIG_WIMAX_I2400M_DEBUG_LEVEL=8 + +## +## file: drivers/net/wireless/Kconfig +## +CONFIG_WLAN=y +CONFIG_LIBERTAS_THINFIRM=m +# CONFIG_LIBERTAS_THINFIRM_DEBUG is not set +CONFIG_LIBERTAS_THINFIRM_USB=m +CONFIG_AIRO=m +CONFIG_AT76C50X_USB=m +# CONFIG_PRISM54 is not set +CONFIG_USB_NET_RNDIS_WLAN=m +CONFIG_ADM8211=m +CONFIG_MAC80211_HWSIM=m +CONFIG_MWL8K=m + +## +## file: drivers/net/wireless/ath/Kconfig +## +CONFIG_ATH_COMMON=m +# CONFIG_ATH_DEBUG is not set + +## +## file: drivers/net/wireless/ath/ath5k/Kconfig +## +CONFIG_ATH5K=m +# CONFIG_ATH5K_DEBUG is not set +# CONFIG_ATH5K_TRACER is not set + +## +## file: drivers/net/wireless/ath/ath9k/Kconfig +## +CONFIG_ATH9K=m +CONFIG_ATH9K_PCI=y +# CONFIG_ATH9K_AHB is not set +# CONFIG_ATH9K_DEBUGFS is not set +CONFIG_ATH9K_RATE_CONTROL=y +CONFIG_ATH9K_HTC=m +# CONFIG_ATH9K_HTC_DEBUGFS is not set + +## +## file: drivers/net/wireless/ath/carl9170/Kconfig +## +CONFIG_CARL9170=m +CONFIG_CARL9170_LEDS=y +# CONFIG_CARL9170_DEBUGFS is not set + +## +## file: drivers/net/wireless/b43/Kconfig +## +CONFIG_B43=m +CONFIG_B43_PCMCIA=y +CONFIG_B43_SDIO=y +CONFIG_B43_PHY_N=y +CONFIG_B43_PHY_LP=y +# CONFIG_B43_DEBUG is not set + +## +## file: drivers/net/wireless/b43legacy/Kconfig +## +CONFIG_B43LEGACY=m +CONFIG_B43LEGACY_DEBUG=y +## choice: Broadcom 43xx-legacy data transfer mode +CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y +# CONFIG_B43LEGACY_DMA_MODE is not set +# CONFIG_B43LEGACY_PIO_MODE is not set +## end choice + +## +## file: drivers/net/wireless/hostap/Kconfig +## +CONFIG_HOSTAP=m +CONFIG_HOSTAP_FIRMWARE=y +# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set +CONFIG_HOSTAP_PLX=m +CONFIG_HOSTAP_PCI=m +CONFIG_HOSTAP_CS=m + +## +## file: drivers/net/wireless/ipw2x00/Kconfig +## +CONFIG_IPW2200=m +CONFIG_IPW2200_MONITOR=y +CONFIG_IPW2200_RADIOTAP=y +CONFIG_IPW2200_PROMISCUOUS=y +CONFIG_IPW2200_QOS=y +# CONFIG_IPW2200_DEBUG is not set +# CONFIG_LIBIPW_DEBUG is not set + +## +## file: drivers/net/wireless/iwlegacy/Kconfig +## +# CONFIG_IWLWIFI_LEGACY_DEBUG is not set +# CONFIG_IWLWIFI_LEGACY_DEVICE_TRACING is not set +CONFIG_IWL4965=m +CONFIG_IWL3945=m + +## +## file: drivers/net/wireless/iwlwifi/Kconfig +## +CONFIG_IWLAGN=m +# CONFIG_IWLWIFI_DEBUG is not set +# CONFIG_IWLWIFI_DEVICE_TRACING is not set +# CONFIG_IWLWIFI_DEVICE_SVTOOL is not set + +## +## file: drivers/net/wireless/iwmc3200wifi/Kconfig +## +CONFIG_IWM=m +# CONFIG_IWM_DEBUG is not set +# CONFIG_IWM_TRACING is not set + +## +## file: drivers/net/wireless/libertas/Kconfig +## +CONFIG_LIBERTAS=m +CONFIG_LIBERTAS_USB=m +CONFIG_LIBERTAS_CS=m +CONFIG_LIBERTAS_SDIO=m +CONFIG_LIBERTAS_SPI=m +# CONFIG_LIBERTAS_DEBUG is not set +CONFIG_LIBERTAS_MESH=y + +## +## file: drivers/net/wireless/orinoco/Kconfig +## +# CONFIG_HERMES_PRISM is not set +CONFIG_HERMES_CACHE_FW_ON_INIT=y +CONFIG_NORTEL_HERMES=m +CONFIG_PCMCIA_SPECTRUM=m +CONFIG_ORINOCO_USB=m + +## +## file: drivers/net/wireless/p54/Kconfig +## +CONFIG_P54_COMMON=m +CONFIG_P54_USB=m +CONFIG_P54_PCI=m +CONFIG_P54_SPI=m +# CONFIG_P54_SPI_DEFAULT_EEPROM is not set + +## +## file: drivers/net/wireless/rt2x00/Kconfig +## +CONFIG_RT2X00=m +CONFIG_RT2400PCI=m +CONFIG_RT2500PCI=m +CONFIG_RT61PCI=m +CONFIG_RT2800PCI=m +CONFIG_RT2800PCI_RT33XX=y +CONFIG_RT2800PCI_RT35XX=y +CONFIG_RT2800PCI_RT53XX=y +CONFIG_RT2500USB=m +CONFIG_RT73USB=m +CONFIG_RT2800USB=m +CONFIG_RT2800USB_RT33XX=y +CONFIG_RT2800USB_RT35XX=y +CONFIG_RT2800USB_RT53XX=y +# CONFIG_RT2800USB_UNKNOWN is not set +# CONFIG_RT2X00_DEBUG is not set + +## +## file: drivers/net/wireless/rtl818x/Kconfig +## +CONFIG_RTL8180=m +CONFIG_RTL8187=m + +## +## file: drivers/net/wireless/rtlwifi/Kconfig +## +CONFIG_RTL8192CE=m +CONFIG_RTL8192SE=m +CONFIG_RTL8192CU=m + +## +## file: drivers/net/wireless/wl1251/Kconfig +## +CONFIG_WL1251=m +CONFIG_WL1251_SPI=m +CONFIG_WL1251_SDIO=m + +## +## file: drivers/net/wireless/wl12xx/Kconfig +## +CONFIG_WL12XX_MENU=m +CONFIG_WL12XX=m +CONFIG_WL12XX_SPI=m +CONFIG_WL12XX_SDIO=m + +## +## file: drivers/net/wireless/zd1211rw/Kconfig +## +CONFIG_ZD1211RW=m +# CONFIG_ZD1211RW_DEBUG is not set + +## +## file: drivers/of/Kconfig +## +CONFIG_PROC_DEVICETREE=y + +## +## file: drivers/parport/Kconfig +## +CONFIG_PARPORT=m +CONFIG_PARPORT_PC=m +CONFIG_PARPORT_SERIAL=m +# CONFIG_PARPORT_PC_FIFO is not set +# CONFIG_PARPORT_PC_SUPERIO is not set +CONFIG_PARPORT_PC_PCMCIA=m +CONFIG_PARPORT_AX88796=m +CONFIG_PARPORT_1284=y + +## +## file: drivers/pci/Kconfig +## +CONFIG_PCI_MSI=y +# CONFIG_PCI_DEBUG is not set +CONFIG_PCI_STUB=m +CONFIG_PCI_IOV=y + +## +## file: drivers/pci/hotplug/Kconfig +## +CONFIG_HOTPLUG_PCI_CPCI=y + +## +## file: drivers/pci/pcie/Kconfig +## +CONFIG_PCIEPORTBUS=y +CONFIG_HOTPLUG_PCI_PCIE=m +CONFIG_PCIEASPM=y +# CONFIG_PCIEASPM_DEBUG is not set + +## +## file: drivers/pci/pcie/aer/Kconfig +## +CONFIG_PCIEAER=y +# CONFIG_PCIE_ECRC is not set + +## +## file: drivers/pci/pcie/aer/Kconfig.debug +## +CONFIG_PCIEAER_INJECT=m + +## +## file: drivers/pcmcia/Kconfig +## +CONFIG_PCMCIA_LOAD_CIS=y +CONFIG_YENTA_O2=y +CONFIG_YENTA_RICOH=y +CONFIG_YENTA_TI=y +CONFIG_YENTA_ENE_TUNE=y +CONFIG_YENTA_TOSHIBA=y + +## +## file: drivers/platform/x86/Kconfig +## +CONFIG_ASUS_LAPTOP=m +CONFIG_FUJITSU_LAPTOP=m +# CONFIG_FUJITSU_LAPTOP_DEBUG is not set +CONFIG_HP_WMI=m +CONFIG_MSI_LAPTOP=m +CONFIG_PANASONIC_LAPTOP=m +CONFIG_COMPAL_LAPTOP=m +CONFIG_SONY_LAPTOP=m +# CONFIG_RAR_REGISTER is not set +# CONFIG_SAMSUNG_LAPTOP is not set + +## +## file: drivers/pnp/Kconfig +## +# CONFIG_PNP_DEBUG_MESSAGES is not set + +## +## file: drivers/power/Kconfig +## +# CONFIG_POWER_SUPPLY is not set +CONFIG_WM831X_POWER=m +CONFIG_WM8350_POWER=m +# CONFIG_TEST_POWER is not set +CONFIG_BATTERY_DS2782=m +CONFIG_BATTERY_BQ27x00=m +CONFIG_BATTERY_MAX17040=m +CONFIG_CHARGER_PCF50633=m + +## +## file: drivers/pps/Kconfig +## +CONFIG_PPS=m +# CONFIG_PPS_DEBUG is not set + +## +## file: drivers/pps/clients/Kconfig +## +# CONFIG_PPS_CLIENT_KTIMER is not set +CONFIG_PPS_CLIENT_LDISC=m +CONFIG_PPS_CLIENT_PARPORT=m + +## +## file: drivers/ptp/Kconfig +## +CONFIG_PTP_1588_CLOCK=m +CONFIG_PTP_1588_CLOCK_GIANFAR=m +CONFIG_PTP_1588_CLOCK_IXP46X=m + +## +## file: drivers/regulator/Kconfig +## +CONFIG_REGULATOR=y +# CONFIG_REGULATOR_DEBUG is not set +CONFIG_REGULATOR_FIXED_VOLTAGE=m +# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set +CONFIG_REGULATOR_USERSPACE_CONSUMER=m +CONFIG_REGULATOR_BQ24022=m +CONFIG_REGULATOR_MAX1586=m +CONFIG_REGULATOR_MAX8649=m +CONFIG_REGULATOR_MAX8660=m +CONFIG_REGULATOR_WM831X=m +CONFIG_REGULATOR_WM8350=m +CONFIG_REGULATOR_WM8400=m +CONFIG_REGULATOR_WM8994=m +CONFIG_REGULATOR_PCF50633=m +CONFIG_REGULATOR_LP3971=m +CONFIG_REGULATOR_MC13783=m +CONFIG_REGULATOR_AB3100=m +CONFIG_REGULATOR_TPS65023=m +CONFIG_REGULATOR_TPS6507X=m + +## +## file: drivers/rtc/Kconfig +## +CONFIG_RTC_CLASS=y +CONFIG_RTC_HCTOSYS=y +CONFIG_RTC_HCTOSYS_DEVICE="rtc0" +# CONFIG_RTC_DEBUG is not set +CONFIG_RTC_INTF_SYSFS=y +CONFIG_RTC_INTF_PROC=y +CONFIG_RTC_INTF_DEV=y +# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set +# CONFIG_RTC_DRV_TEST is not set +CONFIG_RTC_DRV_DS1307=m +CONFIG_RTC_DRV_DS1374=m +CONFIG_RTC_DRV_DS1672=m +CONFIG_RTC_DRV_MAX6900=m +CONFIG_RTC_DRV_RS5C372=m +CONFIG_RTC_DRV_ISL1208=m +CONFIG_RTC_DRV_X1205=m +CONFIG_RTC_DRV_PCF8563=m +CONFIG_RTC_DRV_PCF8583=m +CONFIG_RTC_DRV_M41T80=m +# CONFIG_RTC_DRV_M41T80_WDT is not set +CONFIG_RTC_DRV_BQ32K=m +CONFIG_RTC_DRV_S35390A=m +CONFIG_RTC_DRV_FM3130=m +CONFIG_RTC_DRV_RX8581=m +CONFIG_RTC_DRV_RX8025=m +CONFIG_RTC_DRV_M41T94=m +CONFIG_RTC_DRV_DS1305=m +CONFIG_RTC_DRV_DS1390=m +CONFIG_RTC_DRV_MAX6902=m +CONFIG_RTC_DRV_R9701=m +CONFIG_RTC_DRV_RS5C348=m +CONFIG_RTC_DRV_DS3234=m +CONFIG_RTC_DRV_PCF2123=m +CONFIG_RTC_DRV_CMOS=m +CONFIG_RTC_DRV_DS1286=m +CONFIG_RTC_DRV_DS1511=m +CONFIG_RTC_DRV_DS1553=m +CONFIG_RTC_DRV_DS1742=m +CONFIG_RTC_DRV_STK17TA8=m +CONFIG_RTC_DRV_M48T86=m +CONFIG_RTC_DRV_M48T35=m +CONFIG_RTC_DRV_M48T59=m +CONFIG_RTC_DRV_MSM6242=m +CONFIG_RTC_DRV_BQ4802=m +CONFIG_RTC_DRV_RP5C01=m +CONFIG_RTC_DRV_V3020=m +CONFIG_RTC_DRV_WM831X=m +CONFIG_RTC_DRV_WM8350=m +CONFIG_RTC_DRV_PCF50633=m +CONFIG_RTC_DRV_AB3100=m + +## +## file: drivers/scsi/Kconfig +## +CONFIG_RAID_ATTRS=m +CONFIG_SCSI=m +CONFIG_SCSI_TGT=m +# CONFIG_SCSI_PROC_FS is not set +CONFIG_BLK_DEV_SD=m +CONFIG_CHR_DEV_ST=m +CONFIG_CHR_DEV_OSST=m +CONFIG_BLK_DEV_SR=m +CONFIG_BLK_DEV_SR_VENDOR=y +CONFIG_CHR_DEV_SG=m +CONFIG_CHR_DEV_SCH=m +CONFIG_SCSI_ENCLOSURE=m +CONFIG_SCSI_MULTI_LUN=y +CONFIG_SCSI_CONSTANTS=y +CONFIG_SCSI_LOGGING=y +CONFIG_SCSI_SCAN_ASYNC=y +CONFIG_SCSI_SPI_ATTRS=m +CONFIG_SCSI_FC_ATTRS=m +CONFIG_SCSI_FC_TGT_ATTRS=y +CONFIG_SCSI_ISCSI_ATTRS=m +CONFIG_SCSI_SAS_ATTRS=m +CONFIG_SCSI_SRP_TGT_ATTRS=y +CONFIG_SCSI_LOWLEVEL=y +CONFIG_ISCSI_TCP=m +CONFIG_BLK_DEV_3W_XXXX_RAID=m +CONFIG_SCSI_HPSA=m +CONFIG_SCSI_3W_9XXX=m +CONFIG_SCSI_3W_SAS=m +CONFIG_SCSI_7000FASST=m +CONFIG_SCSI_ACARD=m +CONFIG_SCSI_AHA152X=m +CONFIG_SCSI_AHA1542=m +CONFIG_SCSI_AHA1740=m +CONFIG_SCSI_AACRAID=m +CONFIG_SCSI_AIC7XXX_OLD=m +CONFIG_SCSI_ADVANSYS=m +# CONFIG_SCSI_ARCMSR_AER is not set +CONFIG_SCSI_HPTIOP=m +CONFIG_VMWARE_PVSCSI=m +CONFIG_LIBFC=m +CONFIG_FCOE=m +CONFIG_FCOE_FNIC=m +CONFIG_SCSI_PPA=m +CONFIG_SCSI_IMM=m +# CONFIG_SCSI_IZIP_EPP16 is not set +# CONFIG_SCSI_IZIP_SLOW_CTR is not set +CONFIG_SCSI_STEX=m +CONFIG_SCSI_SYM53C8XX_MMIO=y +# CONFIG_SCSI_IPR is not set +CONFIG_SCSI_LPFC=m +# CONFIG_SCSI_LPFC_DEBUG_FS is not set +# CONFIG_SCSI_DEBUG is not set +CONFIG_SCSI_PMCRAID=m +CONFIG_SCSI_PM8001=m +CONFIG_SCSI_SRP=m +CONFIG_SCSI_BFA_FC=m + +## +## file: drivers/scsi/aic7xxx/Kconfig.aic79xx +## +CONFIG_SCSI_AIC79XX=m +CONFIG_AIC79XX_CMDS_PER_DEVICE=32 +CONFIG_AIC79XX_RESET_DELAY_MS=15000 +CONFIG_AIC79XX_DEBUG_ENABLE=y +CONFIG_AIC79XX_DEBUG_MASK=0 +CONFIG_AIC79XX_REG_PRETTY_PRINT=y + +## +## file: drivers/scsi/aic7xxx/Kconfig.aic7xxx +## +CONFIG_SCSI_AIC7XXX=m +CONFIG_AIC7XXX_CMDS_PER_DEVICE=32 +CONFIG_AIC7XXX_RESET_DELAY_MS=15000 +CONFIG_AIC7XXX_DEBUG_ENABLE=y +CONFIG_AIC7XXX_DEBUG_MASK=0 +CONFIG_AIC7XXX_REG_PRETTY_PRINT=y + +## +## file: drivers/scsi/aic94xx/Kconfig +## +CONFIG_SCSI_AIC94XX=m +# CONFIG_AIC94XX_DEBUG is not set + +## +## file: drivers/scsi/be2iscsi/Kconfig +## +CONFIG_BE2ISCSI=m + +## +## file: drivers/scsi/bnx2fc/Kconfig +## +CONFIG_SCSI_BNX2X_FCOE=m + +## +## file: drivers/scsi/bnx2i/Kconfig +## +CONFIG_SCSI_BNX2_ISCSI=m + +## +## file: drivers/scsi/cxgbi/cxgb3i/Kconfig +## +CONFIG_SCSI_CXGB3_ISCSI=m + +## +## file: drivers/scsi/cxgbi/cxgb4i/Kconfig +## +CONFIG_SCSI_CXGB4_ISCSI=m + +## +## file: drivers/scsi/device_handler/Kconfig +## +CONFIG_SCSI_DH=m +CONFIG_SCSI_DH_RDAC=m +CONFIG_SCSI_DH_HP_SW=m +CONFIG_SCSI_DH_EMC=m +CONFIG_SCSI_DH_ALUA=m + +## +## file: drivers/scsi/libsas/Kconfig +## +CONFIG_SCSI_SAS_LIBSAS=m +CONFIG_SCSI_SAS_ATA=y +CONFIG_SCSI_SAS_HOST_SMP=y + +## +## file: drivers/scsi/megaraid/Kconfig.megaraid +## +CONFIG_MEGARAID_SAS=m + +## +## file: drivers/scsi/mpt2sas/Kconfig +## +CONFIG_SCSI_MPT2SAS=m +CONFIG_SCSI_MPT2SAS_MAX_SGE=128 +# CONFIG_SCSI_MPT2SAS_LOGGING is not set + +## +## file: drivers/scsi/mvsas/Kconfig +## +CONFIG_SCSI_MVSAS=m +# CONFIG_SCSI_MVSAS_DEBUG is not set + +## +## file: drivers/scsi/osd/Kconfig +## +CONFIG_SCSI_OSD_INITIATOR=m +CONFIG_SCSI_OSD_ULD=m +CONFIG_SCSI_OSD_DPRINT_SENSE=1 +# CONFIG_SCSI_OSD_DEBUG is not set + +## +## file: drivers/scsi/pcmcia/Kconfig +## +CONFIG_SCSI_LOWLEVEL_PCMCIA=y + +## +## file: drivers/scsi/qla2xxx/Kconfig +## +CONFIG_SCSI_QLA_FC=m + +## +## file: drivers/scsi/qla4xxx/Kconfig +## +CONFIG_SCSI_QLA_ISCSI=m + +## +## file: drivers/spi/Kconfig +## +CONFIG_SPI=y +# CONFIG_SPI_DEBUG is not set +CONFIG_SPI_BITBANG=m +CONFIG_SPI_BUTTERFLY=m +# CONFIG_SPI_GPIO is not set +CONFIG_SPI_LM70_LLP=m +# CONFIG_SPI_TOPCLIFF_PCH is not set +# CONFIG_SPI_XILINX is not set +# CONFIG_SPI_DESIGNWARE is not set +# CONFIG_SPI_SPIDEV is not set +CONFIG_SPI_TLE62X0=m + +## +## file: drivers/ssb/Kconfig +## +CONFIG_SSB=m +# CONFIG_SSB_DEBUG is not set + +## +## file: drivers/staging/Kconfig +## +CONFIG_STAGING=y + +## +## file: drivers/staging/asus_oled/Kconfig +## +# CONFIG_ASUS_OLED is not set + +## +## file: drivers/staging/comedi/Kconfig +## +# CONFIG_COMEDI is not set + +## +## file: drivers/staging/crystalhd/Kconfig +## +# CONFIG_CRYSTALHD is not set + +## +## file: drivers/staging/cx25821/Kconfig +## +# CONFIG_VIDEO_CX25821 is not set + +## +## file: drivers/staging/echo/Kconfig +## +# CONFIG_ECHO is not set + +## +## file: drivers/staging/et131x/Kconfig +## +# CONFIG_ET131X is not set + +## +## file: drivers/staging/frontier/Kconfig +## +# CONFIG_TRANZPORT is not set + +## +## file: drivers/staging/go7007/Kconfig +## +# CONFIG_VIDEO_GO7007 is not set + +## +## file: drivers/staging/hv/Kconfig +## +# CONFIG_HYPERV is not set + +## +## file: drivers/staging/iio/Kconfig +## +# CONFIG_IIO is not set + +## +## file: drivers/staging/line6/Kconfig +## +# CONFIG_LINE6_USB is not set + +## +## file: drivers/staging/panel/Kconfig +## +# CONFIG_PANEL is not set + +## +## file: drivers/staging/phison/Kconfig +## +# CONFIG_IDE_PHISON is not set + +## +## file: drivers/staging/pohmelfs/Kconfig +## +# CONFIG_POHMELFS is not set + +## +## file: drivers/staging/quatech_usb2/Kconfig +## +# CONFIG_USB_SERIAL_QUATECH_USB2 is not set + +## +## file: drivers/staging/rtl8192e/Kconfig +## +# CONFIG_RTL8192E is not set + +## +## file: drivers/staging/serqt_usb2/Kconfig +## +# CONFIG_USB_SERIAL_QUATECH2 is not set + +## +## file: drivers/staging/slicoss/Kconfig +## +# CONFIG_SLICOSS is not set + +## +## file: drivers/staging/sm7xx/Kconfig +## +# CONFIG_FB_SM7XX is not set + +## +## file: drivers/staging/speakup/Kconfig +## +CONFIG_SPEAKUP=m +CONFIG_SPEAKUP_SYNTH_ACNTSA=m +CONFIG_SPEAKUP_SYNTH_ACNTPC=m +CONFIG_SPEAKUP_SYNTH_APOLLO=m +CONFIG_SPEAKUP_SYNTH_AUDPTR=m +CONFIG_SPEAKUP_SYNTH_BNS=m +CONFIG_SPEAKUP_SYNTH_DECTLK=m +CONFIG_SPEAKUP_SYNTH_DECEXT=m +CONFIG_SPEAKUP_SYNTH_DTLK=m +CONFIG_SPEAKUP_SYNTH_KEYPC=m +CONFIG_SPEAKUP_SYNTH_LTLK=m +CONFIG_SPEAKUP_SYNTH_SOFT=m +CONFIG_SPEAKUP_SYNTH_SPKOUT=m +CONFIG_SPEAKUP_SYNTH_TXPRT=m +CONFIG_SPEAKUP_SYNTH_DUMMY=m + +## +## file: drivers/staging/tty/Kconfig +## +# CONFIG_STALLION is not set +# CONFIG_ISTALLION is not set +CONFIG_RISCOM8=m +CONFIG_COMPUTONE=m + +## +## file: drivers/staging/vme/Kconfig +## +# CONFIG_VME_BUS is not set + +## +## file: drivers/staging/vt6655/Kconfig +## +# CONFIG_VT6655 is not set + +## +## file: drivers/staging/vt6656/Kconfig +## +# CONFIG_VT6656 is not set + +## +## file: drivers/staging/winbond/Kconfig +## +# CONFIG_W35UND is not set + +## +## file: drivers/staging/wlan-ng/Kconfig +## +# CONFIG_PRISM2_USB is not set + +## +## file: drivers/target/Kconfig +## +CONFIG_TARGET_CORE=m +CONFIG_TCM_IBLOCK=m +CONFIG_TCM_FILEIO=m +CONFIG_TCM_PSCSI=m + +## +## file: drivers/target/loopback/Kconfig +## +CONFIG_LOOPBACK_TARGET=m +# CONFIG_LOOPBACK_TARGET_CDB_DEBUG is not set + +## +## file: drivers/target/tcm_fc/Kconfig +## +CONFIG_TCM_FC=m + +## +## file: drivers/tty/Kconfig +## +CONFIG_VT_HW_CONSOLE_BINDING=y +CONFIG_UNIX98_PTYS=y +CONFIG_DEVPTS_MULTIPLE_INSTANCES=y +# CONFIG_LEGACY_PTYS is not set +CONFIG_MOXA_SMARTIO=m +CONFIG_SYNCLINK_GT=m +CONFIG_NOZOMI=m +CONFIG_N_GSM=m + +## +## file: drivers/tty/serial/Kconfig +## +CONFIG_SERIAL_8250_PCI=y +CONFIG_SERIAL_8250_PNP=y +CONFIG_SERIAL_8250_FOURPORT=m +CONFIG_SERIAL_8250_ACCENT=m +CONFIG_SERIAL_8250_BOCA=m +CONFIG_SERIAL_8250_HUB6=m +CONFIG_SERIAL_8250_MCA=m +CONFIG_SERIAL_MAX3100=m +CONFIG_SERIAL_MFD_HSU=m +# CONFIG_SERIAL_TIMBERDALE is not set +# CONFIG_SERIAL_ALTERA_JTAGUART is not set +# CONFIG_SERIAL_ALTERA_UART is not set + +## +## file: drivers/uio/Kconfig +## +CONFIG_UIO=m +CONFIG_UIO_CIF=m +CONFIG_UIO_PDRV=m +CONFIG_UIO_PDRV_GENIRQ=m +CONFIG_UIO_AEC=m +CONFIG_UIO_SERCOS3=m +CONFIG_UIO_PCI_GENERIC=m +CONFIG_UIO_NETX=m + +## +## file: drivers/usb/Kconfig +## +CONFIG_USB_SUPPORT=y + +## +## file: drivers/usb/atm/Kconfig +## +CONFIG_USB_CXACRU=m +CONFIG_USB_UEAGLEATM=m +CONFIG_USB_XUSBATM=m + +## +## file: drivers/usb/class/Kconfig +## +CONFIG_USB_ACM=m +CONFIG_USB_PRINTER=m +CONFIG_USB_WDM=m +CONFIG_USB_TMC=m + +## +## file: drivers/usb/core/Kconfig +## +# CONFIG_USB_DEBUG is not set +CONFIG_USB_ANNOUNCE_NEW_DEVICES=y +CONFIG_USB_DEVICEFS=y +# CONFIG_USB_DEVICE_CLASS is not set +CONFIG_USB_DYNAMIC_MINORS=y +CONFIG_USB_SUSPEND=y + +## +## file: drivers/usb/gadget/Kconfig +## +# CONFIG_USB_GADGET is not set + +## +## file: drivers/usb/host/Kconfig +## +CONFIG_USB_C67X00_HCD=m +CONFIG_USB_XHCI_HCD=m +# CONFIG_USB_XHCI_HCD_DEBUGGING is not set +CONFIG_USB_EHCI_TT_NEWSCHED=y +# CONFIG_USB_OXU210HP_HCD is not set +CONFIG_USB_ISP116X_HCD=m +# CONFIG_USB_ISP1760_HCD is not set +# CONFIG_USB_ISP1362_HCD is not set +CONFIG_USB_U132_HCD=m +CONFIG_USB_R8A66597_HCD=m +CONFIG_USB_WHCI_HCD=m +CONFIG_USB_HWA_HCD=m + +## +## file: drivers/usb/image/Kconfig +## +CONFIG_USB_MDC800=m +CONFIG_USB_MICROTEK=m + +## +## file: drivers/usb/misc/Kconfig +## +CONFIG_USB_EMI62=m +CONFIG_USB_EMI26=m +CONFIG_USB_ADUTUX=m +CONFIG_USB_SEVSEG=m +CONFIG_USB_RIO500=m +CONFIG_USB_LEGOTOWER=m +CONFIG_USB_LCD=m +CONFIG_USB_LED=m +CONFIG_USB_CYPRESS_CY7C63=m +CONFIG_USB_CYTHERM=m +CONFIG_USB_IDMOUSE=m +CONFIG_USB_FTDI_ELAN=m +CONFIG_USB_APPLEDISPLAY=m +CONFIG_USB_LD=m +CONFIG_USB_TRANCEVIBRATOR=m +CONFIG_USB_IOWARRIOR=m +CONFIG_USB_TEST=m +CONFIG_USB_ISIGHTFW=m + +## +## file: drivers/usb/misc/sisusbvga/Kconfig +## +CONFIG_USB_SISUSBVGA=m +CONFIG_USB_SISUSBVGA_CON=y + +## +## file: drivers/usb/mon/Kconfig +## +CONFIG_USB_MON=y + +## +## file: drivers/usb/otg/Kconfig +## +CONFIG_NOP_USB_XCEIV=m + +## +## file: drivers/usb/serial/Kconfig +## +CONFIG_USB_SERIAL=m +CONFIG_USB_EZUSB=y +CONFIG_USB_SERIAL_GENERIC=y +CONFIG_USB_SERIAL_AIRCABLE=m +CONFIG_USB_SERIAL_ARK3116=m +CONFIG_USB_SERIAL_BELKIN=m +CONFIG_USB_SERIAL_CH341=m +CONFIG_USB_SERIAL_WHITEHEAT=m +CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m +CONFIG_USB_SERIAL_CP210X=m +CONFIG_USB_SERIAL_CYPRESS_M8=m +CONFIG_USB_SERIAL_EMPEG=m +CONFIG_USB_SERIAL_FTDI_SIO=m +CONFIG_USB_SERIAL_FUNSOFT=m +CONFIG_USB_SERIAL_VISOR=m +CONFIG_USB_SERIAL_IPAQ=m +CONFIG_USB_SERIAL_IR=m +CONFIG_USB_SERIAL_EDGEPORT=m +CONFIG_USB_SERIAL_EDGEPORT_TI=m +CONFIG_USB_SERIAL_GARMIN=m +CONFIG_USB_SERIAL_IPW=m +CONFIG_USB_SERIAL_IUU=m +CONFIG_USB_SERIAL_KEYSPAN_PDA=m +CONFIG_USB_SERIAL_KEYSPAN=m +CONFIG_USB_SERIAL_KLSI=m +CONFIG_USB_SERIAL_KOBIL_SCT=m +CONFIG_USB_SERIAL_MCT_U232=m +CONFIG_USB_SERIAL_MOS7720=m +CONFIG_USB_SERIAL_MOS7715_PARPORT=y +CONFIG_USB_SERIAL_MOS7840=m +CONFIG_USB_SERIAL_MOTOROLA=m +CONFIG_USB_SERIAL_NAVMAN=m +CONFIG_USB_SERIAL_PL2303=m +CONFIG_USB_SERIAL_OTI6858=m +CONFIG_USB_SERIAL_QCAUX=m +CONFIG_USB_SERIAL_QUALCOMM=m +CONFIG_USB_SERIAL_SPCP8X5=m +CONFIG_USB_SERIAL_HP4X=m +CONFIG_USB_SERIAL_SAFE=m +# CONFIG_USB_SERIAL_SAFE_PADDED is not set +CONFIG_USB_SERIAL_SIEMENS_MPI=m +CONFIG_USB_SERIAL_SIERRAWIRELESS=m +CONFIG_USB_SERIAL_SYMBOL=m +CONFIG_USB_SERIAL_TI=m +CONFIG_USB_SERIAL_CYBERJACK=m +CONFIG_USB_SERIAL_XIRCOM=m +CONFIG_USB_SERIAL_OPTION=m +CONFIG_USB_SERIAL_OMNINET=m +CONFIG_USB_SERIAL_OPTICON=m +CONFIG_USB_SERIAL_VIVOPAY_SERIAL=m +CONFIG_USB_SERIAL_ZIO=m +CONFIG_USB_SERIAL_SSU100=m +CONFIG_USB_SERIAL_DEBUG=m + +## +## file: drivers/usb/storage/Kconfig +## +CONFIG_USB_STORAGE=m +# CONFIG_USB_STORAGE_DEBUG is not set +CONFIG_USB_STORAGE_REALTEK=m +CONFIG_USB_STORAGE_DATAFAB=m +CONFIG_USB_STORAGE_FREECOM=m +CONFIG_USB_STORAGE_ISD200=m +CONFIG_USB_STORAGE_USBAT=m +CONFIG_USB_STORAGE_SDDR09=m +CONFIG_USB_STORAGE_SDDR55=m +CONFIG_USB_STORAGE_JUMPSHOT=m +CONFIG_USB_STORAGE_ALAUDA=m +CONFIG_USB_STORAGE_ONETOUCH=m +CONFIG_USB_STORAGE_KARMA=m +CONFIG_USB_STORAGE_CYPRESS_ATACB=m +CONFIG_USB_STORAGE_ENE_UB6250=m +CONFIG_USB_UAS=m +# CONFIG_USB_LIBUSUAL is not set + +## +## file: drivers/usb/wusbcore/Kconfig +## +CONFIG_USB_WUSB=m +CONFIG_USB_WUSB_CBAF=m +# CONFIG_USB_WUSB_CBAF_DEBUG is not set + +## +## file: drivers/uwb/Kconfig +## +CONFIG_UWB=m +CONFIG_UWB_I1480U=m + +## +## file: drivers/vhost/Kconfig +## +CONFIG_VHOST_NET=m + +## +## file: drivers/video/Kconfig +## +CONFIG_FIRMWARE_EDID=y +# CONFIG_FB_FOREIGN_ENDIAN is not set +CONFIG_FB_ARC=m +# CONFIG_FB_UVESA is not set +# CONFIG_FB_NVIDIA_DEBUG is not set +# CONFIG_FB_INTEL_DEBUG is not set +# CONFIG_FB_INTEL_I2C is not set +CONFIG_FB_S3=m +CONFIG_FB_S3_DDC=y +CONFIG_FB_VIA=m +# CONFIG_FB_VIA_DIRECT_PROCFS is not set +CONFIG_FB_VIA_X_COMPATIBILITY=y +CONFIG_FB_3DFX=m +# CONFIG_FB_3DFX_ACCEL is not set +CONFIG_FB_3DFX_I2C=y +CONFIG_FB_VT8623=m +CONFIG_FB_ARK=m +CONFIG_FB_PM3=m +# CONFIG_FB_CARMINE is not set +# CONFIG_FB_TMIO is not set +CONFIG_FB_SM501=m +# CONFIG_FB_UDL is not set +CONFIG_FB_METRONOME=m +CONFIG_FB_MB862XX=m +## choice: GDC variant +CONFIG_FB_MB862XX_PCI_GDC=y +## end choice +CONFIG_FB_MB862XX_I2C=y +# CONFIG_FB_BROADSHEET is not set + +## +## file: drivers/video/backlight/Kconfig +## +CONFIG_BACKLIGHT_LCD_SUPPORT=y +# CONFIG_LCD_CLASS_DEVICE is not set +CONFIG_BACKLIGHT_CLASS_DEVICE=y +# CONFIG_BACKLIGHT_GENERIC is not set +CONFIG_BACKLIGHT_APPLE=m +# CONFIG_BACKLIGHT_SAHARA is not set +CONFIG_BACKLIGHT_WM831X=m + +## +## file: drivers/video/console/Kconfig +## +# CONFIG_VGACON_SOFT_SCROLLBACK is not set +# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set +CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y + +## +## file: drivers/video/display/Kconfig +## +CONFIG_DISPLAY_SUPPORT=m + +## +## file: drivers/virtio/Kconfig +## +CONFIG_VIRTIO_PCI=m +CONFIG_VIRTIO_BALLOON=m + +## +## file: drivers/w1/Kconfig +## +CONFIG_W1=m +CONFIG_W1_CON=y + +## +## file: drivers/w1/masters/Kconfig +## +CONFIG_W1_MASTER_MATROX=m +CONFIG_W1_MASTER_DS2490=m +CONFIG_W1_MASTER_DS2482=m + +## +## file: drivers/w1/slaves/Kconfig +## +CONFIG_W1_SLAVE_THERM=m +CONFIG_W1_SLAVE_SMEM=m +CONFIG_W1_SLAVE_DS2431=m +CONFIG_W1_SLAVE_DS2433=m +# CONFIG_W1_SLAVE_DS2433_CRC is not set +CONFIG_W1_SLAVE_DS2760=m +CONFIG_W1_SLAVE_BQ27000=m + +## +## file: drivers/watchdog/Kconfig +## +CONFIG_WATCHDOG=y +# CONFIG_WATCHDOG_NOWAYOUT is not set +CONFIG_SOFT_WATCHDOG=m +CONFIG_WM831X_WATCHDOG=m +CONFIG_WM8350_WATCHDOG=m +CONFIG_SBC_FITPC2_WATCHDOG=m +CONFIG_ITCO_WDT=m +CONFIG_ITCO_VENDOR_SUPPORT=y +CONFIG_IT87_WDT=m +CONFIG_PC87413_WDT=m +CONFIG_SMSC_SCH311X_WDT=m +CONFIG_SMSC37B787_WDT=m +CONFIG_W83697HF_WDT=m +CONFIG_W83697UG_WDT=m +CONFIG_SBC_EPX_C3_WATCHDOG=m +CONFIG_XEN_WDT=m + +## +## file: fs/Kconfig +## +CONFIG_CUSE=m +CONFIG_TMPFS=y +CONFIG_TMPFS_POSIX_ACL=y +CONFIG_HUGETLBFS=y +CONFIG_MISC_FILESYSTEMS=y +CONFIG_NETWORK_FILESYSTEMS=y + +## +## file: fs/9p/Kconfig +## +CONFIG_9P_FS=m +CONFIG_9P_FSCACHE=y +CONFIG_9P_FS_POSIX_ACL=y + +## +## file: fs/adfs/Kconfig +## +CONFIG_ADFS_FS=m +# CONFIG_ADFS_FS_RW is not set + +## +## file: fs/affs/Kconfig +## +CONFIG_AFFS_FS=m + +## +## file: fs/afs/Kconfig +## +CONFIG_AFS_FS=m +# CONFIG_AFS_DEBUG is not set +CONFIG_AFS_FSCACHE=y + +## +## file: fs/autofs4/Kconfig +## +CONFIG_AUTOFS4_FS=m + +## +## file: fs/befs/Kconfig +## +CONFIG_BEFS_FS=m +# CONFIG_BEFS_DEBUG is not set + +## +## file: fs/bfs/Kconfig +## +CONFIG_BFS_FS=m + +## +## file: fs/Kconfig.binfmt +## +CONFIG_BINFMT_ELF=y +CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y +CONFIG_BINFMT_MISC=m + +## +## file: fs/btrfs/Kconfig +## +CONFIG_BTRFS_FS=m +CONFIG_BTRFS_FS_POSIX_ACL=y + +## +## file: fs/cachefiles/Kconfig +## +CONFIG_CACHEFILES=m +# CONFIG_CACHEFILES_DEBUG is not set +# CONFIG_CACHEFILES_HISTOGRAM is not set + +## +## file: fs/ceph/Kconfig +## +CONFIG_CEPH_FS=m + +## +## file: fs/cifs/Kconfig +## +CONFIG_CIFS=m +# CONFIG_CIFS_STATS is not set +CONFIG_CIFS_WEAK_PW_HASH=y +CONFIG_CIFS_UPCALL=y +CONFIG_CIFS_XATTR=y +CONFIG_CIFS_POSIX=y +# CONFIG_CIFS_DEBUG2 is not set +CONFIG_CIFS_DFS_UPCALL=y +CONFIG_CIFS_FSCACHE=y +CONFIG_CIFS_ACL=y +CONFIG_CIFS_NFSD_EXPORT=y + +## +## file: fs/coda/Kconfig +## +CONFIG_CODA_FS=m + +## +## file: fs/configfs/Kconfig +## +CONFIG_CONFIGFS_FS=m + +## +## file: fs/cramfs/Kconfig +## +CONFIG_CRAMFS=m + +## +## file: fs/dlm/Kconfig +## +CONFIG_DLM=m +CONFIG_DLM_DEBUG=y + +## +## file: fs/ecryptfs/Kconfig +## +CONFIG_ECRYPT_FS=m + +## +## file: fs/efs/Kconfig +## +CONFIG_EFS_FS=m + +## +## file: fs/exofs/Kconfig +## +CONFIG_EXOFS_FS=m +# CONFIG_EXOFS_DEBUG is not set + +## +## file: fs/ext2/Kconfig +## +CONFIG_EXT2_FS=m +CONFIG_EXT2_FS_XATTR=y +CONFIG_EXT2_FS_POSIX_ACL=y +CONFIG_EXT2_FS_SECURITY=y +# CONFIG_EXT2_FS_XIP is not set + +## +## file: fs/ext3/Kconfig +## +CONFIG_EXT3_FS=m +CONFIG_EXT3_DEFAULTS_TO_ORDERED=y +CONFIG_EXT3_FS_XATTR=y +CONFIG_EXT3_FS_POSIX_ACL=y +CONFIG_EXT3_FS_SECURITY=y + +## +## file: fs/ext4/Kconfig +## +CONFIG_EXT4_FS=m +CONFIG_EXT4_FS_XATTR=y +CONFIG_EXT4_FS_POSIX_ACL=y +CONFIG_EXT4_FS_SECURITY=y +# CONFIG_EXT4_DEBUG is not set + +## +## file: fs/fat/Kconfig +## +CONFIG_MSDOS_FS=m +CONFIG_VFAT_FS=m +CONFIG_FAT_DEFAULT_CODEPAGE=437 +CONFIG_FAT_DEFAULT_IOCHARSET="utf8" + +## +## file: fs/freevxfs/Kconfig +## +CONFIG_VXFS_FS=m + +## +## file: fs/fscache/Kconfig +## +CONFIG_FSCACHE=m +CONFIG_FSCACHE_STATS=y +# CONFIG_FSCACHE_HISTOGRAM is not set +# CONFIG_FSCACHE_DEBUG is not set +# CONFIG_FSCACHE_OBJECT_LIST is not set + +## +## file: fs/fuse/Kconfig +## +CONFIG_FUSE_FS=m + +## +## file: fs/gfs2/Kconfig +## +CONFIG_GFS2_FS=m +CONFIG_GFS2_FS_LOCKING_DLM=y + +## +## file: fs/hfs/Kconfig +## +CONFIG_HFS_FS=m + +## +## file: fs/hfsplus/Kconfig +## +CONFIG_HFSPLUS_FS=m + +## +## file: fs/hpfs/Kconfig +## +# CONFIG_HPFS_FS is not set + +## +## file: fs/isofs/Kconfig +## +CONFIG_ISO9660_FS=m +CONFIG_JOLIET=y +CONFIG_ZISOFS=y + +## +## file: fs/jbd/Kconfig +## +# CONFIG_JBD_DEBUG is not set + +## +## file: fs/jbd2/Kconfig +## +# CONFIG_JBD2_DEBUG is not set + +## +## file: fs/jffs2/Kconfig +## +CONFIG_JFFS2_FS=m +CONFIG_JFFS2_FS_DEBUG=0 +CONFIG_JFFS2_FS_WRITEBUFFER=y +# CONFIG_JFFS2_FS_WBUF_VERIFY is not set +CONFIG_JFFS2_SUMMARY=y +CONFIG_JFFS2_FS_XATTR=y +CONFIG_JFFS2_FS_POSIX_ACL=y +CONFIG_JFFS2_FS_SECURITY=y +CONFIG_JFFS2_COMPRESSION_OPTIONS=y +CONFIG_JFFS2_ZLIB=y +CONFIG_JFFS2_LZO=y +CONFIG_JFFS2_RTIME=y +# CONFIG_JFFS2_RUBIN is not set +## choice: JFFS2 default compression mode +# CONFIG_JFFS2_CMODE_NONE is not set +CONFIG_JFFS2_CMODE_PRIORITY=y +# CONFIG_JFFS2_CMODE_SIZE is not set +# CONFIG_JFFS2_CMODE_FAVOURLZO is not set +## end choice + +## +## file: fs/jfs/Kconfig +## +CONFIG_JFS_FS=m +CONFIG_JFS_POSIX_ACL=y +CONFIG_JFS_SECURITY=y +# CONFIG_JFS_DEBUG is not set +# CONFIG_JFS_STATISTICS is not set + +## +## file: fs/logfs/Kconfig +## +CONFIG_LOGFS=m + +## +## file: fs/minix/Kconfig +## +CONFIG_MINIX_FS=m + +## +## file: fs/ncpfs/Kconfig +## +CONFIG_NCP_FS=m +CONFIG_NCPFS_PACKET_SIGNING=y +CONFIG_NCPFS_IOCTL_LOCKING=y +CONFIG_NCPFS_STRONG=y +CONFIG_NCPFS_NFS_NS=y +CONFIG_NCPFS_OS2_NS=y +# CONFIG_NCPFS_SMALLDOS is not set +CONFIG_NCPFS_NLS=y +CONFIG_NCPFS_EXTRAS=y + +## +## file: fs/nfs/Kconfig +## +CONFIG_NFS_FS=m +CONFIG_NFS_V3=y +CONFIG_NFS_V3_ACL=y +CONFIG_NFS_V4=y +# CONFIG_NFS_V4_1 is not set +CONFIG_NFS_FSCACHE=y +# CONFIG_NFS_USE_LEGACY_DNS is not set +# CONFIG_NFS_USE_NEW_IDMAPPER is not set + +## +## file: fs/nfsd/Kconfig +## +CONFIG_NFSD=m +CONFIG_NFSD_V3=y +CONFIG_NFSD_V3_ACL=y +CONFIG_NFSD_V4=y + +## +## file: fs/nilfs2/Kconfig +## +CONFIG_NILFS2_FS=m + +## +## file: fs/nls/Kconfig +## +CONFIG_NLS=y +CONFIG_NLS_DEFAULT="utf8" +CONFIG_NLS_CODEPAGE_437=m +CONFIG_NLS_CODEPAGE_737=m +CONFIG_NLS_CODEPAGE_775=m +CONFIG_NLS_CODEPAGE_850=m +CONFIG_NLS_CODEPAGE_852=m +CONFIG_NLS_CODEPAGE_855=m +CONFIG_NLS_CODEPAGE_857=m +CONFIG_NLS_CODEPAGE_860=m +CONFIG_NLS_CODEPAGE_861=m +CONFIG_NLS_CODEPAGE_862=m +CONFIG_NLS_CODEPAGE_863=m +CONFIG_NLS_CODEPAGE_864=m +CONFIG_NLS_CODEPAGE_865=m +CONFIG_NLS_CODEPAGE_866=m +CONFIG_NLS_CODEPAGE_869=m +CONFIG_NLS_CODEPAGE_936=m +CONFIG_NLS_CODEPAGE_950=m +CONFIG_NLS_CODEPAGE_932=m +CONFIG_NLS_CODEPAGE_949=m +CONFIG_NLS_CODEPAGE_874=m +CONFIG_NLS_ISO8859_8=m +CONFIG_NLS_CODEPAGE_1250=m +CONFIG_NLS_CODEPAGE_1251=m +CONFIG_NLS_ASCII=m +CONFIG_NLS_ISO8859_1=m +CONFIG_NLS_ISO8859_2=m +CONFIG_NLS_ISO8859_3=m +CONFIG_NLS_ISO8859_4=m +CONFIG_NLS_ISO8859_5=m +CONFIG_NLS_ISO8859_6=m +CONFIG_NLS_ISO8859_7=m +CONFIG_NLS_ISO8859_9=m +CONFIG_NLS_ISO8859_13=m +CONFIG_NLS_ISO8859_14=m +CONFIG_NLS_ISO8859_15=m +CONFIG_NLS_KOI8_R=m +CONFIG_NLS_KOI8_U=m +CONFIG_NLS_UTF8=m + +## +## file: fs/notify/dnotify/Kconfig +## +CONFIG_DNOTIFY=y + +## +## file: fs/notify/fanotify/Kconfig +## +CONFIG_FANOTIFY=y +# CONFIG_FANOTIFY_ACCESS_PERMISSIONS is not set + +## +## file: fs/notify/inotify/Kconfig +## +CONFIG_INOTIFY_USER=y + +## +## file: fs/ntfs/Kconfig +## +CONFIG_NTFS_FS=m +# CONFIG_NTFS_DEBUG is not set +CONFIG_NTFS_RW=y + +## +## file: fs/ocfs2/Kconfig +## +CONFIG_OCFS2_FS=m +CONFIG_OCFS2_FS_O2CB=m +CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m +CONFIG_OCFS2_FS_STATS=y +CONFIG_OCFS2_DEBUG_MASKLOG=y +# CONFIG_OCFS2_DEBUG_FS is not set + +## +## file: fs/omfs/Kconfig +## +CONFIG_OMFS_FS=m + +## +## file: fs/partitions/Kconfig +## +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_PARTITION is not set +# CONFIG_OSF_PARTITION is not set +# CONFIG_AMIGA_PARTITION is not set +# CONFIG_ATARI_PARTITION is not set +# CONFIG_MAC_PARTITION is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_BSD_DISKLABEL is not set +# CONFIG_MINIX_SUBPARTITION is not set +# CONFIG_SOLARIS_X86_PARTITION is not set +# CONFIG_UNIXWARE_DISKLABEL is not set +# CONFIG_LDM_PARTITION is not set +# CONFIG_SGI_PARTITION is not set +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +CONFIG_KARMA_PARTITION=y +# CONFIG_EFI_PARTITION is not set +# CONFIG_SYSV68_PARTITION is not set + +## +## file: fs/proc/Kconfig +## +CONFIG_PROC_KCORE=y +CONFIG_PROC_SYSCTL=y + +## +## file: fs/qnx4/Kconfig +## +CONFIG_QNX4FS_FS=m + +## +## file: fs/quota/Kconfig +## +CONFIG_QUOTA=y +CONFIG_QUOTA_NETLINK_INTERFACE=y +CONFIG_PRINT_QUOTA_WARNING=y +# CONFIG_QUOTA_DEBUG is not set +CONFIG_QFMT_V1=m +CONFIG_QFMT_V2=m + +## +## file: fs/reiserfs/Kconfig +## +CONFIG_REISERFS_FS=m +# CONFIG_REISERFS_CHECK is not set +# CONFIG_REISERFS_PROC_INFO is not set +CONFIG_REISERFS_FS_XATTR=y +CONFIG_REISERFS_FS_POSIX_ACL=y +CONFIG_REISERFS_FS_SECURITY=y + +## +## file: fs/romfs/Kconfig +## +CONFIG_ROMFS_FS=m +## choice: RomFS backing stores +# CONFIG_ROMFS_BACKED_BY_BLOCK is not set +# CONFIG_ROMFS_BACKED_BY_MTD is not set +CONFIG_ROMFS_BACKED_BY_BOTH=y +## end choice + +## +## file: fs/squashfs/Kconfig +## +CONFIG_SQUASHFS=m +CONFIG_SQUASHFS_XATTR=y +CONFIG_SQUASHFS_LZO=y +CONFIG_SQUASHFS_XZ=y +# CONFIG_SQUASHFS_EMBEDDED is not set + +## +## file: fs/sysv/Kconfig +## +CONFIG_SYSV_FS=m + +## +## file: fs/ubifs/Kconfig +## +CONFIG_UBIFS_FS=m +CONFIG_UBIFS_FS_XATTR=y +CONFIG_UBIFS_FS_ADVANCED_COMPR=y +CONFIG_UBIFS_FS_LZO=y +CONFIG_UBIFS_FS_ZLIB=y +# CONFIG_UBIFS_FS_DEBUG is not set + +## +## file: fs/udf/Kconfig +## +CONFIG_UDF_FS=m + +## +## file: fs/ufs/Kconfig +## +CONFIG_UFS_FS=m +# CONFIG_UFS_FS_WRITE is not set +# CONFIG_UFS_DEBUG is not set + +## +## file: fs/xfs/Kconfig +## +CONFIG_XFS_FS=m +CONFIG_XFS_QUOTA=y +CONFIG_XFS_POSIX_ACL=y +CONFIG_XFS_RT=y +# CONFIG_XFS_DEBUG is not set + +## +## file: init/Kconfig +## +CONFIG_EXPERIMENTAL=y +CONFIG_LOCALVERSION="" +# CONFIG_LOCALVERSION_AUTO is not set +## choice: Kernel compression mode +CONFIG_KERNEL_GZIP=y +# CONFIG_KERNEL_BZIP2 is not set +# CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_LZO is not set +## end choice +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +CONFIG_POSIX_MQUEUE=y +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_BSD_PROCESS_ACCT_V3=y +CONFIG_FHANDLE=y +CONFIG_TASKSTATS=y +CONFIG_TASK_DELAY_ACCT=y +CONFIG_TASK_XACCT=y +CONFIG_TASK_IO_ACCOUNTING=y +CONFIG_AUDIT=y +CONFIG_AUDITSYSCALL=y +## choice: RCU Implementation +CONFIG_TREE_RCU=y +# CONFIG_TREE_PREEMPT_RCU is not set +## end choice +# CONFIG_RCU_TRACE is not set +CONFIG_RCU_FANOUT=32 +# CONFIG_RCU_FANOUT_EXACT is not set +CONFIG_RCU_FAST_NO_HZ=y +# CONFIG_IKCONFIG is not set +CONFIG_LOG_BUF_SHIFT=17 +CONFIG_CGROUPS=y +# CONFIG_CGROUP_DEBUG is not set +CONFIG_CGROUP_FREEZER=y +CONFIG_CGROUP_DEVICE=y +CONFIG_CPUSETS=y +CONFIG_PROC_PID_CPUSET=y +CONFIG_CGROUP_CPUACCT=y +CONFIG_RESOURCE_COUNTERS=y +CONFIG_CGROUP_MEM_RES_CTLR=y +CONFIG_CGROUP_MEM_RES_CTLR_SWAP=y +# CONFIG_CGROUP_MEM_RES_CTLR_SWAP_ENABLED is not set +CONFIG_CGROUP_SCHED=y +CONFIG_FAIR_GROUP_SCHED=y +# CONFIG_RT_GROUP_SCHED is not set +CONFIG_BLK_CGROUP=y +# CONFIG_DEBUG_BLK_CGROUP is not set +CONFIG_UTS_NS=y +CONFIG_IPC_NS=y +CONFIG_USER_NS=y +CONFIG_PID_NS=y +CONFIG_NET_NS=y +CONFIG_SCHED_AUTOGROUP=y +# CONFIG_SYSFS_DEPRECATED is not set +# CONFIG_SYSFS_DEPRECATED_V2 is not set +CONFIG_RELAY=y +CONFIG_BLK_DEV_INITRD=y +CONFIG_CC_OPTIMIZE_FOR_SIZE=y +CONFIG_SYSCTL_SYSCALL=y +CONFIG_KALLSYMS=y +# CONFIG_KALLSYMS_ALL is not set +CONFIG_PRINTK=y +CONFIG_BUG=y +CONFIG_ELF_CORE=y +CONFIG_FUTEX=y +CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_TIMERFD=y +CONFIG_EVENTFD=y +CONFIG_SHMEM=y +# CONFIG_EMBEDDED is not set +CONFIG_PERF_EVENTS=y +#. Compatibility setting +# CONFIG_PERF_COUNTERS is not set +# CONFIG_DEBUG_PERF_USE_VMALLOC is not set +CONFIG_VM_EVENT_COUNTERS=y +# CONFIG_COMPAT_BRK is not set +## choice: Choose SLAB allocator +CONFIG_SLAB=y +# CONFIG_SLUB is not set +# CONFIG_SLOB is not set +## end choice +CONFIG_PROFILING=y +CONFIG_MODULES=y +CONFIG_MODULE_FORCE_LOAD=y +CONFIG_MODULE_UNLOAD=y +CONFIG_MODULE_FORCE_UNLOAD=y +CONFIG_MODVERSIONS=y +# CONFIG_MODULE_SRCVERSION_ALL is not set + +## +## file: kernel/gcov/Kconfig +## +# CONFIG_GCOV_KERNEL is not set + +## +## file: kernel/Kconfig.hz +## +## choice: Timer frequency +# CONFIG_HZ_100 is not set +CONFIG_HZ_250=y +# CONFIG_HZ_300 is not set +# CONFIG_HZ_1000 is not set +## end choice + +## +## file: kernel/power/Kconfig +## +CONFIG_SUSPEND=y +CONFIG_HIBERNATION=y +CONFIG_PM_STD_PARTITION="" +CONFIG_PM_RUNTIME=y +CONFIG_PM_DEBUG=y +CONFIG_PM_ADVANCED_DEBUG=y + +## +## file: kernel/Kconfig.preempt +## +## choice: Preemption Model +# CONFIG_PREEMPT_NONE is not set +CONFIG_PREEMPT_VOLUNTARY=y +# CONFIG_PREEMPT is not set +## end choice + +## +## file: kernel/time/Kconfig +## +CONFIG_NO_HZ=y +CONFIG_HIGH_RES_TIMERS=y + +## +## file: kernel/trace/Kconfig +## +CONFIG_FTRACE=y +# CONFIG_FUNCTION_TRACER is not set +# CONFIG_IRQSOFF_TRACER is not set +# CONFIG_SCHED_TRACER is not set +# CONFIG_FTRACE_SYSCALLS is not set +## choice: Branch Profiling +CONFIG_BRANCH_PROFILE_NONE=y +# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set +# CONFIG_PROFILE_ALL_BRANCHES is not set +## end choice +# CONFIG_STACK_TRACER is not set +CONFIG_BLK_DEV_IO_TRACE=y +# CONFIG_KPROBE_EVENT is not set +# CONFIG_FTRACE_STARTUP_TEST is not set +# CONFIG_RING_BUFFER_BENCHMARK is not set + +## +## file: lib/Kconfig +## +CONFIG_CRC_CCITT=m +CONFIG_CRC16=m +CONFIG_CRC_T10DIF=m +CONFIG_CRC_ITU_T=m +CONFIG_CRC32=y +CONFIG_CRC7=m +CONFIG_LIBCRC32C=m + +## +## file: lib/Kconfig.debug +## +CONFIG_PRINTK_TIME=y +CONFIG_DEFAULT_MESSAGE_LOGLEVEL=4 +CONFIG_ENABLE_WARN_DEPRECATED=y +CONFIG_ENABLE_MUST_CHECK=y +CONFIG_MAGIC_SYSRQ=y +CONFIG_STRIP_ASM_SYMS=y +CONFIG_UNUSED_SYMBOLS=y +CONFIG_DEBUG_FS=y +# CONFIG_HEADERS_CHECK is not set +# CONFIG_DEBUG_SECTION_MISMATCH is not set +CONFIG_DEBUG_KERNEL=y +CONFIG_LOCKUP_DETECTOR=y +# CONFIG_BOOTPARAM_HARDLOCKUP_PANIC is not set +# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set +CONFIG_DETECT_HUNG_TASK=y +CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=120 +# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set +CONFIG_SCHED_DEBUG=y +# CONFIG_SCHEDSTATS is not set +CONFIG_TIMER_STATS=y +# CONFIG_DEBUG_OBJECTS is not set +# CONFIG_DEBUG_SLAB is not set +# CONFIG_SLUB_DEBUG_ON is not set +# CONFIG_SLUB_STATS is not set +# CONFIG_DEBUG_KMEMLEAK is not set +# CONFIG_DEBUG_RT_MUTEXES is not set +# CONFIG_RT_MUTEX_TESTER is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_MUTEXES is not set +# CONFIG_DEBUG_LOCK_ALLOC is not set +# CONFIG_PROVE_LOCKING is not set +# CONFIG_SPARSE_RCU_POINTER is not set +# CONFIG_LOCK_STAT is not set +# CONFIG_DEBUG_SPINLOCK_SLEEP is not set +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set +# CONFIG_DEBUG_KOBJECT is not set +# CONFIG_DEBUG_HIGHMEM is not set +CONFIG_DEBUG_BUGVERBOSE=y +# CONFIG_DEBUG_INFO is not set +# CONFIG_DEBUG_VM is not set +# CONFIG_DEBUG_VIRTUAL is not set +# CONFIG_DEBUG_WRITECOUNT is not set +# CONFIG_DEBUG_LIST is not set +# CONFIG_TEST_LIST_SORT is not set +# CONFIG_DEBUG_SG is not set +# CONFIG_DEBUG_NOTIFIERS is not set +# CONFIG_DEBUG_CREDENTIALS is not set +CONFIG_BOOT_PRINTK_DELAY=y +# CONFIG_RCU_TORTURE_TEST is not set +# CONFIG_KPROBES_SANITY_TEST is not set +# CONFIG_BACKTRACE_SELF_TEST is not set +# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set +# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set +# CONFIG_LKDTM is not set +# CONFIG_CPU_NOTIFIER_ERROR_INJECT is not set +# CONFIG_FAULT_INJECTION is not set +# CONFIG_LATENCYTOP is not set +CONFIG_SYSCTL_SYSCALL_CHECK=y +# CONFIG_FIREWIRE_OHCI_REMOTE_DMA is not set +# CONFIG_DYNAMIC_DEBUG is not set +# CONFIG_DMA_API_DEBUG is not set +# CONFIG_ATOMIC64_SELFTEST is not set +#. Self-test +# CONFIG_ASYNC_RAID6_TEST is not set +# CONFIG_TEST_KSTRTOX is not set + +## +## file: lib/Kconfig.kgdb +## +# CONFIG_KGDB is not set + +## +## file: lib/xz/Kconfig +## +# CONFIG_XZ_DEC_TEST is not set + +## +## file: mm/Kconfig +## +CONFIG_MEMORY_HOTPLUG=y +CONFIG_MEMORY_HOTREMOVE=y +CONFIG_COMPACTION=y +CONFIG_MIGRATION=y +CONFIG_KSM=y +CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 +CONFIG_MEMORY_FAILURE=y +CONFIG_HWPOISON_INJECT=m + +## +## file: net/Kconfig +## +CONFIG_NET=y +CONFIG_INET=y +CONFIG_NETWORK_SECMARK=y +# CONFIG_NETWORK_PHY_TIMESTAMPING is not set +CONFIG_NETFILTER=y +# CONFIG_NETFILTER_DEBUG is not set +CONFIG_NETFILTER_ADVANCED=y +CONFIG_BRIDGE_NETFILTER=y +CONFIG_BPF_JIT=y +CONFIG_NET_PKTGEN=m +# CONFIG_NET_TCPPROBE is not set +CONFIG_NET_DROP_MONITOR=y +CONFIG_WIRELESS=y + +## +## file: net/8021q/Kconfig +## +CONFIG_VLAN_8021Q=m +CONFIG_VLAN_8021Q_GVRP=y + +## +## file: net/9p/Kconfig +## +CONFIG_NET_9P=m +CONFIG_NET_9P_VIRTIO=m +CONFIG_NET_9P_RDMA=m +# CONFIG_NET_9P_DEBUG is not set + +## +## file: net/atm/Kconfig +## +CONFIG_ATM=m +CONFIG_ATM_CLIP=m +# CONFIG_ATM_CLIP_NO_ICMP is not set +CONFIG_ATM_LANE=m +CONFIG_ATM_MPOA=m +CONFIG_ATM_BR2684=m +# CONFIG_ATM_BR2684_IPFILTER is not set + +## +## file: net/batman-adv/Kconfig +## +CONFIG_BATMAN_ADV=m + +## +## file: net/bluetooth/Kconfig +## +CONFIG_BT=m +CONFIG_BT_L2CAP=y +CONFIG_BT_SCO=y + +## +## file: net/bluetooth/bnep/Kconfig +## +CONFIG_BT_BNEP=m +CONFIG_BT_BNEP_MC_FILTER=y +CONFIG_BT_BNEP_PROTO_FILTER=y + +## +## file: net/bluetooth/cmtp/Kconfig +## +CONFIG_BT_CMTP=m + +## +## file: net/bluetooth/hidp/Kconfig +## +CONFIG_BT_HIDP=m + +## +## file: net/bluetooth/rfcomm/Kconfig +## +CONFIG_BT_RFCOMM=m +CONFIG_BT_RFCOMM_TTY=y + +## +## file: net/bridge/Kconfig +## +CONFIG_BRIDGE=m +CONFIG_BRIDGE_IGMP_SNOOPING=y + +## +## file: net/bridge/netfilter/Kconfig +## +CONFIG_BRIDGE_NF_EBTABLES=m +CONFIG_BRIDGE_EBT_BROUTE=m +CONFIG_BRIDGE_EBT_T_FILTER=m +CONFIG_BRIDGE_EBT_T_NAT=m +CONFIG_BRIDGE_EBT_802_3=m +CONFIG_BRIDGE_EBT_AMONG=m +CONFIG_BRIDGE_EBT_ARP=m +CONFIG_BRIDGE_EBT_IP=m +CONFIG_BRIDGE_EBT_IP6=m +CONFIG_BRIDGE_EBT_LIMIT=m +CONFIG_BRIDGE_EBT_MARK=m +CONFIG_BRIDGE_EBT_PKTTYPE=m +CONFIG_BRIDGE_EBT_STP=m +CONFIG_BRIDGE_EBT_VLAN=m +CONFIG_BRIDGE_EBT_ARPREPLY=m +CONFIG_BRIDGE_EBT_DNAT=m +CONFIG_BRIDGE_EBT_MARK_T=m +CONFIG_BRIDGE_EBT_REDIRECT=m +CONFIG_BRIDGE_EBT_SNAT=m +CONFIG_BRIDGE_EBT_LOG=m +CONFIG_BRIDGE_EBT_ULOG=m +CONFIG_BRIDGE_EBT_NFLOG=m + +## +## file: net/caif/Kconfig +## +# CONFIG_CAIF is not set + +## +## file: net/can/Kconfig +## +CONFIG_CAN=m +CONFIG_CAN_RAW=m +CONFIG_CAN_BCM=m + +## +## file: net/ceph/Kconfig +## +CONFIG_CEPH_LIB=m +# CONFIG_CEPH_LIB_PRETTYDEBUG is not set + +## +## file: net/dcb/Kconfig +## +CONFIG_DCB=y + +## +## file: net/dccp/Kconfig +## +CONFIG_IP_DCCP=m +# CONFIG_IP_DCCP_DEBUG is not set +CONFIG_NET_DCCPPROBE=m + +## +## file: net/dccp/ccids/Kconfig +## +# CONFIG_IP_DCCP_CCID2_DEBUG is not set +CONFIG_IP_DCCP_CCID3=y +# CONFIG_IP_DCCP_CCID3_DEBUG is not set + +## +## file: net/decnet/Kconfig +## +# CONFIG_DECNET is not set + +## +## file: net/dsa/Kconfig +## +# CONFIG_NET_DSA is not set + +## +## file: net/econet/Kconfig +## +# CONFIG_ECONET is not set + +## +## file: net/ieee802154/Kconfig +## +CONFIG_IEEE802154=m + +## +## file: net/ipv4/Kconfig +## +CONFIG_IP_MULTICAST=y +CONFIG_IP_ADVANCED_ROUTER=y +CONFIG_IP_FIB_TRIE_STATS=y +CONFIG_IP_MULTIPLE_TABLES=y +CONFIG_IP_ROUTE_MULTIPATH=y +CONFIG_IP_ROUTE_VERBOSE=y +# CONFIG_IP_PNP is not set +CONFIG_NET_IPIP=m +CONFIG_NET_IPGRE_DEMUX=m +CONFIG_NET_IPGRE=m +CONFIG_NET_IPGRE_BROADCAST=y +CONFIG_IP_MROUTE=y +CONFIG_IP_MROUTE_MULTIPLE_TABLES=y +CONFIG_IP_PIMSM_V1=y +CONFIG_IP_PIMSM_V2=y +# CONFIG_ARPD is not set +CONFIG_SYN_COOKIES=y +CONFIG_INET_AH=m +CONFIG_INET_ESP=m +CONFIG_INET_IPCOMP=m +CONFIG_INET_XFRM_MODE_TRANSPORT=m +CONFIG_INET_XFRM_MODE_TUNNEL=m +CONFIG_INET_XFRM_MODE_BEET=m +CONFIG_INET_LRO=m +CONFIG_INET_DIAG=m +CONFIG_TCP_CONG_ADVANCED=y +CONFIG_TCP_CONG_BIC=m +CONFIG_TCP_CONG_CUBIC=y +CONFIG_TCP_CONG_WESTWOOD=m +CONFIG_TCP_CONG_HTCP=m +CONFIG_TCP_CONG_HSTCP=m +CONFIG_TCP_CONG_HYBLA=m +CONFIG_TCP_CONG_VEGAS=m +CONFIG_TCP_CONG_SCALABLE=m +CONFIG_TCP_CONG_LP=m +CONFIG_TCP_CONG_VENO=m +CONFIG_TCP_CONG_YEAH=m +CONFIG_TCP_CONG_ILLINOIS=m +## choice: Default TCP congestion control +# CONFIG_DEFAULT_BIC is not set +CONFIG_DEFAULT_CUBIC=y +# CONFIG_DEFAULT_HTCP is not set +# CONFIG_DEFAULT_VEGAS is not set +# CONFIG_DEFAULT_WESTWOOD is not set +# CONFIG_DEFAULT_RENO is not set +## end choice +CONFIG_TCP_MD5SIG=y + +## +## file: net/ipv4/netfilter/Kconfig +## +CONFIG_NF_CONNTRACK_IPV4=m +CONFIG_NF_CONNTRACK_PROC_COMPAT=y +CONFIG_IP_NF_QUEUE=m +CONFIG_IP_NF_IPTABLES=m +CONFIG_IP_NF_MATCH_AH=m +CONFIG_IP_NF_MATCH_ECN=m +CONFIG_IP_NF_MATCH_TTL=m +CONFIG_IP_NF_FILTER=m +CONFIG_IP_NF_TARGET_REJECT=m +CONFIG_IP_NF_TARGET_LOG=m +CONFIG_IP_NF_TARGET_ULOG=m +CONFIG_NF_NAT=m +CONFIG_IP_NF_TARGET_MASQUERADE=m +CONFIG_IP_NF_TARGET_NETMAP=m +CONFIG_IP_NF_TARGET_REDIRECT=m +CONFIG_NF_NAT_SNMP_BASIC=m +CONFIG_IP_NF_MANGLE=m +CONFIG_IP_NF_TARGET_CLUSTERIP=m +CONFIG_IP_NF_TARGET_ECN=m +CONFIG_IP_NF_TARGET_TTL=m +CONFIG_IP_NF_RAW=m +CONFIG_IP_NF_SECURITY=m +CONFIG_IP_NF_ARPTABLES=m +CONFIG_IP_NF_ARPFILTER=m +CONFIG_IP_NF_ARP_MANGLE=m + +## +## file: net/ipv6/Kconfig +## +CONFIG_IPV6=m +CONFIG_IPV6_PRIVACY=y +CONFIG_IPV6_ROUTER_PREF=y +CONFIG_IPV6_ROUTE_INFO=y +CONFIG_IPV6_OPTIMISTIC_DAD=y +CONFIG_INET6_AH=m +CONFIG_INET6_ESP=m +CONFIG_INET6_IPCOMP=m +CONFIG_IPV6_MIP6=y +CONFIG_INET6_XFRM_MODE_TRANSPORT=m +CONFIG_INET6_XFRM_MODE_TUNNEL=m +CONFIG_INET6_XFRM_MODE_BEET=m +CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m +CONFIG_IPV6_SIT=m +CONFIG_IPV6_SIT_6RD=y +CONFIG_IPV6_TUNNEL=m +CONFIG_IPV6_MULTIPLE_TABLES=y +CONFIG_IPV6_SUBTREES=y +CONFIG_IPV6_MROUTE=y +CONFIG_IPV6_MROUTE_MULTIPLE_TABLES=y +CONFIG_IPV6_PIMSM_V2=y + +## +## file: net/ipv6/netfilter/Kconfig +## +CONFIG_NF_CONNTRACK_IPV6=m +CONFIG_IP6_NF_QUEUE=m +CONFIG_IP6_NF_IPTABLES=m +CONFIG_IP6_NF_MATCH_AH=m +CONFIG_IP6_NF_MATCH_EUI64=m +CONFIG_IP6_NF_MATCH_FRAG=m +CONFIG_IP6_NF_MATCH_OPTS=m +CONFIG_IP6_NF_MATCH_HL=m +CONFIG_IP6_NF_MATCH_IPV6HEADER=m +CONFIG_IP6_NF_MATCH_MH=m +CONFIG_IP6_NF_MATCH_RT=m +CONFIG_IP6_NF_TARGET_HL=m +CONFIG_IP6_NF_TARGET_LOG=m +CONFIG_IP6_NF_FILTER=m +CONFIG_IP6_NF_TARGET_REJECT=m +CONFIG_IP6_NF_MANGLE=m +CONFIG_IP6_NF_RAW=m +CONFIG_IP6_NF_SECURITY=m + +## +## file: net/l2tp/Kconfig +## +CONFIG_L2TP=m +CONFIG_L2TP_DEBUGFS=m +CONFIG_L2TP_V3=y +CONFIG_L2TP_IP=m +CONFIG_L2TP_ETH=m + +## +## file: net/llc/Kconfig +## +CONFIG_LLC2=m + +## +## file: net/mac80211/Kconfig +## +CONFIG_MAC80211=m +CONFIG_MAC80211_RC_PID=y +CONFIG_MAC80211_RC_MINSTREL=y +## choice: Default rate control algorithm +CONFIG_MAC80211_RC_DEFAULT_PID=y +# CONFIG_MAC80211_RC_DEFAULT_MINSTREL is not set +## end choice +CONFIG_MAC80211_MESH=y +CONFIG_MAC80211_LEDS=y +# CONFIG_MAC80211_DEBUGFS is not set +# CONFIG_MAC80211_DEBUG_MENU is not set + +## +## file: net/netfilter/Kconfig +## +CONFIG_NETFILTER_NETLINK_QUEUE=m +CONFIG_NETFILTER_NETLINK_LOG=m +CONFIG_NF_CONNTRACK=m +CONFIG_NF_CONNTRACK_MARK=y +CONFIG_NF_CONNTRACK_SECMARK=y +CONFIG_NF_CONNTRACK_ZONES=y +CONFIG_NF_CONNTRACK_EVENTS=y +CONFIG_NF_CONNTRACK_TIMESTAMP=y +CONFIG_NF_CT_PROTO_DCCP=m +CONFIG_NF_CT_PROTO_SCTP=m +CONFIG_NF_CT_PROTO_UDPLITE=m +CONFIG_NF_CONNTRACK_AMANDA=m +CONFIG_NF_CONNTRACK_FTP=m +CONFIG_NF_CONNTRACK_H323=m +CONFIG_NF_CONNTRACK_IRC=m +CONFIG_NF_CONNTRACK_NETBIOS_NS=m +CONFIG_NF_CONNTRACK_SNMP=m +CONFIG_NF_CONNTRACK_PPTP=m +CONFIG_NF_CONNTRACK_SANE=m +CONFIG_NF_CONNTRACK_SIP=m +CONFIG_NF_CONNTRACK_TFTP=m +CONFIG_NF_CT_NETLINK=m +CONFIG_NETFILTER_TPROXY=m +CONFIG_NETFILTER_XTABLES=m +CONFIG_NETFILTER_XT_SET=m +CONFIG_NETFILTER_XT_TARGET_AUDIT=m +CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m +CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m +CONFIG_NETFILTER_XT_TARGET_CONNMARK=m +CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=m +CONFIG_NETFILTER_XT_TARGET_CT=m +CONFIG_NETFILTER_XT_TARGET_DSCP=m +CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m +CONFIG_NETFILTER_XT_TARGET_LED=m +CONFIG_NETFILTER_XT_TARGET_MARK=m +CONFIG_NETFILTER_XT_TARGET_NFLOG=m +CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m +CONFIG_NETFILTER_XT_TARGET_NOTRACK=m +CONFIG_NETFILTER_XT_TARGET_RATEEST=m +CONFIG_NETFILTER_XT_TARGET_TEE=m +CONFIG_NETFILTER_XT_TARGET_TPROXY=m +CONFIG_NETFILTER_XT_TARGET_TRACE=m +CONFIG_NETFILTER_XT_TARGET_SECMARK=m +CONFIG_NETFILTER_XT_TARGET_TCPMSS=m +CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m +CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m +CONFIG_NETFILTER_XT_MATCH_CLUSTER=m +CONFIG_NETFILTER_XT_MATCH_COMMENT=m +CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m +CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m +CONFIG_NETFILTER_XT_MATCH_CONNMARK=m +CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m +CONFIG_NETFILTER_XT_MATCH_CPU=m +CONFIG_NETFILTER_XT_MATCH_DCCP=m +CONFIG_NETFILTER_XT_MATCH_DEVGROUP=m +CONFIG_NETFILTER_XT_MATCH_DSCP=m +CONFIG_NETFILTER_XT_MATCH_ESP=m +CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m +CONFIG_NETFILTER_XT_MATCH_HELPER=m +CONFIG_NETFILTER_XT_MATCH_IPRANGE=m +CONFIG_NETFILTER_XT_MATCH_IPVS=m +CONFIG_NETFILTER_XT_MATCH_LENGTH=m +CONFIG_NETFILTER_XT_MATCH_LIMIT=m +CONFIG_NETFILTER_XT_MATCH_MAC=m +CONFIG_NETFILTER_XT_MATCH_MARK=m +CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m +CONFIG_NETFILTER_XT_MATCH_OSF=m +CONFIG_NETFILTER_XT_MATCH_OWNER=m +CONFIG_NETFILTER_XT_MATCH_POLICY=m +CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m +CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m +CONFIG_NETFILTER_XT_MATCH_QUOTA=m +CONFIG_NETFILTER_XT_MATCH_RATEEST=m +CONFIG_NETFILTER_XT_MATCH_REALM=m +CONFIG_NETFILTER_XT_MATCH_RECENT=m +CONFIG_NETFILTER_XT_MATCH_SCTP=m +CONFIG_NETFILTER_XT_MATCH_SOCKET=m +CONFIG_NETFILTER_XT_MATCH_STATE=m +CONFIG_NETFILTER_XT_MATCH_STATISTIC=m +CONFIG_NETFILTER_XT_MATCH_STRING=m +CONFIG_NETFILTER_XT_MATCH_TCPMSS=m +CONFIG_NETFILTER_XT_MATCH_TIME=m +CONFIG_NETFILTER_XT_MATCH_U32=m + +## +## file: net/netfilter/ipset/Kconfig +## +CONFIG_IP_SET=m +CONFIG_IP_SET_MAX=256 +CONFIG_IP_SET_BITMAP_IP=m +CONFIG_IP_SET_BITMAP_IPMAC=m +CONFIG_IP_SET_BITMAP_PORT=m +CONFIG_IP_SET_HASH_IP=m +CONFIG_IP_SET_HASH_IPPORT=m +CONFIG_IP_SET_HASH_IPPORTIP=m +CONFIG_IP_SET_HASH_IPPORTNET=m +CONFIG_IP_SET_HASH_NET=m +CONFIG_IP_SET_HASH_NETPORT=m +CONFIG_IP_SET_LIST_SET=m + +## +## file: net/netfilter/ipvs/Kconfig +## +CONFIG_IP_VS=m +CONFIG_IP_VS_IPV6=y +# CONFIG_IP_VS_DEBUG is not set +CONFIG_IP_VS_TAB_BITS=12 +CONFIG_IP_VS_PROTO_TCP=y +CONFIG_IP_VS_PROTO_UDP=y +CONFIG_IP_VS_PROTO_ESP=y +CONFIG_IP_VS_PROTO_AH=y +CONFIG_IP_VS_PROTO_SCTP=y +CONFIG_IP_VS_RR=m +CONFIG_IP_VS_WRR=m +CONFIG_IP_VS_LC=m +CONFIG_IP_VS_WLC=m +CONFIG_IP_VS_LBLC=m +CONFIG_IP_VS_LBLCR=m +CONFIG_IP_VS_DH=m +CONFIG_IP_VS_SH=m +CONFIG_IP_VS_SED=m +CONFIG_IP_VS_NQ=m +CONFIG_IP_VS_FTP=m +CONFIG_IP_VS_PE_SIP=m + +## +## file: net/netlabel/Kconfig +## +# CONFIG_NETLABEL is not set + +## +## file: net/packet/Kconfig +## +CONFIG_PACKET=y + +## +## file: net/phonet/Kconfig +## +CONFIG_PHONET=m + +## +## file: net/rds/Kconfig +## +CONFIG_RDS=m +CONFIG_RDS_RDMA=m +CONFIG_RDS_TCP=m +# CONFIG_RDS_DEBUG is not set + +## +## file: net/rfkill/Kconfig +## +CONFIG_RFKILL=m +CONFIG_RFKILL_INPUT=y +# CONFIG_RFKILL_REGULATOR is not set + +## +## file: net/rxrpc/Kconfig +## +CONFIG_AF_RXRPC=m +# CONFIG_AF_RXRPC_DEBUG is not set +CONFIG_RXKAD=m + +## +## file: net/sched/Kconfig +## +CONFIG_NET_SCHED=y +CONFIG_NET_SCH_CBQ=m +CONFIG_NET_SCH_HTB=m +CONFIG_NET_SCH_HFSC=m +CONFIG_NET_SCH_ATM=m +CONFIG_NET_SCH_PRIO=m +CONFIG_NET_SCH_MULTIQ=m +CONFIG_NET_SCH_RED=m +CONFIG_NET_SCH_SFB=m +CONFIG_NET_SCH_SFQ=m +CONFIG_NET_SCH_TEQL=m +CONFIG_NET_SCH_TBF=m +CONFIG_NET_SCH_GRED=m +CONFIG_NET_SCH_DSMARK=m +CONFIG_NET_SCH_NETEM=m +CONFIG_NET_SCH_DRR=m +CONFIG_NET_SCH_MQPRIO=m +CONFIG_NET_SCH_CHOKE=m +CONFIG_NET_SCH_QFQ=m +CONFIG_NET_SCH_INGRESS=m +CONFIG_NET_CLS_BASIC=m +CONFIG_NET_CLS_TCINDEX=m +CONFIG_NET_CLS_ROUTE4=m +CONFIG_NET_CLS_FW=m +CONFIG_NET_CLS_U32=m +CONFIG_CLS_U32_PERF=y +CONFIG_CLS_U32_MARK=y +CONFIG_NET_CLS_RSVP=m +CONFIG_NET_CLS_RSVP6=m +CONFIG_NET_CLS_FLOW=m +CONFIG_NET_CLS_CGROUP=y +CONFIG_NET_EMATCH=y +CONFIG_NET_EMATCH_STACK=32 +CONFIG_NET_EMATCH_CMP=m +CONFIG_NET_EMATCH_NBYTE=m +CONFIG_NET_EMATCH_U32=m +CONFIG_NET_EMATCH_META=m +CONFIG_NET_EMATCH_TEXT=m +CONFIG_NET_CLS_ACT=y +CONFIG_NET_ACT_POLICE=m +CONFIG_NET_ACT_GACT=m +CONFIG_GACT_PROB=y +CONFIG_NET_ACT_MIRRED=m +CONFIG_NET_ACT_IPT=m +CONFIG_NET_ACT_NAT=m +CONFIG_NET_ACT_PEDIT=m +CONFIG_NET_ACT_SIMP=m +CONFIG_NET_ACT_SKBEDIT=m +CONFIG_NET_ACT_CSUM=m +CONFIG_NET_CLS_IND=y + +## +## file: net/sctp/Kconfig +## +CONFIG_IP_SCTP=m +CONFIG_NET_SCTPPROBE=m +# CONFIG_SCTP_DBG_MSG is not set +# CONFIG_SCTP_DBG_OBJCNT is not set +## choice: SCTP: Cookie HMAC Algorithm +# CONFIG_SCTP_HMAC_NONE is not set +# CONFIG_SCTP_HMAC_SHA1 is not set +CONFIG_SCTP_HMAC_MD5=y +## end choice + +## +## file: net/sunrpc/Kconfig +## +CONFIG_RPCSEC_GSS_KRB5=m + +## +## file: net/tipc/Kconfig +## +CONFIG_TIPC=m +CONFIG_TIPC_ADVANCED=y +CONFIG_TIPC_PORTS=8191 +CONFIG_TIPC_LOG=0 +# CONFIG_TIPC_DEBUG is not set + +## +## file: net/unix/Kconfig +## +CONFIG_UNIX=y + +## +## file: net/wimax/Kconfig +## +CONFIG_WIMAX=m +CONFIG_WIMAX_DEBUG_LEVEL=8 + +## +## file: net/wireless/Kconfig +## +CONFIG_CFG80211=m +# CONFIG_NL80211_TESTMODE is not set +# CONFIG_CFG80211_DEVELOPER_WARNINGS is not set +# CONFIG_CFG80211_REG_DEBUG is not set +CONFIG_CFG80211_DEFAULT_PS=y +# CONFIG_CFG80211_DEBUGFS is not set +CONFIG_CFG80211_WEXT=y +# CONFIG_WIRELESS_EXT_SYSFS is not set +CONFIG_LIB80211=m +# CONFIG_LIB80211_DEBUG is not set + +## +## file: net/x25/Kconfig +## +# CONFIG_X25 is not set + +## +## file: net/xfrm/Kconfig +## +CONFIG_XFRM_USER=m +CONFIG_XFRM_SUB_POLICY=y +CONFIG_XFRM_MIGRATE=y +# CONFIG_XFRM_STATISTICS is not set +CONFIG_NET_KEY=m +CONFIG_NET_KEY_MIGRATE=y + +## +## file: samples/Kconfig +## +# CONFIG_SAMPLES is not set + +## +## file: security/Kconfig +## +CONFIG_KEYS=y +CONFIG_KEYS_DEBUG_PROC_KEYS=y +CONFIG_SECURITY=y +CONFIG_SECURITY_NETWORK=y +CONFIG_SECURITY_NETWORK_XFRM=y +# CONFIG_SECURITY_PATH is not set +# CONFIG_INTEL_TXT is not set +CONFIG_LSM_MMAP_MIN_ADDR=32768 +## choice: Default security module +CONFIG_DEFAULT_SECURITY_SELINUX=y +# CONFIG_DEFAULT_SECURITY_TOMOYO is not set +# CONFIG_DEFAULT_SECURITY_DAC is not set +## end choice + +## +## file: security/apparmor/Kconfig +## +# CONFIG_SECURITY_APPARMOR is not set + +## +## file: security/integrity/ima/Kconfig +## +# CONFIG_IMA is not set + +## +## file: security/selinux/Kconfig +## +CONFIG_SECURITY_SELINUX=y +CONFIG_SECURITY_SELINUX_BOOTPARAM=y +CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=0 +CONFIG_SECURITY_SELINUX_DISABLE=y +CONFIG_SECURITY_SELINUX_DEVELOP=y +CONFIG_SECURITY_SELINUX_AVC_STATS=y +CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=1 +# CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX is not set + +## +## file: security/tomoyo/Kconfig +## +CONFIG_SECURITY_TOMOYO=y + +## +## file: sound/Kconfig +## +CONFIG_SOUND=m +# CONFIG_SOUND_OSS_CORE_PRECLAIM is not set +CONFIG_SND=m +# CONFIG_SOUND_PRIME is not set + +## +## file: sound/core/Kconfig +## +CONFIG_SND_SEQUENCER=m +CONFIG_SND_SEQ_DUMMY=m +CONFIG_SND_MIXER_OSS=m +CONFIG_SND_PCM_OSS=m +CONFIG_SND_PCM_OSS_PLUGINS=y +# CONFIG_SND_SEQUENCER_OSS is not set +CONFIG_SND_HRTIMER=m +CONFIG_SND_SEQ_HRTIMER_DEFAULT=y +# CONFIG_SND_RTCTIMER is not set +CONFIG_SND_DYNAMIC_MINORS=y +CONFIG_SND_SUPPORT_OLD_API=y +CONFIG_SND_VERBOSE_PROCFS=y +# CONFIG_SND_VERBOSE_PRINTK is not set +# CONFIG_SND_DEBUG is not set + +## +## file: sound/drivers/Kconfig +## +CONFIG_SND_DRIVERS=y +CONFIG_SND_PCSP=m +CONFIG_SND_ALOOP=m +CONFIG_SND_MTS64=m +CONFIG_SND_PORTMAN2X4=m +CONFIG_SND_AC97_POWER_SAVE=y +CONFIG_SND_AC97_POWER_SAVE_DEFAULT=0 + +## +## file: sound/firewire/Kconfig +## +CONFIG_SND_FIREWIRE=y +CONFIG_SND_FIREWIRE_SPEAKERS=m +CONFIG_SND_ISIGHT=m + +## +## file: sound/pci/Kconfig +## +CONFIG_SND_PCI=y +CONFIG_SND_AD1889=m +CONFIG_SND_ALS300=m +CONFIG_SND_ASIHPI=m +# CONFIG_SND_AW2 is not set +CONFIG_SND_OXYGEN=m +CONFIG_SND_CS5530=m +CONFIG_SND_CS5535AUDIO=m +CONFIG_SND_CTXFI=m +CONFIG_SND_DARLA20=m +CONFIG_SND_GINA20=m +CONFIG_SND_LAYLA20=m +CONFIG_SND_DARLA24=m +CONFIG_SND_GINA24=m +CONFIG_SND_LAYLA24=m +CONFIG_SND_MONA=m +CONFIG_SND_MIA=m +CONFIG_SND_ECHO3G=m +CONFIG_SND_INDIGO=m +CONFIG_SND_INDIGOIO=m +CONFIG_SND_INDIGODJ=m +CONFIG_SND_INDIGOIOX=m +CONFIG_SND_INDIGODJX=m +CONFIG_SND_ES1968_INPUT=y +CONFIG_SND_ES1968_RADIO=y +CONFIG_SND_HDSPM=m +CONFIG_SND_LOLA=m +CONFIG_SND_LX6464ES=m +CONFIG_SND_MAESTRO3_INPUT=y +CONFIG_SND_PCXHR=m +CONFIG_SND_RIPTIDE=m +CONFIG_SND_VIRTUOSO=m + +## +## file: sound/pci/hda/Kconfig +## +CONFIG_SND_HDA_HWDEP=y +CONFIG_SND_HDA_RECONFIG=y +CONFIG_SND_HDA_INPUT_BEEP=y +CONFIG_SND_HDA_INPUT_BEEP_MODE=1 +CONFIG_SND_HDA_INPUT_JACK=y +CONFIG_SND_HDA_PATCH_LOADER=y +CONFIG_SND_HDA_CODEC_REALTEK=y +CONFIG_SND_HDA_CODEC_ANALOG=y +CONFIG_SND_HDA_CODEC_SIGMATEL=y +CONFIG_SND_HDA_CODEC_VIA=y +CONFIG_SND_HDA_CODEC_HDMI=y +CONFIG_SND_HDA_CODEC_CIRRUS=y +CONFIG_SND_HDA_CODEC_CONEXANT=y +CONFIG_SND_HDA_CODEC_CA0110=y +CONFIG_SND_HDA_CODEC_CMEDIA=y +CONFIG_SND_HDA_CODEC_SI3054=y +CONFIG_SND_HDA_GENERIC=y +CONFIG_SND_HDA_POWER_SAVE=y +CONFIG_SND_HDA_POWER_SAVE_DEFAULT=0 + +## +## file: sound/pcmcia/Kconfig +## +CONFIG_SND_PCMCIA=y +CONFIG_SND_VXPOCKET=m +CONFIG_SND_PDAUDIOCF=m + +## +## file: sound/soc/Kconfig +## +# CONFIG_SND_SOC is not set + +## +## file: sound/spi/Kconfig +## +CONFIG_SND_SPI=y + +## +## file: sound/usb/Kconfig +## +CONFIG_SND_USB=y +CONFIG_SND_USB_AUDIO=m +CONFIG_SND_USB_UA101=m +CONFIG_SND_USB_USX2Y=m +CONFIG_SND_USB_CAIAQ=m +CONFIG_SND_USB_CAIAQ_INPUT=y +CONFIG_SND_USB_US122L=m +CONFIG_SND_USB_6FIRE=m + +## +## file: usr/Kconfig +## +CONFIG_INITRAMFS_SOURCE="" + +## +## file: unknown +## +# CONFIG_AUFS_BRANCH_MAX_1023 is not set +CONFIG_AUFS_BRANCH_MAX_127=y +# CONFIG_AUFS_BRANCH_MAX_32767 is not set +# CONFIG_AUFS_BRANCH_MAX_511 is not set +# CONFIG_AUFS_BR_FUSE is not set +# CONFIG_AUFS_BR_RAMFS is not set +# CONFIG_AUFS_DEBUG is not set +# CONFIG_AUFS_EXPORT is not set +CONFIG_AUFS_FS=m +# CONFIG_AUFS_HINOTIFY is not set +# CONFIG_AUFS_HNOTIFY is not set +# CONFIG_AUFS_RDU is not set +# CONFIG_AUFS_SHWH is not set +# CONFIG_AUFS_SP_IATTR is not set +CONFIG_CGROUP_MEM_RES_CTLR_DISABLED=y +CONFIG_CGROUP_NS=y +CONFIG_MAGIC_SYSRQ_DEFAULT_MASK=0x01b6 + --- linux-2.6-3.0.0~rc6.orig/debian/config/s390/config.s390x +++ linux-2.6-3.0.0~rc6/debian/config/s390/config.s390x @@ -0,0 +1,16 @@ +## +## file: arch/s390/Kconfig +## +CONFIG_64BIT=y +## choice: Processor type +# CONFIG_MARCH_G5 is not set +CONFIG_MARCH_Z900=y +# CONFIG_MARCH_Z990 is not set +# CONFIG_MARCH_Z9_109 is not set +# CONFIG_MARCH_Z10 is not set +## end choice +## choice: IPL method generated into head.S +# CONFIG_IPL_TAPE is not set +CONFIG_IPL_VM=y +## end choice + --- linux-2.6-3.0.0~rc6.orig/debian/config/s390/config.s390-tape +++ linux-2.6-3.0.0~rc6/debian/config/s390/config.s390-tape @@ -0,0 +1,15 @@ +## +## file: arch/s390/Kconfig +## +# CONFIG_64BIT is not set +## choice: Processor type +CONFIG_MARCH_G5=y +# CONFIG_MARCH_Z900 is not set +# CONFIG_MARCH_Z990 is not set +# CONFIG_MARCH_Z9_109 is not set +## end choice +## choice: IPL method generated into head.S +CONFIG_IPL_TAPE=y +# CONFIG_IPL_VM is not set +## end choice + --- linux-2.6-3.0.0~rc6.orig/debian/config/s390/defines +++ linux-2.6-3.0.0~rc6/debian/config/s390/defines @@ -0,0 +1,46 @@ +[base] +flavours: + s390x + s390x-tape +kernel-arch: s390 + +[description] +part-long-reader: This kernel has support to IPL (boot) from a VM reader or DASD device. +part-long-tape: This kernel has support to IPL (boot) from a tape. +part-short-tape: IPL from tape + +[image] +bootloaders: s390-tools + +[s390_description] +hardware: IBM S/390 +parts: reader + +[s390-tape_base] +modules: false + +[s390-tape_description] +hardware: IBM S/390 +parts: tape + +[s390-tape_image] +initramfs: false +override-localversion: s390 +type: plain-s390-tape + +[s390x_description] +hardware: IBM zSeries +parts: reader + +[s390x-tape_base] +modules: false + +[s390x-tape_description] +hardware: IBM zSeries +parts: tape + +[s390x-tape_image] +initramfs: false +override-localversion: s390x +type: plain-s390-tape + --- linux-2.6-3.0.0~rc6.orig/debian/config/s390/config +++ linux-2.6-3.0.0~rc6/debian/config/s390/config @@ -0,0 +1,197 @@ +## +## file: arch/s390/Kconfig +## +CONFIG_SMP=y +CONFIG_NR_CPUS=32 +CONFIG_HOTPLUG_CPU=y +CONFIG_MATHEMU=y +CONFIG_COMPAT=y +CONFIG_PACK_STACK=y +# CONFIG_SMALL_STACK is not set +# CONFIG_CHECK_STACK is not set +CONFIG_QDIO=y +CONFIG_IPL=y +CONFIG_PFAULT=y +# CONFIG_SHARED_KERNEL is not set +CONFIG_CMM=y +CONFIG_CMM_IUCV=y +CONFIG_APPLDATA_BASE=y +CONFIG_APPLDATA_MEM=m +CONFIG_APPLDATA_OS=m +CONFIG_APPLDATA_NET_SUM=m +CONFIG_S390_HYPFS_FS=y +CONFIG_KEXEC=y +# CONFIG_ZFCPDUMP is not set +CONFIG_S390_GUEST=y +CONFIG_SECCOMP=y + +## +## file: arch/s390/kvm/Kconfig +## +CONFIG_VIRTUALIZATION=y +CONFIG_KVM=m + +## +## file: drivers/block/Kconfig +## +CONFIG_BLK_DEV_RAM_SIZE=24576 +# CONFIG_CDROM_PKTCDVD is not set + +## +## file: drivers/crypto/Kconfig +## +CONFIG_ZCRYPT=m +# CONFIG_ZCRYPT_MONOLITHIC is not set +CONFIG_CRYPTO_SHA1_S390=m +CONFIG_CRYPTO_SHA256_S390=m +CONFIG_CRYPTO_SHA512_S390=m +CONFIG_CRYPTO_DES_S390=m +CONFIG_CRYPTO_AES_S390=m +CONFIG_S390_PRNG=m + +## +## file: drivers/memstick/Kconfig +## +# CONFIG_MEMSTICK is not set + +## +## file: drivers/net/Kconfig +## +# CONFIG_PPP is not set +# CONFIG_SLIP is not set + +## +## file: drivers/net/appletalk/Kconfig +## +# CONFIG_ATALK is not set + +## +## file: drivers/net/wan/Kconfig +## +# CONFIG_WAN is not set + +## +## file: drivers/s390/block/Kconfig +## +CONFIG_BLK_DEV_XPRAM=m +CONFIG_DCSSBLK=m +CONFIG_DASD=m +# CONFIG_DASD_PROFILE is not set +CONFIG_DASD_ECKD=m +CONFIG_DASD_FBA=m +CONFIG_DASD_DIAG=m +# CONFIG_DASD_EER is not set + +## +## file: drivers/s390/char/Kconfig +## +CONFIG_TN3270=y +CONFIG_TN3270_TTY=y +CONFIG_TN3270_FS=m +CONFIG_TN3270_CONSOLE=y +CONFIG_TN3215=y +CONFIG_TN3215_CONSOLE=y +CONFIG_SCLP_TTY=y +CONFIG_SCLP_CONSOLE=y +CONFIG_SCLP_VT220_TTY=y +CONFIG_SCLP_VT220_CONSOLE=y +CONFIG_SCLP_CPI=m +CONFIG_S390_TAPE=m +CONFIG_S390_TAPE_34XX=m +CONFIG_S390_TAPE_3590=m +CONFIG_VMLOGRDR=m +CONFIG_VMCP=m +CONFIG_MONREADER=m +CONFIG_MONWRITER=m +CONFIG_S390_VMUR=m + +## +## file: drivers/s390/net/Kconfig +## +CONFIG_LCS=m +CONFIG_CTCM=m +CONFIG_NETIUCV=m +CONFIG_SMSGIUCV=m +CONFIG_CLAW=m +CONFIG_QETH=m +CONFIG_QETH_L2=m +CONFIG_QETH_L3=m + +## +## file: drivers/scsi/Kconfig +## +CONFIG_ZFCP=m + +## +## file: drivers/tty/hvc/Kconfig +## +CONFIG_HVC_IUCV=y + +## +## file: drivers/watchdog/Kconfig +## +CONFIG_ZVM_WATCHDOG=m + +## +## file: fs/partitions/Kconfig +## +CONFIG_IBM_PARTITION=y +CONFIG_BSD_DISKLABEL=y + +## +## file: mm/Kconfig +## +## choice: Memory model +# CONFIG_FLATMEM_MANUAL is not set +# CONFIG_DISCONTIGMEM_MANUAL is not set +CONFIG_SPARSEMEM_MANUAL=y +## end choice + +## +## file: net/atm/Kconfig +## +# CONFIG_ATM is not set + +## +## file: net/decnet/Kconfig +## +# CONFIG_DECNET is not set + +## +## file: net/ipv6/Kconfig +## +CONFIG_IPV6=y + +## +## file: net/ipx/Kconfig +## +# CONFIG_IPX is not set + +## +## file: net/iucv/Kconfig +## +CONFIG_IUCV=y +CONFIG_AFIUCV=m + +## +## file: net/lapb/Kconfig +## +# CONFIG_LAPB is not set + +## +## file: net/llc/Kconfig +## +# CONFIG_LLC2 is not set + +## +## file: net/wanrouter/Kconfig +## +# CONFIG_WAN_ROUTER is not set + +## +## file: unknown +## +CONFIG_S390_EXEC_PROTECT=y +CONFIG_S390_TAPE_BLOCK=y +# CONFIG_WARN_STACK is not set + --- linux-2.6-3.0.0~rc6.orig/debian/config/s390/config.s390 +++ linux-2.6-3.0.0~rc6/debian/config/s390/config.s390 @@ -0,0 +1,21 @@ +## +## file: arch/s390/Kconfig +## +# CONFIG_64BIT is not set +## choice: Processor type +CONFIG_MARCH_G5=y +# CONFIG_MARCH_Z900 is not set +# CONFIG_MARCH_Z990 is not set +# CONFIG_MARCH_Z9_109 is not set +## end choice +## choice: IPL method generated into head.S +# CONFIG_IPL_TAPE is not set +CONFIG_IPL_VM=y +## end choice + +## +## file: fs/btrfs/Kconfig +## +#. Needs __ucmpdi2 +# CONFIG_BTRFS_FS is not set + --- linux-2.6-3.0.0~rc6.orig/debian/config/s390/config.s390x-tape +++ linux-2.6-3.0.0~rc6/debian/config/s390/config.s390x-tape @@ -0,0 +1,16 @@ +## +## file: arch/s390/Kconfig +## +CONFIG_64BIT=y +## choice: Processor type +# CONFIG_MARCH_G5 is not set +CONFIG_MARCH_Z900=y +# CONFIG_MARCH_Z990 is not set +# CONFIG_MARCH_Z9_109 is not set +# CONFIG_MARCH_Z10 is not set +## end choice +## choice: IPL method generated into head.S +CONFIG_IPL_TAPE=y +# CONFIG_IPL_VM is not set +## end choice + --- linux-2.6-3.0.0~rc6.orig/debian/config/armhf/defines +++ linux-2.6-3.0.0~rc6/debian/config/armhf/defines @@ -0,0 +1,17 @@ +[base] +flavours: + mx5 +kernel-arch: arm + +[image] +suggests: fdutils +configs: + armel/config + armhf/config + +[mx5_build] +image-file: arch/arm/boot/zImage + +[mx5_description] +hardware: Freescale MXC/iMX-based +hardware-long: Support for Freescale MXC/iMX-based family of processors --- linux-2.6-3.0.0~rc6.orig/debian/config/armhf/config +++ linux-2.6-3.0.0~rc6/debian/config/armhf/config @@ -0,0 +1,34 @@ +## +## file: arch/arm/Kconfig +## +CONFIG_KEXEC=y +CONFIG_ATAGS_PROC=y +#. Enable floating point unit +CONFIG_VFP=y + +## +## file: drivers/input/mouse/Kconfig +## +CONFIG_MOUSE_PS2_LOGIPS2PP=y +CONFIG_MOUSE_PS2_SYNAPTICS=y +CONFIG_MOUSE_PS2_TRACKPOINT=y + +## +## file: drivers/net/hamradio/Kconfig +## +# CONFIG_BPQETHER is not set +# CONFIG_BAYCOM_SER_FDX is not set +# CONFIG_BAYCOM_SER_HDX is not set +# CONFIG_BAYCOM_PAR is not set +# CONFIG_BAYCOM_EPP is not set +# CONFIG_YAM is not set + +## +## file: init/Kconfig +## +## choice: Kernel compression mode +CONFIG_KERNEL_GZIP=y +# CONFIG_KERNEL_BZIP2 is not set +# CONFIG_KERNEL_LZMA is not set +## end choice + --- linux-2.6-3.0.0~rc6.orig/debian/config/armhf/config.mx5 +++ linux-2.6-3.0.0~rc6/debian/config/armhf/config.mx5 @@ -0,0 +1,162 @@ +## +## file: arch/arm/Kconfig +## +## choice: ARM system type +CONFIG_ARCH_MXC=y +## end choice +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +#. cpufreq driver for i.MX CPU +CONFIG_CPU_FREQ_IMX=m +#. Enable NEON SIMD support +CONFIG_NEON=y + +## +## file: arch/arm/mach-mx5/Kconfig +## +CONFIG_MACH_MX51_EFIKAMX=y + +## +## file: arch/arm/plat-mxc/Kconfig +## +## choice: Freescale CPU family: +#. enable MX5, otherwise it defaults to MX3 and ignores MACH_MX51_EFIKAMX +CONFIG_ARCH_MX5=y +## end choice +#. Enable PWM driver +CONFIG_MXC_PWM=y + +## +## file: drivers/dma/Kconfig +## +CONFIG_DMADEVICES=y +CONFIG_IMX_SDMA=y +# CONFIG_NET_DMA is not set +# CONFIG_ASYNC_TX_DMA is not set + +## +## file: drivers/gpio/Kconfig +## +CONFIG_GPIOLIB=y +CONFIG_GPIO_SYSFS=y + +## +## file: drivers/hid/usbhid/Kconfig +## +CONFIG_USB_HID=y + +## +## file: drivers/i2c/busses/Kconfig +## +CONFIG_I2C_IMX=y + +## +## file: drivers/leds/Kconfig +## +CONFIG_LEDS_GPIO=y +CONFIG_LEDS_GPIO_PLATFORM=y +CONFIG_LEDS_TRIGGER_GPIO=y + +## +## file: drivers/mfd/Kconfig +## +CONFIG_MFD_MC13XXX=y + +## +## file: drivers/mmc/Kconfig +## +CONFIG_MMC=m + +## +## file: drivers/mmc/card/Kconfig +## +CONFIG_MMC_BLOCK=y + +## +## file: drivers/mmc/host/Kconfig +## +CONFIG_MMC_SDHCI_ESDHC_IMX=y +CONFIG_MMC_MXC=y + +## +## file: drivers/mtd/Kconfig +## +#. Efika has SPI NOR MTD device +CONFIG_MTD=m + +## +## file: drivers/net/wireless/mwifiex/Kconfig +## +CONFIG_MWIFIEX=m +CONFIG_MWIFIEX_SDIO=m + +## +## file: drivers/power/Kconfig +## +CONFIG_POWER_SUPPLY=y + +## +## file: drivers/regulator/Kconfig +## +#. Provide dummy if lookup fails +CONFIG_REGULATOR_DUMMY=y +#. It is not set at top level +CONFIG_REGULATOR_VIRTUAL_CONSUMER=y +#. Included as module, should not be regulator stuff included as built-in? +CONFIG_REGULATOR_USERSPACE_CONSUMER=y +CONFIG_REGULATOR_MC13892=y + +## +## file: drivers/rtc/Kconfig +## +CONFIG_RTC_INTF_DEV_UIE_EMUL=y +CONFIG_RTC_DRV_MC13XXX=y + +## +## file: drivers/spi/Kconfig +## +CONFIG_SPI_GPIO=y +CONFIG_SPI_IMX=y + +## +## file: drivers/tty/serial/Kconfig +## +CONFIG_SERIAL_IMX=y +CONFIG_SERIAL_IMX_CONSOLE=y + +## +## file: drivers/usb/Kconfig +## +CONFIG_USB=y + +## +## file: drivers/usb/host/Kconfig +## +CONFIG_USB_EHCI_HCD=y +CONFIG_USB_EHCI_MXC=y + +## +## file: drivers/usb/otg/Kconfig +## +CONFIG_USB_ULPI=y + +## +## file: drivers/watchdog/Kconfig +## +CONFIG_IMX2_WDT=y + +## +## file: sound/soc/Kconfig +## +CONFIG_SND_SOC=m + +## +## file: sound/soc/imx/Kconfig +## +CONFIG_SND_IMX_SOC=m + +## +## file: unknown +## +CONFIG_SND_SOC_IMX_SGTL5000=m + --- linux-2.6-3.0.0~rc6.orig/debian/config/ppc64/defines +++ linux-2.6-3.0.0~rc6/debian/config/ppc64/defines @@ -0,0 +1,14 @@ +[base] +flavours: + powerpc64 +kernel-arch: powerpc + +[image] +configs: powerpc/config +suggests: mkvmlinuz + +[powerpc64_description] +hardware: 64-bit PowerPC + +[powerpc64_image] +configs: powerpc/config.powerpc64 --- linux-2.6-3.0.0~rc6.orig/debian/config/alpha/config.alpha-smp +++ linux-2.6-3.0.0~rc6/debian/config/alpha/config.alpha-smp @@ -0,0 +1,16 @@ +## +## file: arch/alpha/Kconfig +## +CONFIG_SMP=y +CONFIG_NR_CPUS=64 + +## +## file: arch/alpha/Kconfig.debug +## +# CONFIG_ALPHA_LEGACY_START_ADDRESS is not set + +## +## file: drivers/scsi/Kconfig +## +CONFIG_SCSI=y + --- linux-2.6-3.0.0~rc6.orig/debian/config/alpha/config.alpha-generic +++ linux-2.6-3.0.0~rc6/debian/config/alpha/config.alpha-generic @@ -0,0 +1,10 @@ +## +## file: arch/alpha/Kconfig +## +# CONFIG_SMP is not set + +## +## file: arch/alpha/Kconfig.debug +## +# CONFIG_ALPHA_LEGACY_START_ADDRESS is not set + --- linux-2.6-3.0.0~rc6.orig/debian/config/alpha/config.alpha-legacy +++ linux-2.6-3.0.0~rc6/debian/config/alpha/config.alpha-legacy @@ -0,0 +1,10 @@ +## +## file: arch/alpha/Kconfig +## +# CONFIG_SMP is not set + +## +## file: arch/alpha/Kconfig.debug +## +CONFIG_ALPHA_LEGACY_START_ADDRESS=y + --- linux-2.6-3.0.0~rc6.orig/debian/config/alpha/defines +++ linux-2.6-3.0.0~rc6/debian/config/alpha/defines @@ -0,0 +1,19 @@ +[base] +flavours: alpha-generic alpha-smp alpha-legacy +kernel-arch: alpha +compiler: gcc-4.4 + +[image] +suggests: aboot, fdutils + +[alpha-generic_description] +hardware: Alpha +hardware-long: DEC Alpha systems with extended kernel start address (Wildfire, Titan, Marvel) + +[alpha-smp_description] +hardware: Alpha SMP +hardware-long: DEC Alpha SMP systems with extended kernel start address (Wildfire, Titan, Marvel) + +[alpha-legacy_description] +hardware: Alpha Legacy +hardware-long: DEC Alpha systems with legacy kernel start address --- linux-2.6-3.0.0~rc6.orig/debian/config/alpha/config +++ linux-2.6-3.0.0~rc6/debian/config/alpha/config @@ -0,0 +1,1172 @@ +## +## file: arch/Kconfig +## +# CONFIG_OPROFILE is not set + +## +## file: arch/alpha/Kconfig +## +## choice: Alpha system type +CONFIG_ALPHA_GENERIC=y +# CONFIG_ALPHA_ALCOR is not set +# CONFIG_ALPHA_XL is not set +# CONFIG_ALPHA_BOOK1 is not set +# CONFIG_ALPHA_AVANTI_CH is not set +# CONFIG_ALPHA_CABRIOLET is not set +# CONFIG_ALPHA_DP264 is not set +# CONFIG_ALPHA_EB164 is not set +# CONFIG_ALPHA_EB64P_CH is not set +# CONFIG_ALPHA_EB66 is not set +# CONFIG_ALPHA_EB66P is not set +# CONFIG_ALPHA_EIGER is not set +# CONFIG_ALPHA_JENSEN is not set +# CONFIG_ALPHA_LX164 is not set +# CONFIG_ALPHA_LYNX is not set +# CONFIG_ALPHA_MARVEL is not set +# CONFIG_ALPHA_MIATA is not set +# CONFIG_ALPHA_MIKASA is not set +# CONFIG_ALPHA_NAUTILUS is not set +# CONFIG_ALPHA_NONAME_CH is not set +# CONFIG_ALPHA_NORITAKE is not set +# CONFIG_ALPHA_PC164 is not set +# CONFIG_ALPHA_P2K is not set +# CONFIG_ALPHA_RAWHIDE is not set +# CONFIG_ALPHA_RUFFIAN is not set +# CONFIG_ALPHA_RX164 is not set +# CONFIG_ALPHA_SX164 is not set +# CONFIG_ALPHA_SABLE is not set +# CONFIG_ALPHA_SHARK is not set +# CONFIG_ALPHA_TAKARA is not set +# CONFIG_ALPHA_TITAN is not set +# CONFIG_ALPHA_WILDFIRE is not set +## end choice +# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set +# CONFIG_VERBOSE_MCHECK is not set +CONFIG_SRM_ENV=m + +## +## file: arch/alpha/Kconfig.debug +## +CONFIG_MATHEMU=y + +## +## file: drivers/ata/Kconfig +## +CONFIG_PATA_ALI=m +CONFIG_PATA_AMD=m +CONFIG_PATA_CS5520=m +CONFIG_PATA_CS5530=m +CONFIG_PATA_EFAR=m +CONFIG_PATA_NS87415=m +CONFIG_PATA_OLDPIIX=m +CONFIG_PATA_PDC2027X=m +CONFIG_PATA_PDC_OLD=m +CONFIG_PATA_SC1200=m +CONFIG_PATA_SERVERWORKS=m +CONFIG_PATA_SIL680=m +CONFIG_PATA_TRIFLEX=m +CONFIG_PATA_VIA=m +CONFIG_PATA_MPIIX=m + +## +## file: drivers/atm/Kconfig +## +CONFIG_ATM_DRIVERS=y +CONFIG_ATM_TCP=m +CONFIG_ATM_LANAI=m +CONFIG_ATM_ENI=m +# CONFIG_ATM_ENI_DEBUG is not set +# CONFIG_ATM_ENI_TUNE_BURST is not set +CONFIG_ATM_FIRESTREAM=m +CONFIG_ATM_ZATM=m +# CONFIG_ATM_ZATM_DEBUG is not set +CONFIG_ATM_IDT77252=m +# CONFIG_ATM_IDT77252_DEBUG is not set +# CONFIG_ATM_IDT77252_RCV_ALL is not set +CONFIG_ATM_AMBASSADOR=m +# CONFIG_ATM_AMBASSADOR_DEBUG is not set +CONFIG_ATM_HORIZON=m +# CONFIG_ATM_HORIZON_DEBUG is not set +# CONFIG_ATM_FORE200E_USE_TASKLET is not set +CONFIG_ATM_FORE200E_TX_RETRY=16 +CONFIG_ATM_FORE200E_DEBUG=0 +CONFIG_ATM_HE=m +CONFIG_ATM_HE_USE_SUNI=y + +## +## file: drivers/block/Kconfig +## +CONFIG_BLK_DEV_FD=m +CONFIG_BLK_DEV_XD=m +CONFIG_PARIDE=m +CONFIG_BLK_CPQ_DA=m +CONFIG_BLK_CPQ_CISS_DA=m +CONFIG_CISS_SCSI_TAPE=y +CONFIG_BLK_DEV_DAC960=m +CONFIG_BLK_DEV_UMEM=m +CONFIG_BLK_DEV_SX8=m +# CONFIG_BLK_DEV_UB is not set +CONFIG_BLK_DEV_RAM_SIZE=8192 +CONFIG_CDROM_PKTCDVD=m +CONFIG_CDROM_PKTCDVD_BUFFERS=8 +CONFIG_CDROM_PKTCDVD_WCACHE=y + +## +## file: drivers/block/paride/Kconfig +## +CONFIG_PARIDE_PD=m +CONFIG_PARIDE_PCD=m +CONFIG_PARIDE_PF=m +CONFIG_PARIDE_PT=m +CONFIG_PARIDE_PG=m +CONFIG_PARIDE_ATEN=m +CONFIG_PARIDE_BPCK=m +CONFIG_PARIDE_COMM=m +CONFIG_PARIDE_DSTR=m +CONFIG_PARIDE_FIT2=m +CONFIG_PARIDE_FIT3=m +CONFIG_PARIDE_EPAT=m +CONFIG_PARIDE_EPATC8=y +CONFIG_PARIDE_EPIA=m +CONFIG_PARIDE_FRIQ=m +CONFIG_PARIDE_FRPW=m +CONFIG_PARIDE_KBIC=m +CONFIG_PARIDE_KTTI=m +CONFIG_PARIDE_ON20=m +CONFIG_PARIDE_ON26=m + +## +## file: drivers/bluetooth/Kconfig +## +CONFIG_BT_HCIUART=m +CONFIG_BT_HCIUART_H4=y +CONFIG_BT_HCIUART_BCSP=y +CONFIG_BT_HCIBCM203X=m +CONFIG_BT_HCIBPA10X=m +CONFIG_BT_HCIBFUSB=m +CONFIG_BT_HCIDTL1=m +CONFIG_BT_HCIBT3C=m +CONFIG_BT_HCIBLUECARD=m +CONFIG_BT_HCIBTUART=m +CONFIG_BT_HCIVHCI=m + +## +## file: drivers/char/Kconfig +## +CONFIG_STALDRV=y +CONFIG_PRINTER=m +# CONFIG_LP_CONSOLE is not set +CONFIG_PPDEV=m +CONFIG_RTC=m +CONFIG_GEN_RTC=m +CONFIG_GEN_RTC_X=y +CONFIG_DTLK=m +CONFIG_APPLICOM=m +CONFIG_RAW_DRIVER=m +CONFIG_MAX_RAW_DEVS=256 + +## +## file: drivers/char/agp/Kconfig +## +#. Workaround +CONFIG_AGP=y +#. Workaround +CONFIG_AGP_ALPHA_CORE=y + +## +## file: drivers/char/ipmi/Kconfig +## +CONFIG_IPMI_HANDLER=m +# CONFIG_IPMI_PANIC_EVENT is not set +CONFIG_IPMI_DEVICE_INTERFACE=m +CONFIG_IPMI_SI=m +CONFIG_IPMI_WATCHDOG=m +CONFIG_IPMI_POWEROFF=m + +## +## file: drivers/eisa/Kconfig +## +CONFIG_EISA_PCI_EISA=y +CONFIG_EISA_VIRTUAL_ROOT=y +CONFIG_EISA_NAMES=y + +## +## file: drivers/gpu/drm/Kconfig +## +CONFIG_DRM=m +CONFIG_DRM_TDFX=m +CONFIG_DRM_R128=m +CONFIG_DRM_RADEON=m +CONFIG_DRM_MGA=m +CONFIG_DRM_SIS=m + +## +## file: drivers/gpu/drm/nouveau/Kconfig +## +CONFIG_DRM_NOUVEAU=m +# CONFIG_DRM_NOUVEAU_BACKLIGHT is not set +# CONFIG_DRM_NOUVEAU_DEBUG is not set +CONFIG_DRM_I2C_CH7006=m +CONFIG_DRM_I2C_SIL164=m + +## +## file: drivers/hid/usbhid/Kconfig +## +CONFIG_USB_HID=m +CONFIG_USB_KBD=m +CONFIG_USB_MOUSE=m + +## +## file: drivers/hwmon/Kconfig +## +CONFIG_SENSORS_ADM1021=m +CONFIG_SENSORS_ADM1025=m +CONFIG_SENSORS_ADM1026=m +CONFIG_SENSORS_ADM1031=m +CONFIG_SENSORS_ASB100=m +CONFIG_SENSORS_DS1621=m +CONFIG_SENSORS_F71805F=m +CONFIG_SENSORS_GL518SM=m +CONFIG_SENSORS_GL520SM=m +CONFIG_SENSORS_IT87=m +CONFIG_SENSORS_LM63=m +CONFIG_SENSORS_LM75=m +CONFIG_SENSORS_LM77=m +CONFIG_SENSORS_LM78=m +CONFIG_SENSORS_LM80=m +CONFIG_SENSORS_LM83=m +CONFIG_SENSORS_LM85=m +CONFIG_SENSORS_LM87=m +CONFIG_SENSORS_LM90=m +CONFIG_SENSORS_LM92=m +CONFIG_SENSORS_MAX1619=m +CONFIG_SENSORS_PC87360=m +CONFIG_SENSORS_PCF8591=m +CONFIG_SENSORS_SIS5595=m +CONFIG_SENSORS_SMSC47M1=m +CONFIG_SENSORS_SMSC47B397=m +CONFIG_SENSORS_VIA686A=m +CONFIG_SENSORS_W83781D=m +CONFIG_SENSORS_W83L785TS=m +CONFIG_SENSORS_W83627HF=m + +## +## file: drivers/i2c/Kconfig +## +CONFIG_I2C=m +CONFIG_I2C_CHARDEV=m +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set + +## +## file: drivers/i2c/busses/Kconfig +## +CONFIG_I2C_ALI1535=m +CONFIG_I2C_ALI1563=m +CONFIG_I2C_ALI15X3=m +CONFIG_I2C_AMD756=m +# CONFIG_I2C_AMD756_S4882 is not set +CONFIG_I2C_AMD8111=m +CONFIG_I2C_I801=m +CONFIG_I2C_PIIX4=m +CONFIG_I2C_NFORCE2=m +CONFIG_I2C_SIS5595=m +CONFIG_I2C_SIS630=m +CONFIG_I2C_SIS96X=m +CONFIG_I2C_VIA=m +CONFIG_I2C_VIAPRO=m +CONFIG_I2C_PARPORT=m +CONFIG_I2C_PARPORT_LIGHT=m +CONFIG_I2C_ELEKTOR=m +CONFIG_I2C_PCA_ISA=m +CONFIG_I2C_STUB=m +CONFIG_SCx200_ACB=m + +## +## file: drivers/ide/Kconfig +## +CONFIG_IDE=m +# CONFIG_BLK_DEV_IDE_SATA is not set +CONFIG_IDE_GD=m +# CONFIG_BLK_DEV_IDECS is not set +CONFIG_BLK_DEV_IDECD=m +CONFIG_BLK_DEV_IDETAPE=m +CONFIG_IDE_GENERIC=m +CONFIG_BLK_DEV_IDEPNP=y +# CONFIG_BLK_DEV_OFFBOARD is not set +CONFIG_BLK_DEV_GENERIC=m +CONFIG_BLK_DEV_OPTI621=m +# CONFIG_BLK_DEV_AEC62XX is not set +# CONFIG_BLK_DEV_ALI15X3 is not set +# CONFIG_BLK_DEV_AMD74XX is not set +# CONFIG_BLK_DEV_CMD64X is not set +# CONFIG_BLK_DEV_TRIFLEX is not set +CONFIG_BLK_DEV_CY82C693=m +# CONFIG_BLK_DEV_CS5520 is not set +# CONFIG_BLK_DEV_CS5530 is not set +CONFIG_BLK_DEV_HPT366=m +# CONFIG_BLK_DEV_SC1200 is not set +# CONFIG_BLK_DEV_PIIX is not set +# CONFIG_BLK_DEV_NS87415 is not set +# CONFIG_BLK_DEV_PDC202XX_OLD is not set +# CONFIG_BLK_DEV_PDC202XX_NEW is not set +# CONFIG_BLK_DEV_SVWKS is not set +# CONFIG_BLK_DEV_SIIMAGE is not set +# CONFIG_BLK_DEV_SLC90E66 is not set +CONFIG_BLK_DEV_TRM290=m +# CONFIG_BLK_DEV_VIA82CXXX is not set +CONFIG_BLK_DEV_4DRIVES=y +CONFIG_BLK_DEV_ALI14XX=m +CONFIG_BLK_DEV_DTC2278=m +CONFIG_BLK_DEV_HT6560B=m +CONFIG_BLK_DEV_QD65XX=m +CONFIG_BLK_DEV_UMC8672=m + +## +## file: drivers/input/gameport/Kconfig +## +CONFIG_GAMEPORT=m +CONFIG_GAMEPORT_NS558=m +CONFIG_GAMEPORT_L4=m +CONFIG_GAMEPORT_EMU10K1=m +CONFIG_GAMEPORT_FM801=m + +## +## file: drivers/input/joystick/Kconfig +## +CONFIG_INPUT_JOYSTICK=y + +## +## file: drivers/input/keyboard/Kconfig +## +CONFIG_INPUT_KEYBOARD=y +CONFIG_KEYBOARD_ATKBD=y +CONFIG_KEYBOARD_LKKBD=m +CONFIG_KEYBOARD_NEWTON=m +CONFIG_KEYBOARD_SUNKBD=m +CONFIG_KEYBOARD_XTKBD=m + +## +## file: drivers/input/misc/Kconfig +## +CONFIG_INPUT_MISC=y +CONFIG_INPUT_PCSPKR=m +CONFIG_INPUT_UINPUT=m + +## +## file: drivers/input/mouse/Kconfig +## +CONFIG_INPUT_MOUSE=y +CONFIG_MOUSE_PS2=m +CONFIG_MOUSE_SERIAL=m +CONFIG_MOUSE_INPORT=m +# CONFIG_MOUSE_ATIXL is not set +CONFIG_MOUSE_LOGIBM=m +CONFIG_MOUSE_PC110PAD=m +CONFIG_MOUSE_VSXXXAA=m + +## +## file: drivers/input/serio/Kconfig +## +CONFIG_SERIO=y +CONFIG_SERIO_I8042=y +CONFIG_SERIO_SERPORT=m +CONFIG_SERIO_PARKBD=m +CONFIG_SERIO_PCIPS2=m +CONFIG_SERIO_LIBPS2=y +CONFIG_SERIO_RAW=m + +## +## file: drivers/input/touchscreen/Kconfig +## +CONFIG_INPUT_TOUCHSCREEN=y + +## +## file: drivers/isdn/Kconfig +## +CONFIG_ISDN=y +CONFIG_ISDN_CAPI=m + +## +## file: drivers/isdn/capi/Kconfig +## +CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON=y +CONFIG_ISDN_CAPI_MIDDLEWARE=y +CONFIG_ISDN_CAPI_CAPI20=m +CONFIG_ISDN_CAPI_CAPIDRV=m + +## +## file: drivers/isdn/hardware/avm/Kconfig +## +CONFIG_CAPI_AVM=y +CONFIG_ISDN_DRV_AVMB1_B1ISA=m +CONFIG_ISDN_DRV_AVMB1_B1PCI=m +CONFIG_ISDN_DRV_AVMB1_B1PCIV4=y +CONFIG_ISDN_DRV_AVMB1_T1ISA=m +CONFIG_ISDN_DRV_AVMB1_B1PCMCIA=m +CONFIG_ISDN_DRV_AVMB1_AVM_CS=m +CONFIG_ISDN_DRV_AVMB1_T1PCI=m +CONFIG_ISDN_DRV_AVMB1_C4=m + +## +## file: drivers/isdn/hardware/eicon/Kconfig +## +CONFIG_CAPI_EICON=y +CONFIG_ISDN_DIVAS=m +CONFIG_ISDN_DIVAS_BRIPCI=y +CONFIG_ISDN_DIVAS_PRIPCI=y +CONFIG_ISDN_DIVAS_DIVACAPI=m +CONFIG_ISDN_DIVAS_USERIDI=m +CONFIG_ISDN_DIVAS_MAINT=m + +## +## file: drivers/media/Kconfig +## +CONFIG_DVB_CORE=m + +## +## file: drivers/media/radio/Kconfig +## +CONFIG_RADIO_CADET=m +CONFIG_RADIO_RTRACK=m +CONFIG_RADIO_RTRACK2=m +CONFIG_RADIO_AZTECH=m +CONFIG_RADIO_GEMTEK=m +CONFIG_RADIO_MAXIRADIO=m +CONFIG_RADIO_SF16FMI=m +CONFIG_RADIO_SF16FMR2=m +CONFIG_RADIO_TERRATEC=m +CONFIG_RADIO_TRUST=m +CONFIG_RADIO_TYPHOON=m +CONFIG_RADIO_ZOLTRIX=m +CONFIG_USB_DSBR=m + +## +## file: drivers/message/i2o/Kconfig +## +CONFIG_I2O=m +CONFIG_I2O_CONFIG=m +CONFIG_I2O_BLOCK=m +CONFIG_I2O_SCSI=m +CONFIG_I2O_PROC=m + +## +## file: drivers/mmc/Kconfig +## +CONFIG_MMC=m +# CONFIG_MMC_DEBUG is not set + +## +## file: drivers/mmc/card/Kconfig +## +CONFIG_MMC_BLOCK=m + +## +## file: drivers/mtd/Kconfig +## +CONFIG_MTD=m +# CONFIG_MTD_DEBUG is not set +CONFIG_MTD_REDBOOT_PARTS=y +CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1 +CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED=y +CONFIG_MTD_REDBOOT_PARTS_READONLY=y +CONFIG_MTD_CMDLINE_PARTS=y +CONFIG_MTD_CHAR=m +CONFIG_MTD_BLOCK=m +CONFIG_MTD_BLOCK_RO=m +CONFIG_FTL=m +CONFIG_NFTL=m +CONFIG_NFTL_RW=y +CONFIG_INFTL=m + +## +## file: drivers/mtd/chips/Kconfig +## +CONFIG_MTD_CFI=m +CONFIG_MTD_JEDECPROBE=m +CONFIG_MTD_CFI_ADV_OPTIONS=y +## choice: Flash cmd/query data swapping +# CONFIG_MTD_CFI_NOSWAP is not set +CONFIG_MTD_CFI_BE_BYTE_SWAP=y +# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set +## end choice +CONFIG_MTD_CFI_GEOMETRY=y +CONFIG_MTD_MAP_BANK_WIDTH_1=y +CONFIG_MTD_MAP_BANK_WIDTH_2=y +CONFIG_MTD_MAP_BANK_WIDTH_4=y +CONFIG_MTD_MAP_BANK_WIDTH_8=y +CONFIG_MTD_MAP_BANK_WIDTH_16=y +CONFIG_MTD_MAP_BANK_WIDTH_32=y +CONFIG_MTD_CFI_I1=y +CONFIG_MTD_CFI_I2=y +CONFIG_MTD_CFI_I4=y +CONFIG_MTD_CFI_I8=y +# CONFIG_MTD_OTP is not set +CONFIG_MTD_CFI_INTELEXT=m +CONFIG_MTD_CFI_AMDSTD=m +CONFIG_MTD_CFI_STAA=m +CONFIG_MTD_RAM=m +CONFIG_MTD_ROM=m +CONFIG_MTD_ABSENT=m +CONFIG_MTD_XIP=y + +## +## file: drivers/mtd/devices/Kconfig +## +CONFIG_MTD_PMC551=m +# CONFIG_MTD_PMC551_BUGFIX is not set +# CONFIG_MTD_PMC551_DEBUG is not set +CONFIG_MTD_SLRAM=m +CONFIG_MTD_PHRAM=m +CONFIG_MTD_MTDRAM=m +CONFIG_MTDRAM_TOTAL_SIZE=4096 +CONFIG_MTDRAM_ERASE_SIZE=128 +CONFIG_MTD_BLOCK2MTD=m +CONFIG_MTD_DOC2000=m +CONFIG_MTD_DOC2001=m +CONFIG_MTD_DOC2001PLUS=m +CONFIG_MTD_DOCPROBE_ADVANCED=y +CONFIG_MTD_DOCPROBE_ADDRESS=0x0000 +CONFIG_MTD_DOCPROBE_HIGH=y +CONFIG_MTD_DOCPROBE_55AA=y + +## +## file: drivers/mtd/maps/Kconfig +## +CONFIG_MTD_COMPLEX_MAPPINGS=y +CONFIG_MTD_PHYSMAP=m +CONFIG_MTD_PHYSMAP_START=0x8000000 +CONFIG_MTD_PHYSMAP_LEN=0x4000000 +CONFIG_MTD_PHYSMAP_BANKWIDTH=2 +CONFIG_MTD_PCI=m + +## +## file: drivers/mtd/nand/Kconfig +## +CONFIG_MTD_NAND=m +# CONFIG_MTD_NAND_VERIFY_WRITE is not set +# CONFIG_MTD_NAND_DISKONCHIP is not set + +## +## file: drivers/net/Kconfig +## +CONFIG_NET_SB1000=m +CONFIG_HAPPYMEAL=m +CONFIG_SUNGEM=m +CONFIG_NET_VENDOR_3COM=y +CONFIG_EL1=m +CONFIG_EL2=m +CONFIG_ELPLUS=m +CONFIG_EL16=m +CONFIG_EL3=m +CONFIG_3C515=m +CONFIG_VORTEX=m +CONFIG_TYPHOON=m +CONFIG_LANCE=m +CONFIG_NET_VENDOR_SMC=y +CONFIG_WD80x3=m +CONFIG_ULTRA=m +CONFIG_ULTRA32=m +CONFIG_SMC9194=m +CONFIG_NET_VENDOR_RACAL=y +CONFIG_NI5010=m +CONFIG_NI52=m +CONFIG_NI65=m +CONFIG_AT1700=m +CONFIG_DEPCA=m +CONFIG_HP100=m +CONFIG_NET_ISA=y +CONFIG_E2100=m +CONFIG_EWRK3=m +CONFIG_EEXPRESS=m +CONFIG_EEXPRESS_PRO=m +CONFIG_HPLAN_PLUS=m +CONFIG_HPLAN=m +CONFIG_LP486E=m +CONFIG_ETH16I=m +CONFIG_NE2000=m +CONFIG_ZNET=m +CONFIG_SEEQ8005=m +CONFIG_NET_PCI=y +CONFIG_AMD8111_ETH=m +CONFIG_ADAPTEC_STARFIRE=m +CONFIG_AC3200=m +CONFIG_APRICOT=m +CONFIG_B44=m +CONFIG_FORCEDETH=m +CONFIG_CS89x0=m +CONFIG_E100=m +CONFIG_LNE390=m +CONFIG_FEALNX=m +CONFIG_NATSEMI=m +CONFIG_NE2K_PCI=m +CONFIG_NE3210=m +CONFIG_ES3210=m +CONFIG_8139CP=m +CONFIG_8139TOO=m +# CONFIG_8139TOO_PIO is not set +CONFIG_8139TOO_TUNE_TWISTER=y +CONFIG_8139TOO_8129=y +# CONFIG_8139_OLD_RX_RESET is not set +CONFIG_SIS900=m +CONFIG_EPIC100=m +CONFIG_SUNDANCE=m +# CONFIG_SUNDANCE_MMIO is not set +CONFIG_VIA_RHINE=m +# CONFIG_VIA_RHINE_MMIO is not set +CONFIG_DE600=m +CONFIG_DE620=m +CONFIG_FDDI=y +CONFIG_SKFP=m +CONFIG_HIPPI=y +CONFIG_ROADRUNNER=m +# CONFIG_ROADRUNNER_LARGE_RINGS is not set +CONFIG_PLIP=m +CONFIG_NET_FC=y +CONFIG_NETPOLL_TRAP=y + +## +## file: drivers/net/arcnet/Kconfig +## +CONFIG_ARCNET=m +CONFIG_ARCNET_1201=m +CONFIG_ARCNET_1051=m +CONFIG_ARCNET_RAW=m +CONFIG_ARCNET_CAP=m +CONFIG_ARCNET_COM90xx=m +CONFIG_ARCNET_COM90xxIO=m +CONFIG_ARCNET_RIM_I=m +CONFIG_ARCNET_COM20020=m +CONFIG_ARCNET_COM20020_ISA=m +CONFIG_ARCNET_COM20020_PCI=m + +## +## file: drivers/net/hamradio/Kconfig +## +CONFIG_DMASCC=m +CONFIG_SCC=m +# CONFIG_SCC_DELAY is not set +# CONFIG_SCC_TRXECHO is not set + +## +## file: drivers/net/irda/Kconfig +## +CONFIG_IRTTY_SIR=m +CONFIG_USB_IRDA=m +CONFIG_SIGMATEL_FIR=m +CONFIG_NSC_FIR=m +CONFIG_WINBOND_FIR=m +CONFIG_SMC_IRCC_FIR=m +CONFIG_ALI_FIR=m +CONFIG_VLSI_FIR=m +CONFIG_VIA_FIR=m + +## +## file: drivers/net/pcmcia/Kconfig +## +CONFIG_NET_PCMCIA=y +CONFIG_PCMCIA_3C589=m +CONFIG_PCMCIA_3C574=m +CONFIG_PCMCIA_FMVJ18X=m +CONFIG_PCMCIA_PCNET=m +CONFIG_PCMCIA_NMCLAN=m +CONFIG_PCMCIA_SMC91C92=m +CONFIG_PCMCIA_XIRC2PS=m +CONFIG_PCMCIA_AXNET=m +CONFIG_ARCNET_COM20020_CS=m + +## +## file: drivers/net/tulip/Kconfig +## +CONFIG_NET_TULIP=y +CONFIG_DE2104X=m +CONFIG_TULIP=m +# CONFIG_TULIP_MWI is not set +# CONFIG_TULIP_MMIO is not set +CONFIG_DE4X5=m +CONFIG_WINBOND_840=m +CONFIG_DM9102=m +CONFIG_PCMCIA_XIRCOM=m + +## +## file: drivers/net/wan/Kconfig +## +CONFIG_WAN=y +CONFIG_HOSTESS_SV11=m +CONFIG_COSA=m +CONFIG_LANMEDIA=m +CONFIG_SEALEVEL_4021=m +CONFIG_PCI200SYN=m +CONFIG_WANXL=m +CONFIG_PC300=m +CONFIG_PC300_MLPPP=y +CONFIG_N2=m +CONFIG_C101=m +CONFIG_FARSYNC=m +CONFIG_DSCC4=m +CONFIG_DSCC4_PCISYNC=y +CONFIG_DSCC4_PCI_RST=y +CONFIG_DLCI=m +CONFIG_DLCI_MAX=8 +CONFIG_SDLA=m +CONFIG_CYCLADES_SYNC=m + +## +## file: drivers/net/wireless/Kconfig +## +CONFIG_PCMCIA_RAYCS=m +CONFIG_ATMEL=m +CONFIG_PCI_ATMEL=m +CONFIG_PCMCIA_ATMEL=m +CONFIG_AIRO_CS=m +CONFIG_PCMCIA_WL3501=m +CONFIG_USB_ZD1201=m + +## +## file: drivers/net/wireless/ipw2x00/Kconfig +## +# CONFIG_IPW2100 is not set + +## +## file: drivers/net/wireless/mwifiex/Kconfig +## +CONFIG_MWIFIEX=m +CONFIG_MWIFIEX_SDIO=m + +## +## file: drivers/net/wireless/orinoco/Kconfig +## +CONFIG_HERMES=m +CONFIG_PLX_HERMES=m +CONFIG_TMD_HERMES=m +CONFIG_PCI_HERMES=m +CONFIG_PCMCIA_HERMES=m + +## +## file: drivers/pcmcia/Kconfig +## +CONFIG_PCCARD=m +CONFIG_PCMCIA=m +CONFIG_CARDBUS=y +CONFIG_YENTA=m +CONFIG_PD6729=m +CONFIG_I82092=m +CONFIG_I82365=m +CONFIG_TCIC=m +CONFIG_PCMCIA_DEBUG=y + +## +## file: drivers/pnp/Kconfig +## +CONFIG_PNP=y + +## +## file: drivers/pnp/isapnp/Kconfig +## +CONFIG_ISAPNP=y + +## +## file: drivers/scsi/Kconfig +## +CONFIG_SCSI_IN2000=m +CONFIG_SCSI_ARCMSR=m +CONFIG_SCSI_BUSLOGIC=m +CONFIG_SCSI_DMX3191D=m +CONFIG_SCSI_DTC3280=m +CONFIG_SCSI_EATA=m +CONFIG_SCSI_EATA_TAGGED_QUEUE=y +CONFIG_SCSI_EATA_LINKED_COMMANDS=y +CONFIG_SCSI_EATA_MAX_TAGS=16 +CONFIG_SCSI_FUTURE_DOMAIN=m +CONFIG_SCSI_GDTH=m +CONFIG_SCSI_GENERIC_NCR5380=m +CONFIG_SCSI_GENERIC_NCR5380_MMIO=m +CONFIG_SCSI_GENERIC_NCR53C400=y +CONFIG_SCSI_IPS=m +CONFIG_SCSI_INITIO=m +CONFIG_SCSI_INIA100=m +CONFIG_SCSI_IZIP_EPP16=y +CONFIG_SCSI_IZIP_SLOW_CTR=y +CONFIG_SCSI_NCR53C406A=m +CONFIG_SCSI_SYM53C8XX_2=m +CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1 +CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16 +CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 +CONFIG_SCSI_IPR=m +CONFIG_SCSI_IPR_TRACE=y +CONFIG_SCSI_IPR_DUMP=y +CONFIG_SCSI_PAS16=m +CONFIG_SCSI_QLOGIC_FAS=m +CONFIG_SCSI_QLOGIC_1280=m +CONFIG_SCSI_SIM710=m +CONFIG_SCSI_SYM53C416=m +CONFIG_SCSI_DC395x=m +CONFIG_SCSI_DC390T=m +CONFIG_SCSI_T128=m +CONFIG_SCSI_U14_34F=m +CONFIG_SCSI_U14_34F_TAGGED_QUEUE=y +CONFIG_SCSI_U14_34F_LINKED_COMMANDS=y +CONFIG_SCSI_U14_34F_MAX_TAGS=8 +CONFIG_SCSI_DEBUG=m + +## +## file: drivers/scsi/aic7xxx/Kconfig.aic7xxx +## +CONFIG_AIC7XXX_CMDS_PER_DEVICE=8 + +## +## file: drivers/scsi/megaraid/Kconfig.megaraid +## +CONFIG_MEGARAID_NEWGEN=y +CONFIG_MEGARAID_MM=m +CONFIG_MEGARAID_MAILBOX=m +CONFIG_MEGARAID_LEGACY=m + +## +## file: drivers/scsi/pcmcia/Kconfig +## +CONFIG_PCMCIA_FDOMAIN=m +CONFIG_PCMCIA_QLOGIC=m +CONFIG_PCMCIA_SYM53C500=m + +## +## file: drivers/staging/generic_serial/Kconfig +## +CONFIG_SX=m +# CONFIG_RIO is not set + +## +## file: drivers/staging/tty/Kconfig +## +CONFIG_STALLION=m +CONFIG_ISTALLION=m +# CONFIG_DIGIEPCA is not set +CONFIG_SPECIALIX=m + +## +## file: drivers/telephony/Kconfig +## +CONFIG_PHONE=m +CONFIG_PHONE_IXJ=m +CONFIG_PHONE_IXJ_PCMCIA=m + +## +## file: drivers/tty/Kconfig +## +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +# CONFIG_SERIAL_NONSTANDARD is not set +CONFIG_ROCKETPORT=m +CONFIG_CYCLADES=m +# CONFIG_CYZ_INTR is not set +CONFIG_MOXA_INTELLIO=m +CONFIG_SYNCLINK=m +CONFIG_SYNCLINKMP=m +CONFIG_ISI=m +CONFIG_N_HDLC=m + +## +## file: drivers/tty/serial/Kconfig +## +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_SERIAL_8250_CS=m +CONFIG_SERIAL_8250_NR_UARTS=32 +CONFIG_SERIAL_8250_RUNTIME_UARTS=4 +CONFIG_SERIAL_8250_EXTENDED=y +CONFIG_SERIAL_8250_MANY_PORTS=y +CONFIG_SERIAL_8250_SHARE_IRQ=y +# CONFIG_SERIAL_8250_DETECT_IRQ is not set +CONFIG_SERIAL_8250_RSA=y +CONFIG_SERIAL_JSM=m + +## +## file: drivers/usb/Kconfig +## +CONFIG_USB=m +CONFIG_USB_USS720=m + +## +## file: drivers/usb/atm/Kconfig +## +CONFIG_USB_ATM=m +CONFIG_USB_SPEEDTOUCH=m + +## +## file: drivers/usb/host/Kconfig +## +CONFIG_USB_EHCI_HCD=m +CONFIG_USB_EHCI_ROOT_HUB_TT=y +CONFIG_USB_OHCI_HCD=m +CONFIG_USB_UHCI_HCD=m +CONFIG_USB_SL811_HCD=m +CONFIG_USB_SL811_CS=m + +## +## file: drivers/video/Kconfig +## +CONFIG_FB=y +CONFIG_FB_MODE_HELPERS=y +CONFIG_FB_TILEBLITTING=y +CONFIG_FB_CIRRUS=m +CONFIG_FB_PM2=m +CONFIG_FB_PM2_FIFO_DISCONNECT=y +CONFIG_FB_CYBER2000=m +# CONFIG_FB_ASILIANT is not set +# CONFIG_FB_IMSTT is not set +CONFIG_FB_TGA=m +CONFIG_FB_S1D13XXX=m +CONFIG_FB_NVIDIA=m +# CONFIG_FB_NVIDIA_I2C is not set +# CONFIG_FB_RIVA is not set +# CONFIG_FB_RIVA_I2C is not set +# CONFIG_FB_RIVA_DEBUG is not set +CONFIG_FB_MATROX=m +CONFIG_FB_MATROX_MILLENIUM=y +CONFIG_FB_MATROX_MYSTIQUE=y +CONFIG_FB_MATROX_G=y +CONFIG_FB_MATROX_I2C=m +CONFIG_FB_MATROX_MAVEN=m +CONFIG_FB_RADEON=m +CONFIG_FB_RADEON_I2C=y +# CONFIG_FB_RADEON_DEBUG is not set +CONFIG_FB_ATY128=m +CONFIG_FB_ATY=m +CONFIG_FB_ATY_CT=y +# CONFIG_FB_ATY_GENERIC_LCD is not set +CONFIG_FB_ATY_GX=y +CONFIG_FB_SAVAGE=m +# CONFIG_FB_SAVAGE_I2C is not set +# CONFIG_FB_SAVAGE_ACCEL is not set +CONFIG_FB_SIS=m +CONFIG_FB_SIS_300=y +CONFIG_FB_SIS_315=y +CONFIG_FB_NEOMAGIC=m +CONFIG_FB_KYRO=m +CONFIG_FB_VOODOO1=m +CONFIG_FB_TRIDENT=m +CONFIG_FB_VIRTUAL=m + +## +## file: drivers/video/backlight/Kconfig +## +CONFIG_LCD_CLASS_DEVICE=m + +## +## file: drivers/video/console/Kconfig +## +CONFIG_VGA_CONSOLE=y +CONFIG_MDA_CONSOLE=m +CONFIG_FRAMEBUFFER_CONSOLE=m +# CONFIG_FONTS is not set +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y + +## +## file: drivers/video/logo/Kconfig +## +# CONFIG_LOGO is not set + +## +## file: drivers/watchdog/Kconfig +## +CONFIG_PCWATCHDOG=m +CONFIG_MIXCOMWD=m +CONFIG_WDT=m +CONFIG_PCIPCWATCHDOG=m +CONFIG_WDTPCI=m +CONFIG_USBPCWATCHDOG=m + +## +## file: fs/Kconfig.binfmt +## +CONFIG_BINFMT_AOUT=m +CONFIG_OSF4_COMPAT=y +CONFIG_BINFMT_EM86=m + +## +## file: fs/ext2/Kconfig +## +CONFIG_EXT2_FS=y + +## +## file: fs/partitions/Kconfig +## +CONFIG_ACORN_PARTITION=y +# CONFIG_ACORN_PARTITION_CUMANA is not set +# CONFIG_ACORN_PARTITION_EESOX is not set +CONFIG_ACORN_PARTITION_ICS=y +# CONFIG_ACORN_PARTITION_ADFS is not set +# CONFIG_ACORN_PARTITION_POWERTEC is not set +CONFIG_ACORN_PARTITION_RISCIX=y +CONFIG_OSF_PARTITION=y +CONFIG_AMIGA_PARTITION=y +CONFIG_ATARI_PARTITION=y +CONFIG_MAC_PARTITION=y +CONFIG_BSD_DISKLABEL=y +CONFIG_MINIX_SUBPARTITION=y +CONFIG_SOLARIS_X86_PARTITION=y +CONFIG_UNIXWARE_DISKLABEL=y +CONFIG_LDM_PARTITION=y +# CONFIG_LDM_DEBUG is not set +CONFIG_SGI_PARTITION=y +CONFIG_ULTRIX_PARTITION=y +CONFIG_SUN_PARTITION=y + +## +## file: init/Kconfig +## +#. TODO +# CONFIG_AUDIT is not set + +## +## file: lib/Kconfig +## +#. TODO +CONFIG_CRC32=m + +## +## file: net/ax25/Kconfig +## +CONFIG_HAMRADIO=y +CONFIG_AX25=m +# CONFIG_AX25_DAMA_SLAVE is not set +CONFIG_NETROM=m +CONFIG_ROSE=m + +## +## file: net/decnet/Kconfig +## +CONFIG_DECNET=m +# CONFIG_DECNET_ROUTER is not set + +## +## file: net/ipx/Kconfig +## +CONFIG_IPX=m +# CONFIG_IPX_INTERN is not set + +## +## file: net/irda/Kconfig +## +CONFIG_IRDA=m +CONFIG_IRDA_ULTRA=y +CONFIG_IRDA_CACHE_LAST_LSAP=y +CONFIG_IRDA_FAST_RR=y +# CONFIG_IRDA_DEBUG is not set + +## +## file: net/irda/ircomm/Kconfig +## +CONFIG_IRCOMM=m + +## +## file: net/irda/irlan/Kconfig +## +CONFIG_IRLAN=m + +## +## file: net/irda/irnet/Kconfig +## +CONFIG_IRNET=m + +## +## file: net/lapb/Kconfig +## +CONFIG_LAPB=m + +## +## file: net/wanrouter/Kconfig +## +CONFIG_WAN_ROUTER=m + +## +## file: sound/drivers/Kconfig +## +CONFIG_SND_DUMMY=m +CONFIG_SND_VIRMIDI=m +CONFIG_SND_MTPAV=m +CONFIG_SND_SERIAL_U16550=m +CONFIG_SND_MPU401=m + +## +## file: sound/isa/Kconfig +## +CONFIG_SND_ADLIB=m +CONFIG_SND_AD1816A=m +CONFIG_SND_AD1848=m +CONFIG_SND_ALS100=m +CONFIG_SND_AZT2320=m +CONFIG_SND_CMI8330=m +CONFIG_SND_CS4231=m +CONFIG_SND_CS4236=m +CONFIG_SND_ES1688=m +CONFIG_SND_ES18XX=m +CONFIG_SND_GUSCLASSIC=m +CONFIG_SND_GUSEXTREME=m +CONFIG_SND_GUSMAX=m +CONFIG_SND_INTERWAVE=m +CONFIG_SND_INTERWAVE_STB=m +CONFIG_SND_OPL3SA2=m +CONFIG_SND_OPTI92X_AD1848=m +CONFIG_SND_OPTI92X_CS4231=m +CONFIG_SND_OPTI93X=m +CONFIG_SND_MIRO=m +CONFIG_SND_SB8=m +CONFIG_SND_SB16=m +CONFIG_SND_SBAWE=m +CONFIG_SND_SB16_CSP=y +CONFIG_SND_SSCAPE=m +CONFIG_SND_WAVEFRONT=m + +## +## file: sound/pci/Kconfig +## +CONFIG_SND_ALS4000=m +CONFIG_SND_ALI5451=m +CONFIG_SND_ATIIXP=m +CONFIG_SND_ATIIXP_MODEM=m +CONFIG_SND_AU8810=m +CONFIG_SND_AU8820=m +CONFIG_SND_AU8830=m +CONFIG_SND_AZT3328=m +CONFIG_SND_BT87X=m +# CONFIG_SND_BT87X_OVERCLOCK is not set +CONFIG_SND_CA0106=m +CONFIG_SND_CMIPCI=m +CONFIG_SND_CS4281=m +CONFIG_SND_CS46XX=m +CONFIG_SND_CS46XX_NEW_DSP=y +CONFIG_SND_EMU10K1=m +CONFIG_SND_EMU10K1X=m +CONFIG_SND_ENS1370=m +CONFIG_SND_ENS1371=m +CONFIG_SND_ES1938=m +CONFIG_SND_ES1968=m +CONFIG_SND_FM801=m +CONFIG_SND_FM801_TEA575X_BOOL=y +CONFIG_SND_HDSP=m +CONFIG_SND_ICE1712=m +CONFIG_SND_ICE1724=m +CONFIG_SND_INTEL8X0=m +CONFIG_SND_INTEL8X0M=m +CONFIG_SND_KORG1212=m +CONFIG_SND_MAESTRO3=m +# CONFIG_SND_MIXART is not set +CONFIG_SND_NM256=m +CONFIG_SND_RME32=m +CONFIG_SND_RME96=m +CONFIG_SND_RME9652=m +CONFIG_SND_SONICVIBES=m +CONFIG_SND_TRIDENT=m +CONFIG_SND_VIA82XX=m +CONFIG_SND_VIA82XX_MODEM=m +CONFIG_SND_VX222=m +CONFIG_SND_YMFPCI=m + +## +## file: sound/pci/hda/Kconfig +## +CONFIG_SND_HDA_INTEL=m + --- linux-2.6-3.0.0~rc6.orig/debian/config/mipsel/defines +++ linux-2.6-3.0.0~rc6/debian/config/mipsel/defines @@ -0,0 +1,48 @@ +[base] +flavours: + r5k-cobalt + sb1-bcm91250a + sb1a-bcm91480b + 4kc-malta + 5kc-malta + loongson-2f +kernel-arch: mips + +[image] +initramfs: false + +[r5k-cobalt_description] +hardware: Cobalt +hardware-long: Cobalt systems (Qube, RaQ, Qube2, RaQ2) + +[sb1-bcm91250a_description] +hardware: BCM91250A +hardware-long: Broadcom BCM91250A systems (aka SWARM) + +[sb1-bcm91250a_image] +configs: mips/config.sb1-bcm91250a + +[sb1a-bcm91480b_description] +hardware: BCM91480B +hardware-long: Broadcom BCM91480B systems (aka BigSur) + +[sb1a-bcm91480b_image] +configs: mips/config.sb1a-bcm91480b + +[4kc-malta_description] +hardware: MIPS Malta +hardware-long: MIPS Malta boards + +[4kc-malta_image] +configs: mips/config.4kc-malta + +[5kc-malta_description] +hardware: MIPS Malta (64-bit) +hardware-long: MIPS Malta boards (64-bit) + +[5kc-malta_image] +configs: mips/config.5kc-malta + +[loongson-2f_description] +hardware: Loongson 2F +hardware-long: Lemote Loongson 2F systems --- linux-2.6-3.0.0~rc6.orig/debian/config/mipsel/config +++ linux-2.6-3.0.0~rc6/debian/config/mipsel/config @@ -0,0 +1,14 @@ +## +## file: arch/mips/Kconfig +## +## choice: Endianess selection +# CONFIG_CPU_BIG_ENDIAN is not set +CONFIG_CPU_LITTLE_ENDIAN=y +## end choice +CONFIG_SECCOMP=y + +## +## file: drivers/net/Kconfig +## +# CONFIG_NIU is not set + --- linux-2.6-3.0.0~rc6.orig/debian/config/mipsel/config.r5k-cobalt +++ linux-2.6-3.0.0~rc6/debian/config/mipsel/config.r5k-cobalt @@ -0,0 +1,759 @@ +## +## file: arch/mips/Kconfig +## +## choice: System type +CONFIG_MIPS_COBALT=y +# CONFIG_MACH_DECSTATION is not set +# CONFIG_MACH_JAZZ is not set +# CONFIG_LASAT is not set +# CONFIG_MIPS_MALTA is not set +# CONFIG_MIPS_SIM is not set +# CONFIG_MACH_VR41XX is not set +# CONFIG_PNX8550_JBS is not set +# CONFIG_PMC_YOSEMITE is not set +# CONFIG_SGI_IP22 is not set +# CONFIG_SGI_IP27 is not set +# CONFIG_SGI_IP32 is not set +# CONFIG_SIBYTE_CRHINE is not set +# CONFIG_SIBYTE_CARMEL is not set +# CONFIG_SIBYTE_CRHONE is not set +# CONFIG_SIBYTE_RHONE is not set +# CONFIG_SIBYTE_SWARM is not set +# CONFIG_SIBYTE_LITTLESUR is not set +# CONFIG_SIBYTE_SENTOSA is not set +# CONFIG_SIBYTE_BIGSUR is not set +## end choice +## choice: CPU type +# CONFIG_CPU_MIPS32_R1 is not set +# CONFIG_CPU_MIPS32_R2 is not set +# CONFIG_CPU_MIPS64_R1 is not set +# CONFIG_CPU_MIPS64_R2 is not set +# CONFIG_CPU_R3000 is not set +# CONFIG_CPU_TX39XX is not set +# CONFIG_CPU_VR41XX is not set +# CONFIG_CPU_R4300 is not set +# CONFIG_CPU_R4X00 is not set +# CONFIG_CPU_TX49XX is not set +# CONFIG_CPU_R5000 is not set +# CONFIG_CPU_R5432 is not set +# CONFIG_CPU_R6000 is not set +CONFIG_CPU_NEVADA=y +# CONFIG_CPU_R8000 is not set +# CONFIG_CPU_R10000 is not set +# CONFIG_CPU_RM7000 is not set +# CONFIG_CPU_RM9000 is not set +# CONFIG_CPU_SB1 is not set +## end choice +## choice: Kernel code model +CONFIG_32BIT=y +# CONFIG_64BIT is not set +## end choice +## choice: Kernel page size +CONFIG_PAGE_SIZE_4KB=y +# CONFIG_PAGE_SIZE_8KB is not set +# CONFIG_PAGE_SIZE_16KB is not set +# CONFIG_PAGE_SIZE_64KB is not set +## end choice +CONFIG_PCI=y + +## +## file: arch/mips/alchemy/Kconfig +## +## choice: Machine type +# CONFIG_MIPS_MTX1 is not set +# CONFIG_MIPS_BOSPORUS is not set +# CONFIG_MIPS_DB1000 is not set +# CONFIG_MIPS_DB1100 is not set +# CONFIG_MIPS_DB1200 is not set +# CONFIG_MIPS_DB1500 is not set +# CONFIG_MIPS_DB1550 is not set +# CONFIG_MIPS_MIRAGE is not set +# CONFIG_MIPS_PB1000 is not set +# CONFIG_MIPS_PB1100 is not set +# CONFIG_MIPS_PB1200 is not set +# CONFIG_MIPS_PB1500 is not set +# CONFIG_MIPS_PB1550 is not set +# CONFIG_MIPS_XXS1500 is not set +## end choice + +## +## file: arch/mips/Kconfig.debug +## +CONFIG_CMDLINE="" + +## +## file: arch/mips/txx9/Kconfig +## +# CONFIG_TOSHIBA_JMR3927 is not set +# CONFIG_TOSHIBA_RBTX4927 is not set +# CONFIG_TOSHIBA_RBTX4938 is not set + +## +## file: drivers/ata/Kconfig +## +CONFIG_ATA=y +CONFIG_PATA_VIA=y +CONFIG_PATA_PLATFORM=y + +## +## file: drivers/base/Kconfig +## +# CONFIG_STANDALONE is not set +# CONFIG_PREVENT_FIRMWARE_BUILD is not set + +## +## file: drivers/block/Kconfig +## +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_UMEM is not set +# CONFIG_BLK_DEV_SX8 is not set +# CONFIG_BLK_DEV_UB is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_COUNT=16 +CONFIG_BLK_DEV_RAM_SIZE=8192 +# CONFIG_CDROM_PKTCDVD is not set + +## +## file: drivers/char/Kconfig +## +# CONFIG_PRINTER is not set +# CONFIG_PPDEV is not set +# CONFIG_RTC is not set +# CONFIG_GEN_RTC is not set +# CONFIG_DTLK is not set +# CONFIG_APPLICOM is not set +# CONFIG_TELCLOCK is not set + +## +## file: drivers/char/ipmi/Kconfig +## +# CONFIG_IPMI_HANDLER is not set + +## +## file: drivers/char/tpm/Kconfig +## +# CONFIG_TCG_TPM is not set + +## +## file: drivers/firewire/Kconfig +## +# CONFIG_FIREWIRE is not set + +## +## file: drivers/gpu/drm/Kconfig +## +# CONFIG_DRM is not set + +## +## file: drivers/hid/usbhid/Kconfig +## +# CONFIG_USB_HID is not set +# CONFIG_USB_KBD is not set +# CONFIG_USB_MOUSE is not set + +## +## file: drivers/hwmon/Kconfig +## +# CONFIG_HWMON is not set + +## +## file: drivers/i2c/Kconfig +## +# CONFIG_I2C is not set + +## +## file: drivers/ide/Kconfig +## +# CONFIG_IDE is not set + +## +## file: drivers/infiniband/Kconfig +## +# CONFIG_INFINIBAND is not set + +## +## file: drivers/input/Kconfig +## +# CONFIG_INPUT_JOYDEV is not set + +## +## file: drivers/input/gameport/Kconfig +## +# CONFIG_GAMEPORT is not set + +## +## file: drivers/input/joystick/Kconfig +## +# CONFIG_INPUT_JOYSTICK is not set + +## +## file: drivers/input/keyboard/Kconfig +## +CONFIG_INPUT_KEYBOARD=y +CONFIG_KEYBOARD_ATKBD=m +# CONFIG_KEYBOARD_LKKBD is not set +# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set + +## +## file: drivers/input/misc/Kconfig +## +CONFIG_INPUT_MISC=y +# CONFIG_INPUT_PCSPKR is not set +CONFIG_INPUT_COBALT_BTNS=m + +## +## file: drivers/input/mouse/Kconfig +## +CONFIG_INPUT_MOUSE=y +CONFIG_MOUSE_PS2=m +# CONFIG_MOUSE_SERIAL is not set +# CONFIG_MOUSE_VSXXXAA is not set + +## +## file: drivers/input/serio/Kconfig +## +CONFIG_SERIO=m +CONFIG_SERIO_I8042=m +CONFIG_SERIO_SERPORT=m +# CONFIG_SERIO_PARKBD is not set +# CONFIG_SERIO_PCIPS2 is not set +CONFIG_SERIO_LIBPS2=m +# CONFIG_SERIO_RAW is not set + +## +## file: drivers/input/touchscreen/Kconfig +## +# CONFIG_INPUT_TOUCHSCREEN is not set + +## +## file: drivers/isdn/Kconfig +## +CONFIG_ISDN=y +CONFIG_ISDN_CAPI=m + +## +## file: drivers/isdn/capi/Kconfig +## +CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON=y +CONFIG_ISDN_CAPI_MIDDLEWARE=y +CONFIG_ISDN_CAPI_CAPI20=m + +## +## file: drivers/isdn/hardware/avm/Kconfig +## +CONFIG_CAPI_AVM=y +CONFIG_ISDN_DRV_AVMB1_B1PCI=m +CONFIG_ISDN_DRV_AVMB1_B1PCIV4=y +CONFIG_ISDN_DRV_AVMB1_B1PCMCIA=m +CONFIG_ISDN_DRV_AVMB1_T1PCI=m +CONFIG_ISDN_DRV_AVMB1_C4=m + +## +## file: drivers/isdn/hardware/eicon/Kconfig +## +CONFIG_CAPI_EICON=y +CONFIG_ISDN_DIVAS=m +CONFIG_ISDN_DIVAS_BRIPCI=y +CONFIG_ISDN_DIVAS_PRIPCI=y +CONFIG_ISDN_DIVAS_DIVACAPI=m +CONFIG_ISDN_DIVAS_USERIDI=m +CONFIG_ISDN_DIVAS_MAINT=m + +## +## file: drivers/leds/Kconfig +## +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y +CONFIG_LEDS_COBALT_QUBE=y +CONFIG_LEDS_COBALT_RAQ=y + +## +## file: drivers/media/radio/Kconfig +## +# CONFIG_RADIO_MAXIRADIO is not set +# CONFIG_USB_DSBR is not set + +## +## file: drivers/media/video/Kconfig +## +# CONFIG_VIDEO_ADV_DEBUG is not set +# CONFIG_VIDEO_BWQCAM is not set +# CONFIG_VIDEO_CQCAM is not set +# CONFIG_VIDEO_W9966 is not set +# CONFIG_VIDEO_MXB is not set +# CONFIG_VIDEO_HEXIUM_ORION is not set +# CONFIG_VIDEO_HEXIUM_GEMINI is not set + +## +## file: drivers/media/video/et61x251/Kconfig +## +CONFIG_USB_ET61X251=m + +## +## file: drivers/media/video/pwc/Kconfig +## +# CONFIG_USB_PWC is not set + +## +## file: drivers/media/video/sn9c102/Kconfig +## +# CONFIG_USB_SN9C102 is not set + +## +## file: drivers/message/fusion/Kconfig +## +# CONFIG_FUSION is not set +# CONFIG_FUSION_SPI is not set +# CONFIG_FUSION_FC is not set +# CONFIG_FUSION_SAS is not set + +## +## file: drivers/message/i2o/Kconfig +## +# CONFIG_I2O is not set + +## +## file: drivers/mmc/Kconfig +## +# CONFIG_MMC is not set + +## +## file: drivers/mtd/Kconfig +## +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_REDBOOT_PARTS is not set +# CONFIG_MTD_CMDLINE_PARTS is not set +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLKDEVS=y +# CONFIG_MTD_BLOCK is not set +# CONFIG_MTD_BLOCK_RO is not set +# CONFIG_FTL is not set +# CONFIG_NFTL is not set +# CONFIG_INFTL is not set +# CONFIG_RFD_FTL is not set +# CONFIG_SSFDC is not set + +## +## file: drivers/mtd/chips/Kconfig +## +# CONFIG_MTD_CFI is not set +CONFIG_MTD_JEDECPROBE=y +# CONFIG_MTD_CFI_ADV_OPTIONS is not set +CONFIG_MTD_MAP_BANK_WIDTH_1=y +CONFIG_MTD_MAP_BANK_WIDTH_2=y +CONFIG_MTD_MAP_BANK_WIDTH_4=y +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set +CONFIG_MTD_CFI_I1=y +CONFIG_MTD_CFI_I2=y +# CONFIG_MTD_CFI_I4 is not set +# CONFIG_MTD_CFI_I8 is not set +# CONFIG_MTD_CFI_INTELEXT is not set +CONFIG_MTD_CFI_AMDSTD=y +# CONFIG_MTD_CFI_STAA is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set + +## +## file: drivers/mtd/devices/Kconfig +## +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_DATAFLASH is not set +# CONFIG_MTD_M25P80 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_PHRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLOCK2MTD is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOC2001PLUS is not set + +## +## file: drivers/mtd/maps/Kconfig +## +# CONFIG_MTD_COMPLEX_MAPPINGS is not set +CONFIG_MTD_PHYSMAP=y +CONFIG_MTD_PHYSMAP_START=0x0 +CONFIG_MTD_PHYSMAP_LEN=0x0 +CONFIG_MTD_PHYSMAP_BANKWIDTH=0 +# CONFIG_MTD_PLATRAM is not set + +## +## file: drivers/mtd/nand/Kconfig +## +# CONFIG_MTD_NAND is not set + +## +## file: drivers/mtd/onenand/Kconfig +## +# CONFIG_MTD_ONENAND is not set + +## +## file: drivers/mtd/ubi/Kconfig +## +# CONFIG_MTD_UBI is not set + +## +## file: drivers/net/Kconfig +## +#. TODO +# CONFIG_EQUALIZER is not set +# CONFIG_HAPPYMEAL is not set +# CONFIG_SUNGEM is not set +# CONFIG_CASSINI is not set +# CONFIG_NET_VENDOR_3COM is not set +# CONFIG_DM9000 is not set +# CONFIG_HP100 is not set +CONFIG_NET_PCI=y +CONFIG_AMD8111_ETH=m +CONFIG_ADAPTEC_STARFIRE=m +CONFIG_B44=m +# CONFIG_FORCEDETH is not set +CONFIG_E100=m +CONFIG_FEALNX=m +CONFIG_NATSEMI=m +CONFIG_NE2K_PCI=m +CONFIG_8139CP=m +CONFIG_8139TOO=m +CONFIG_8139TOO_PIO=y +# CONFIG_8139TOO_TUNE_TWISTER is not set +# CONFIG_8139TOO_8129 is not set +# CONFIG_8139_OLD_RX_RESET is not set +CONFIG_SIS900=m +CONFIG_EPIC100=m +CONFIG_SUNDANCE=m +# CONFIG_SUNDANCE_MMIO is not set +# CONFIG_TLAN is not set +CONFIG_VIA_RHINE=m +# CONFIG_VIA_RHINE_MMIO is not set +# CONFIG_NET_POCKET is not set +# CONFIG_DL2K is not set +# CONFIG_E1000 is not set +# CONFIG_NS83820 is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_R8169 is not set +# CONFIG_SIS190 is not set +# CONFIG_SKGE is not set +# CONFIG_SKY2 is not set +# CONFIG_VIA_VELOCITY is not set +# CONFIG_TIGON3 is not set +# CONFIG_BNX2 is not set +# CONFIG_CHELSIO_T1 is not set +# CONFIG_IXGB is not set +# CONFIG_S2IO is not set +# CONFIG_BNX2X is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +CONFIG_PLIP=m +# CONFIG_NET_FC is not set +# CONFIG_NETPOLL_TRAP is not set + +## +## file: drivers/net/appletalk/Kconfig +## +# CONFIG_ATALK is not set + +## +## file: drivers/net/arcnet/Kconfig +## +# CONFIG_ARCNET is not set + +## +## file: drivers/net/phy/Kconfig +## +# CONFIG_PHYLIB is not set + +## +## file: drivers/net/tokenring/Kconfig +## +# CONFIG_TR is not set + +## +## file: drivers/net/tulip/Kconfig +## +CONFIG_NET_TULIP=y +CONFIG_DE2104X=y +CONFIG_TULIP=y +CONFIG_TULIP_MWI=y +CONFIG_TULIP_MMIO=y +# CONFIG_TULIP_NAPI is not set +# CONFIG_DE4X5 is not set +# CONFIG_WINBOND_840 is not set +# CONFIG_DM9102 is not set +# CONFIG_ULI526X is not set + +## +## file: drivers/net/wan/Kconfig +## +# CONFIG_WAN is not set + +## +## file: drivers/net/wireless/Kconfig +## +CONFIG_ATMEL=m +CONFIG_PCI_ATMEL=m +CONFIG_USB_ZD1201=m + +## +## file: drivers/net/wireless/ipw2x00/Kconfig +## +CONFIG_IPW2100=m +# CONFIG_IPW2100_MONITOR is not set +# CONFIG_IPW2100_DEBUG is not set +CONFIG_IPW2200=m +# CONFIG_IPW2200_DEBUG is not set + +## +## file: drivers/net/wireless/orinoco/Kconfig +## +CONFIG_HERMES=m +CONFIG_PLX_HERMES=m +CONFIG_TMD_HERMES=m +CONFIG_NORTEL_HERMES=m +CONFIG_PCI_HERMES=m + +## +## file: drivers/pci/hotplug/Kconfig +## +# CONFIG_HOTPLUG_PCI is not set + +## +## file: drivers/pcmcia/Kconfig +## +# CONFIG_PCCARD is not set + +## +## file: drivers/rtc/Kconfig +## +CONFIG_RTC_DRV_CMOS=y +# CONFIG_RTC_DRV_DS1553 is not set +# CONFIG_RTC_DRV_DS1742 is not set +# CONFIG_RTC_DRV_M48T86 is not set +# CONFIG_RTC_DRV_V3020 is not set + +## +## file: drivers/scsi/Kconfig +## +CONFIG_SCSI=y +CONFIG_BLK_DEV_SD=y +# CONFIG_SCSI_MULTI_LUN is not set +# CONFIG_SCSI_CONSTANTS is not set +# CONFIG_SCSI_LOGGING is not set +CONFIG_SCSI_SYM53C8XX_2=m + +## +## file: drivers/spi/Kconfig +## +CONFIG_SPI=y +CONFIG_SPI_BITBANG=m +# CONFIG_SPI_BUTTERFLY is not set + +## +## file: drivers/telephony/Kconfig +## +# CONFIG_PHONE is not set + +## +## file: drivers/tty/Kconfig +## +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +# CONFIG_SERIAL_NONSTANDARD is not set + +## +## file: drivers/tty/serial/Kconfig +## +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_SERIAL_8250_NR_UARTS=4 +CONFIG_SERIAL_8250_RUNTIME_UARTS=4 +# CONFIG_SERIAL_8250_EXTENDED is not set +# CONFIG_SERIAL_JSM is not set + +## +## file: drivers/usb/Kconfig +## +CONFIG_USB=m +# CONFIG_USB_USS720 is not set + +## +## file: drivers/usb/host/Kconfig +## +CONFIG_USB_EHCI_HCD=m +# CONFIG_USB_EHCI_ROOT_HUB_TT is not set +CONFIG_USB_ISP116X_HCD=m +CONFIG_USB_OHCI_HCD=m +CONFIG_USB_UHCI_HCD=m +CONFIG_USB_SL811_HCD=m + +## +## file: drivers/usb/mon/Kconfig +## +CONFIG_USB_MON=y + +## +## file: drivers/video/Kconfig +## +CONFIG_FB=m +CONFIG_FB_COBALT=m + +## +## file: drivers/video/console/Kconfig +## +# CONFIG_VGA_CONSOLE is not set + +## +## file: drivers/w1/Kconfig +## +# CONFIG_W1 is not set + +## +## file: fs/cramfs/Kconfig +## +CONFIG_CRAMFS=y + +## +## file: fs/ext2/Kconfig +## +CONFIG_EXT2_FS=y + +## +## file: fs/ext3/Kconfig +## +CONFIG_EXT3_FS=y + +## +## file: fs/partitions/Kconfig +## +CONFIG_MSDOS_PARTITION=y + +## +## file: init/Kconfig +## +# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set + +## +## file: mm/Kconfig +## +## choice: Memory model +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +## end choice + +## +## file: net/ax25/Kconfig +## +CONFIG_HAMRADIO=y +CONFIG_AX25=m +# CONFIG_AX25_DAMA_SLAVE is not set +CONFIG_NETROM=m +CONFIG_ROSE=m + +## +## file: net/bluetooth/Kconfig +## +# CONFIG_BT is not set + +## +## file: net/decnet/Kconfig +## +# CONFIG_DECNET is not set + +## +## file: net/ipx/Kconfig +## +# CONFIG_IPX is not set + +## +## file: net/irda/Kconfig +## +# CONFIG_IRDA is not set + +## +## file: net/lapb/Kconfig +## +# CONFIG_LAPB is not set + +## +## file: net/wanrouter/Kconfig +## +# CONFIG_WAN_ROUTER is not set + +## +## file: sound/drivers/Kconfig +## +# CONFIG_SND_DUMMY is not set +# CONFIG_SND_VIRMIDI is not set +# CONFIG_SND_MTPAV is not set +# CONFIG_SND_SERIAL_U16550 is not set +# CONFIG_SND_MPU401 is not set + +## +## file: sound/pci/Kconfig +## +CONFIG_SND_AD1889=m +CONFIG_SND_ALI5451=m +CONFIG_SND_ATIIXP=m +CONFIG_SND_ATIIXP_MODEM=m +CONFIG_SND_AU8810=m +CONFIG_SND_AU8820=m +CONFIG_SND_AU8830=m +CONFIG_SND_AZT3328=m +CONFIG_SND_BT87X=m +# CONFIG_SND_BT87X_OVERCLOCK is not set +CONFIG_SND_CA0106=m +CONFIG_SND_CMIPCI=m +CONFIG_SND_CS4281=m +CONFIG_SND_CS46XX=m +# CONFIG_SND_CS46XX_NEW_DSP is not set +CONFIG_SND_EMU10K1=m +CONFIG_SND_EMU10K1X=m +CONFIG_SND_ENS1370=m +CONFIG_SND_ENS1371=m +CONFIG_SND_ES1938=m +CONFIG_SND_ES1968=m +CONFIG_SND_FM801=m +CONFIG_SND_FM801_TEA575X_BOOL=y +CONFIG_SND_HDSP=m +CONFIG_SND_HDSPM=m +CONFIG_SND_ICE1712=m +CONFIG_SND_ICE1724=m +CONFIG_SND_INTEL8X0=m +CONFIG_SND_INTEL8X0M=m +CONFIG_SND_KORG1212=m +CONFIG_SND_MAESTRO3=m +CONFIG_SND_MIXART=m +CONFIG_SND_NM256=m +CONFIG_SND_PCXHR=m +CONFIG_SND_RME32=m +CONFIG_SND_RME96=m +CONFIG_SND_RME9652=m +CONFIG_SND_SONICVIBES=m +CONFIG_SND_TRIDENT=m +CONFIG_SND_VIA82XX=m +CONFIG_SND_VIA82XX_MODEM=m +CONFIG_SND_VX222=m +CONFIG_SND_YMFPCI=m + +## +## file: sound/pci/hda/Kconfig +## +CONFIG_SND_HDA_INTEL=m + +## +## file: unknown +## +# CONFIG_LAN_SAA9730 is not set +# CONFIG_MIPS_ATLAS is not set +# CONFIG_MIPS_SEAD is not set + --- linux-2.6-3.0.0~rc6.orig/debian/config/mipsel/config.loongson-2f +++ linux-2.6-3.0.0~rc6/debian/config/mipsel/config.loongson-2f @@ -0,0 +1,130 @@ +## +## file: arch/mips/Kconfig +## +## choice: System type +CONFIG_MACH_LOONGSON=y +## end choice +## choice: Kernel code model +# CONFIG_32BIT is not set +CONFIG_64BIT=y +## end choice +CONFIG_PCI=y +CONFIG_MIPS32_COMPAT=y +CONFIG_MIPS32_O32=y +CONFIG_MIPS32_N32=y + +## +## file: arch/mips/kernel/cpufreq/Kconfig +## +CONFIG_LOONGSON2_CPUFREQ=m + +## +## file: arch/mips/loongson/Kconfig +## +## choice: Machine Type +CONFIG_LEMOTE_MACH2F=y +## end choice +CONFIG_CS5536_MFGPT=y + +## +## file: drivers/ata/Kconfig +## +CONFIG_ATA=y +CONFIG_ATA_VERBOSE_ERROR=y +CONFIG_PATA_AMD=y + +## +## file: drivers/cpufreq/Kconfig +## +## choice: Default CPUFreq governor +# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set +CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y +# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set +## end choice + +## +## file: drivers/net/Kconfig +## +CONFIG_NET_PCI=y +# CONFIG_PCNET32 is not set +# CONFIG_KSZ884X_PCI is not set +CONFIG_8139TOO=m +CONFIG_8139TOO_TUNE_TWISTER=y + +## +## file: drivers/scsi/Kconfig +## +CONFIG_SCSI=y +CONFIG_BLK_DEV_SD=y + +## +## file: drivers/staging/sm7xx/Kconfig +## +CONFIG_FB_SM7XX=y + +## +## file: drivers/tty/Kconfig +## +CONFIG_VT=y +CONFIG_VT_CONSOLE=y + +## +## file: drivers/tty/serial/Kconfig +## +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +# CONFIG_SERIAL_8250_EXTENDED is not set + +## +## file: drivers/usb/Kconfig +## +CONFIG_USB=m + +## +## file: drivers/usb/host/Kconfig +## +CONFIG_USB_EHCI_HCD=m +# CONFIG_USB_EHCI_ROOT_HUB_TT is not set +CONFIG_USB_ISP116X_HCD=m +CONFIG_USB_OHCI_HCD=m +CONFIG_USB_UHCI_HCD=m +CONFIG_USB_SL811_HCD=m + +## +## file: drivers/usb/mon/Kconfig +## +CONFIG_USB_MON=y + +## +## file: drivers/video/Kconfig +## +CONFIG_VIDEO_OUTPUT_CONTROL=y +CONFIG_FB=y +CONFIG_FB_SIS=y +CONFIG_FB_SIS_300=y +CONFIG_FB_SIS_315=y + +## +## file: drivers/video/backlight/Kconfig +## +CONFIG_LCD_CLASS_DEVICE=y +CONFIG_LCD_PLATFORM=y +CONFIG_BACKLIGHT_GENERIC=m + +## +## file: drivers/video/console/Kconfig +## +# CONFIG_VGA_CONSOLE is not set +CONFIG_FRAMEBUFFER_CONSOLE=y + +## +## file: fs/ext2/Kconfig +## +CONFIG_EXT2_FS=y + +## +## file: fs/ext3/Kconfig +## +CONFIG_EXT3_FS=y + --- linux-2.6-3.0.0~rc6.orig/debian/config/i386/defines +++ linux-2.6-3.0.0~rc6/debian/config/i386/defines @@ -0,0 +1,60 @@ +[base] +flavours: + 486 + 686-pae + amd64 +kernel-arch: x86 + +[description] +part-long-pae: This kernel requires PAE (Physical Address Extension). + This feature is supported by the Intel Pentium Pro/II/III/4/4M/D, Xeon, + Celeron, Core and Atom; AMD Geode NX, Athlon (K7), Duron, Opteron, Sempron, + Turion or Phenom; Transmeta Efficeon; and VIA C7. + +[image] +bootloaders: grub-pc extlinux lilo +configs: + kernelarch-x86/config + +[486_description] +hardware: older PCs +hardware-long: PCs with a single processor not supporting PAE +parts: up + +[486_image] +configs: + kernelarch-x86/config-arch-32 + +[686-pae_description] +hardware: modern PCs +hardware-long: PCs with one or more processors supporting PAE +parts: pae xen + +[686-pae_image] +configs: + kernelarch-x86/config-arch-32 +recommends: libc6-i686 + +[686-pae_image-dbg] +enabled: true + +[686-pae_xen] +dom0-support: true +flavours: + i386 + amd64 + +[amd64_description] +hardware: 64-bit PCs +hardware-long: PCs with AMD64 or Intel 64 processors +parts: xen + +[amd64_image] +configs: + kernelarch-x86/config-arch-64 +recommends: libc6-i686 + +[amd64_xen] +dom0-support: true +flavours: + amd64 --- linux-2.6-3.0.0~rc6.orig/debian/config/i386/none/config.486 +++ linux-2.6-3.0.0~rc6/debian/config/i386/none/config.486 @@ -0,0 +1,133 @@ +## +## file: arch/x86/Kconfig +## +# CONFIG_SMP is not set +CONFIG_X86_32_IRIS=m +CONFIG_X86_UP_APIC=y +CONFIG_X86_UP_IOAPIC=y +# CONFIG_X86_MCE is not set +CONFIG_MATH_EMULATION=y +CONFIG_EISA=y +CONFIG_MCA=y +CONFIG_OLPC=y + +## +## file: arch/x86/Kconfig.cpu +## +## choice: Processor family +CONFIG_M486=y +# CONFIG_M686 is not set +## end choice + +## +## file: drivers/eisa/Kconfig +## +CONFIG_EISA_VLB_PRIMING=y +CONFIG_EISA_PCI_EISA=y +CONFIG_EISA_VIRTUAL_ROOT=y +CONFIG_EISA_NAMES=y + +## +## file: drivers/i2c/busses/Kconfig +## +CONFIG_I2C_ELEKTOR=m +CONFIG_I2C_STUB=m + +## +## file: drivers/input/mouse/Kconfig +## +CONFIG_MOUSE_PS2_OLPC=y + +## +## file: drivers/mca/Kconfig +## +CONFIG_MCA_LEGACY=y +# CONFIG_MCA_PROC_FS is not set + +## +## file: drivers/mtd/chips/Kconfig +## +# CONFIG_MTD_XIP is not set + +## +## file: drivers/net/Kconfig +## +CONFIG_ELMC=m +CONFIG_ELMC_II=m +CONFIG_ULTRAMCA=m +CONFIG_ULTRA32=m +CONFIG_NI5010=m +CONFIG_NE2_MCA=m +CONFIG_IBMLANA=m +CONFIG_LNE390=m +CONFIG_NE3210=m +CONFIG_ES3210=m + +## +## file: drivers/net/hamradio/Kconfig +## +CONFIG_DMASCC=m + +## +## file: drivers/net/tokenring/Kconfig +## +CONFIG_MADGEMC=m + +## +## file: drivers/pci/hotplug/Kconfig +## +CONFIG_HOTPLUG_PCI_COMPAQ_NVRAM=y + +## +## file: drivers/platform/x86/Kconfig +## +CONFIG_XO1_RFKILL=m +CONFIG_XO15_EBOOK=m + +## +## file: drivers/power/Kconfig +## +CONFIG_BATTERY_OLPC=m + +## +## file: drivers/scsi/Kconfig +## +CONFIG_SCSI_FD_MCS=m +CONFIG_SCSI_IBMMCA=m +CONFIG_IBMMCA_SCSI_ORDER_STANDARD=y +# CONFIG_IBMMCA_SCSI_DEV_RESET is not set +CONFIG_SCSI_NCR_D700=m +CONFIG_SCSI_NCR_Q720=m +CONFIG_SCSI_NCR53C8XX_DEFAULT_TAGS=8 +CONFIG_SCSI_NCR53C8XX_MAX_TAGS=4 +CONFIG_SCSI_NCR53C8XX_SYNC=5 +CONFIG_SCSI_SIM710=m + +## +## file: drivers/staging/generic_serial/Kconfig +## +CONFIG_RIO=m +CONFIG_RIO_OLDPCI=y + +## +## file: drivers/staging/tty/Kconfig +## +CONFIG_STALLION=m +CONFIG_ISTALLION=m +CONFIG_DIGIEPCA=m + +## +## file: drivers/tty/Kconfig +## +CONFIG_MOXA_INTELLIO=m + +## +## file: drivers/video/geode/Kconfig +## +CONFIG_FB_GEODE_LX=y + +## +## file: mm/Kconfig +## +# CONFIG_TRANSPARENT_HUGEPAGE is not set + --- linux-2.6-3.0.0~rc6.orig/debian/config/i386/none/config.686-pae +++ linux-2.6-3.0.0~rc6/debian/config/i386/none/config.686-pae @@ -0,0 +1,63 @@ +## +## file: arch/x86/Kconfig +## +## choice: High Memory Support +# CONFIG_NOHIGHMEM is not set +# CONFIG_HIGHMEM4G is not set +CONFIG_HIGHMEM64G=y +## end choice +CONFIG_X86_PAE=y +# CONFIG_MATH_EMULATION is not set +# CONFIG_EISA is not set +# CONFIG_MCA is not set + +## +## file: arch/x86/Kconfig.cpu +## +## choice: Processor family +# CONFIG_M486 is not set +CONFIG_M686=y +## end choice + +## +## file: drivers/i2c/busses/Kconfig +## +# CONFIG_I2C_ELEKTOR is not set +CONFIG_I2C_STUB=m + +## +## file: drivers/net/Kconfig +## +# CONFIG_NI5010 is not set + +## +## file: drivers/net/hamradio/Kconfig +## +# CONFIG_DMASCC is not set + +## +## file: drivers/pci/hotplug/Kconfig +## +# CONFIG_HOTPLUG_PCI_COMPAQ_NVRAM is not set + +## +## file: drivers/staging/generic_serial/Kconfig +## +# CONFIG_SX is not set +# CONFIG_RIO is not set + +## +## file: drivers/staging/tty/Kconfig +## +# CONFIG_DIGIEPCA is not set + +## +## file: drivers/tty/Kconfig +## +# CONFIG_MOXA_INTELLIO is not set + +## +## file: lib/Kconfig.debug +## +# CONFIG_DEBUG_HIGHMEM is not set + --- linux-2.6-3.0.0~rc6.orig/debian/config/armel/config.iop32x +++ linux-2.6-3.0.0~rc6/debian/config/armel/config.iop32x @@ -0,0 +1,715 @@ +## +## file: arch/arm/Kconfig +## +## choice: ARM system type +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_REALVIEW is not set +# CONFIG_ARCH_VERSATILE is not set +# CONFIG_ARCH_AT91 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_EP93XX is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_NETX is not set +# CONFIG_ARCH_H720X is not set +CONFIG_ARCH_IOP32X=y +# CONFIG_ARCH_IOP33X is not set +# CONFIG_ARCH_IXP23XX is not set +# CONFIG_ARCH_IXP2000 is not set +# CONFIG_ARCH_IXP4XX is not set +# CONFIG_ARCH_PNX4008 is not set +# CONFIG_ARCH_PXA is not set +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_SA1100 is not set +# CONFIG_ARCH_S3C2410 is not set +# CONFIG_ARCH_SHARK is not set +# CONFIG_ARCH_OMAP is not set +## end choice +CONFIG_PCI=y +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_CMDLINE="" +# CONFIG_XIP_KERNEL is not set +CONFIG_KEXEC=y +CONFIG_ATAGS_PROC=y +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_NWFPE_XP is not set +# CONFIG_FPE_FASTFPE is not set +# CONFIG_ARTHUR is not set + +## +## file: arch/arm/mach-iop32x/Kconfig +## +CONFIG_MACH_GLANTANK=y +CONFIG_ARCH_IQ80321=y +CONFIG_ARCH_IQ31244=y +CONFIG_MACH_N2100=y +CONFIG_MACH_EM7210=y + +## +## file: arch/arm/mm/Kconfig +## +CONFIG_ARM_THUMB=y + +## +## file: drivers/ata/Kconfig +## +CONFIG_ATA=m +CONFIG_SATA_AHCI=m +CONFIG_SATA_SIL24=m +CONFIG_PDC_ADMA=m +CONFIG_SATA_QSTOR=m +CONFIG_SATA_SX4=m +CONFIG_ATA_PIIX=m +CONFIG_SATA_MV=m +CONFIG_SATA_NV=m +CONFIG_SATA_PROMISE=m +CONFIG_SATA_SIL=m +CONFIG_SATA_SIS=m +CONFIG_SATA_SVW=m +CONFIG_SATA_ULI=m +CONFIG_SATA_VIA=m +CONFIG_SATA_VITESSE=m +CONFIG_PATA_ALI=m +CONFIG_PATA_CMD64X=m +CONFIG_PATA_CS5520=m +CONFIG_PATA_CS5530=m +CONFIG_PATA_EFAR=m +CONFIG_PATA_NETCELL=m +CONFIG_PATA_NS87415=m +CONFIG_PATA_OLDPIIX=m +CONFIG_PATA_PDC2027X=m +CONFIG_PATA_PDC_OLD=m +CONFIG_PATA_SC1200=m +CONFIG_PATA_SERVERWORKS=m +CONFIG_PATA_SIL680=m +CONFIG_PATA_TRIFLEX=m +CONFIG_PATA_VIA=m +CONFIG_PATA_MPIIX=m +CONFIG_PATA_NS87410=m + +## +## file: drivers/block/Kconfig +## +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_UMEM is not set +# CONFIG_BLK_DEV_SX8 is not set +# CONFIG_BLK_DEV_UB is not set +# CONFIG_CDROM_PKTCDVD is not set + +## +## file: drivers/bluetooth/Kconfig +## +# CONFIG_BT_HCIUART is not set +CONFIG_BT_HCIBCM203X=m +CONFIG_BT_HCIBPA10X=m +CONFIG_BT_HCIBFUSB=m +CONFIG_BT_HCIVHCI=m + +## +## file: drivers/char/Kconfig +## +# CONFIG_NVRAM is not set +# CONFIG_DTLK is not set +# CONFIG_APPLICOM is not set +# CONFIG_TELCLOCK is not set + +## +## file: drivers/char/ipmi/Kconfig +## +# CONFIG_IPMI_HANDLER is not set + +## +## file: drivers/char/tpm/Kconfig +## +# CONFIG_TCG_TPM is not set + +## +## file: drivers/dma/Kconfig +## +CONFIG_DMADEVICES=y +CONFIG_INTEL_IOP_ADMA=y +# CONFIG_NET_DMA is not set + +## +## file: drivers/firewire/Kconfig +## +# CONFIG_FIREWIRE is not set + +## +## file: drivers/gpu/drm/Kconfig +## +# CONFIG_DRM is not set + +## +## file: drivers/hwmon/Kconfig +## +CONFIG_HWMON=y +# CONFIG_HWMON_DEBUG_CHIP is not set +# CONFIG_SENSORS_ADM1021 is not set +# CONFIG_SENSORS_ADM1025 is not set +# CONFIG_SENSORS_ADM1026 is not set +# CONFIG_SENSORS_ADM1031 is not set +# CONFIG_SENSORS_ADM9240 is not set +# CONFIG_SENSORS_ASB100 is not set +# CONFIG_SENSORS_ATXP1 is not set +# CONFIG_SENSORS_DS1621 is not set +# CONFIG_SENSORS_F71805F is not set +CONFIG_SENSORS_F75375S=y +# CONFIG_SENSORS_GL518SM is not set +# CONFIG_SENSORS_GL520SM is not set +# CONFIG_SENSORS_IT87 is not set +# CONFIG_SENSORS_LM63 is not set +# CONFIG_SENSORS_LM75 is not set +# CONFIG_SENSORS_LM77 is not set +# CONFIG_SENSORS_LM78 is not set +# CONFIG_SENSORS_LM80 is not set +# CONFIG_SENSORS_LM83 is not set +# CONFIG_SENSORS_LM85 is not set +# CONFIG_SENSORS_LM87 is not set +# CONFIG_SENSORS_LM90 is not set +# CONFIG_SENSORS_LM92 is not set +# CONFIG_SENSORS_MAX1619 is not set +# CONFIG_SENSORS_PC87360 is not set +# CONFIG_SENSORS_PCF8591 is not set +# CONFIG_SENSORS_SIS5595 is not set +# CONFIG_SENSORS_SMSC47M1 is not set +# CONFIG_SENSORS_SMSC47B397 is not set +# CONFIG_SENSORS_VIA686A is not set +# CONFIG_SENSORS_VT8231 is not set +# CONFIG_SENSORS_W83781D is not set +# CONFIG_SENSORS_W83L785TS is not set +# CONFIG_SENSORS_W83627HF is not set +# CONFIG_SENSORS_W83627EHF is not set + +## +## file: drivers/i2c/Kconfig +## +CONFIG_I2C=y +CONFIG_I2C_CHARDEV=y +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set + +## +## file: drivers/i2c/busses/Kconfig +## +# CONFIG_I2C_ALI1535 is not set +# CONFIG_I2C_ALI1563 is not set +# CONFIG_I2C_ALI15X3 is not set +# CONFIG_I2C_AMD756 is not set +# CONFIG_I2C_AMD8111 is not set +# CONFIG_I2C_I801 is not set +# CONFIG_I2C_PIIX4 is not set +# CONFIG_I2C_NFORCE2 is not set +# CONFIG_I2C_SIS5595 is not set +# CONFIG_I2C_SIS630 is not set +# CONFIG_I2C_SIS96X is not set +# CONFIG_I2C_VIA is not set +# CONFIG_I2C_VIAPRO is not set +CONFIG_I2C_IOP3XX=y +# CONFIG_I2C_PARPORT_LIGHT is not set +# CONFIG_I2C_PCA_ISA is not set +# CONFIG_I2C_STUB is not set + +## +## file: drivers/ide/Kconfig +## +CONFIG_IDE=m +# CONFIG_BLK_DEV_IDE_SATA is not set +CONFIG_IDE_GD=m +CONFIG_BLK_DEV_IDECD=m +CONFIG_BLK_DEV_IDETAPE=m +CONFIG_IDE_GENERIC=m +CONFIG_BLK_DEV_OFFBOARD=y +# CONFIG_BLK_DEV_GENERIC is not set +CONFIG_BLK_DEV_OPTI621=m +# CONFIG_BLK_DEV_AEC62XX is not set +# CONFIG_BLK_DEV_ALI15X3 is not set +# CONFIG_BLK_DEV_AMD74XX is not set +# CONFIG_BLK_DEV_CMD64X is not set +# CONFIG_BLK_DEV_TRIFLEX is not set +CONFIG_BLK_DEV_CY82C693=m +# CONFIG_BLK_DEV_CS5520 is not set +# CONFIG_BLK_DEV_CS5530 is not set +CONFIG_BLK_DEV_HPT366=m +# CONFIG_BLK_DEV_SC1200 is not set +# CONFIG_BLK_DEV_PIIX is not set +# CONFIG_BLK_DEV_IT821X is not set +# CONFIG_BLK_DEV_NS87415 is not set +# CONFIG_BLK_DEV_PDC202XX_OLD is not set +# CONFIG_BLK_DEV_PDC202XX_NEW is not set +# CONFIG_BLK_DEV_SVWKS is not set +# CONFIG_BLK_DEV_SIIMAGE is not set +CONFIG_BLK_DEV_SL82C105=m +# CONFIG_BLK_DEV_SLC90E66 is not set +CONFIG_BLK_DEV_TRM290=m +# CONFIG_BLK_DEV_VIA82CXXX is not set + +## +## file: drivers/input/gameport/Kconfig +## +CONFIG_GAMEPORT=m + +## +## file: drivers/input/joystick/Kconfig +## +CONFIG_INPUT_JOYSTICK=y + +## +## file: drivers/input/keyboard/Kconfig +## +CONFIG_INPUT_KEYBOARD=y +CONFIG_KEYBOARD_ATKBD=m +# CONFIG_KEYBOARD_LKKBD is not set +# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set + +## +## file: drivers/input/serio/Kconfig +## +CONFIG_SERIO=m +CONFIG_SERIO_SERPORT=m +# CONFIG_SERIO_PCIPS2 is not set +CONFIG_SERIO_LIBPS2=m +# CONFIG_SERIO_RAW is not set + +## +## file: drivers/input/touchscreen/Kconfig +## +CONFIG_INPUT_TOUCHSCREEN=y + +## +## file: drivers/leds/Kconfig +## +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y +CONFIG_LEDS_PCA9532=y +# CONFIG_LEDS_TRIGGER_IDE_DISK is not set + +## +## file: drivers/media/Kconfig +## +CONFIG_DVB_CORE=m + +## +## file: drivers/media/radio/Kconfig +## +# CONFIG_RADIO_MAXIRADIO is not set + +## +## file: drivers/message/fusion/Kconfig +## +CONFIG_FUSION=y +CONFIG_FUSION_SPI=m +CONFIG_FUSION_FC=m +CONFIG_FUSION_SAS=m +CONFIG_FUSION_MAX_SGE=40 +CONFIG_FUSION_CTL=m + +## +## file: drivers/message/i2o/Kconfig +## +# CONFIG_I2O is not set + +## +## file: drivers/mmc/Kconfig +## +# CONFIG_MMC is not set + +## +## file: drivers/mtd/Kconfig +## +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +CONFIG_MTD_REDBOOT_PARTS=y +CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1 +# CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED is not set +# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set +CONFIG_MTD_CMDLINE_PARTS=y +# CONFIG_MTD_AFS_PARTS is not set +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +CONFIG_FTL=m +CONFIG_NFTL=m +# CONFIG_INFTL is not set +# CONFIG_RFD_FTL is not set + +## +## file: drivers/mtd/chips/Kconfig +## +CONFIG_MTD_CFI=y +CONFIG_MTD_JEDECPROBE=y +CONFIG_MTD_CFI_ADV_OPTIONS=y +## choice: Flash cmd/query data swapping +CONFIG_MTD_CFI_NOSWAP=y +# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set +# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set +## end choice +CONFIG_MTD_CFI_GEOMETRY=y +CONFIG_MTD_MAP_BANK_WIDTH_1=y +CONFIG_MTD_MAP_BANK_WIDTH_2=y +CONFIG_MTD_MAP_BANK_WIDTH_4=y +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set +CONFIG_MTD_CFI_I1=y +CONFIG_MTD_CFI_I2=y +# CONFIG_MTD_CFI_I4 is not set +# CONFIG_MTD_CFI_I8 is not set +# CONFIG_MTD_OTP is not set +CONFIG_MTD_CFI_INTELEXT=y +CONFIG_MTD_CFI_AMDSTD=m +CONFIG_MTD_CFI_STAA=m +CONFIG_MTD_RAM=m +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set + +## +## file: drivers/mtd/devices/Kconfig +## +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_DATAFLASH is not set +# CONFIG_MTD_M25P80 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_PHRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLOCK2MTD is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOC2001PLUS is not set + +## +## file: drivers/mtd/maps/Kconfig +## +CONFIG_MTD_COMPLEX_MAPPINGS=y +CONFIG_MTD_PHYSMAP=y +CONFIG_MTD_PHYSMAP_START=0x0 +CONFIG_MTD_PHYSMAP_LEN=0x0 +CONFIG_MTD_PHYSMAP_BANKWIDTH=1 +# CONFIG_MTD_ARM_INTEGRATOR is not set +# CONFIG_MTD_PCI is not set +CONFIG_MTD_PLATRAM=m + +## +## file: drivers/mtd/nand/Kconfig +## +CONFIG_MTD_NAND=m +# CONFIG_MTD_NAND_VERIFY_WRITE is not set +# CONFIG_MTD_NAND_DISKONCHIP is not set + +## +## file: drivers/mtd/onenand/Kconfig +## +# CONFIG_MTD_ONENAND is not set + +## +## file: drivers/net/Kconfig +## +# CONFIG_HAPPYMEAL is not set +# CONFIG_SUNGEM is not set +# CONFIG_CASSINI is not set +# CONFIG_NET_VENDOR_3COM is not set +# CONFIG_SMC91X is not set +# CONFIG_DM9000 is not set +# CONFIG_HP100 is not set +# CONFIG_NET_PCI is not set + +## +## file: drivers/net/arcnet/Kconfig +## +# CONFIG_ARCNET is not set + +## +## file: drivers/net/phy/Kconfig +## +CONFIG_PHYLIB=m +CONFIG_MARVELL_PHY=m +CONFIG_DAVICOM_PHY=m +CONFIG_QSEMI_PHY=m +CONFIG_LXT_PHY=m +CONFIG_CICADA_PHY=m + +## +## file: drivers/net/tokenring/Kconfig +## +# CONFIG_TR is not set + +## +## file: drivers/net/tulip/Kconfig +## +# CONFIG_NET_TULIP is not set + +## +## file: drivers/net/wireless/Kconfig +## +CONFIG_ATMEL=m +CONFIG_PCI_ATMEL=m + +## +## file: drivers/net/wireless/ipw2x00/Kconfig +## +CONFIG_IPW2100=m +# CONFIG_IPW2100_MONITOR is not set +# CONFIG_IPW2100_DEBUG is not set +CONFIG_IPW2200=m +CONFIG_IPW2200_MONITOR=y +# CONFIG_IPW2200_DEBUG is not set + +## +## file: drivers/net/wireless/orinoco/Kconfig +## +CONFIG_HERMES=m +CONFIG_PLX_HERMES=m +CONFIG_TMD_HERMES=m +CONFIG_NORTEL_HERMES=m +CONFIG_PCI_HERMES=m + +## +## file: drivers/pcmcia/Kconfig +## +# CONFIG_PCCARD is not set + +## +## file: drivers/rtc/Kconfig +## +# CONFIG_RTC_DRV_DS1672 is not set +CONFIG_RTC_DRV_RS5C372=y +# CONFIG_RTC_DRV_X1205 is not set +# CONFIG_RTC_DRV_PCF8563 is not set +# CONFIG_RTC_DRV_M48T86 is not set + +## +## file: drivers/scsi/Kconfig +## +# CONFIG_SCSI_CONSTANTS is not set +# CONFIG_SCSI_LOGGING is not set +# CONFIG_SCSI_ACARD is not set + +## +## file: drivers/spi/Kconfig +## +CONFIG_SPI=y +# CONFIG_SPI_BITBANG is not set + +## +## file: drivers/tty/Kconfig +## +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +# CONFIG_SERIAL_NONSTANDARD is not set + +## +## file: drivers/tty/serial/Kconfig +## +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_SERIAL_8250_NR_UARTS=2 +CONFIG_SERIAL_8250_RUNTIME_UARTS=2 +# CONFIG_SERIAL_8250_EXTENDED is not set +# CONFIG_SERIAL_JSM is not set + +## +## file: drivers/usb/Kconfig +## +CONFIG_USB=m + +## +## file: drivers/usb/atm/Kconfig +## +CONFIG_USB_ATM=m +CONFIG_USB_SPEEDTOUCH=m + +## +## file: drivers/usb/host/Kconfig +## +CONFIG_USB_EHCI_HCD=m +CONFIG_USB_EHCI_ROOT_HUB_TT=y +CONFIG_USB_ISP116X_HCD=m +CONFIG_USB_OHCI_HCD=m +CONFIG_USB_UHCI_HCD=m +CONFIG_USB_SL811_HCD=m + +## +## file: drivers/video/Kconfig +## +# CONFIG_FB is not set + +## +## file: drivers/video/console/Kconfig +## +# CONFIG_VGA_CONSOLE is not set + +## +## file: drivers/w1/Kconfig +## +# CONFIG_W1 is not set + +## +## file: drivers/watchdog/Kconfig +## +# CONFIG_PCIPCWATCHDOG is not set +# CONFIG_WDTPCI is not set +# CONFIG_USBPCWATCHDOG is not set + +## +## file: fs/Kconfig.binfmt +## +CONFIG_BINFMT_AOUT=m + +## +## file: fs/partitions/Kconfig +## +CONFIG_ACORN_PARTITION=y +# CONFIG_ACORN_PARTITION_CUMANA is not set +# CONFIG_ACORN_PARTITION_EESOX is not set +CONFIG_ACORN_PARTITION_ICS=y +# CONFIG_ACORN_PARTITION_ADFS is not set +# CONFIG_ACORN_PARTITION_POWERTEC is not set +CONFIG_ACORN_PARTITION_RISCIX=y +CONFIG_OSF_PARTITION=y +CONFIG_AMIGA_PARTITION=y +CONFIG_ATARI_PARTITION=y +CONFIG_MAC_PARTITION=y +CONFIG_BSD_DISKLABEL=y +CONFIG_MINIX_SUBPARTITION=y +CONFIG_SOLARIS_X86_PARTITION=y +CONFIG_UNIXWARE_DISKLABEL=y +CONFIG_LDM_PARTITION=y +# CONFIG_LDM_DEBUG is not set +CONFIG_SGI_PARTITION=y +CONFIG_ULTRIX_PARTITION=y +CONFIG_SUN_PARTITION=y +CONFIG_EFI_PARTITION=y + +## +## file: init/Kconfig +## +CONFIG_LOG_BUF_SHIFT=14 + +## +## file: kernel/Kconfig.preempt +## +## choice: Preemption Model +# CONFIG_PREEMPT is not set +## end choice + +## +## file: mm/Kconfig +## +## choice: Memory model +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +## end choice + +## +## file: net/ax25/Kconfig +## +CONFIG_HAMRADIO=y +CONFIG_AX25=m +# CONFIG_AX25_DAMA_SLAVE is not set +CONFIG_NETROM=m +CONFIG_ROSE=m + +## +## file: net/bridge/netfilter/Kconfig +## +# CONFIG_BRIDGE_NF_EBTABLES is not set + +## +## file: net/decnet/Kconfig +## +CONFIG_DECNET=m +# CONFIG_DECNET_ROUTER is not set + +## +## file: net/decnet/netfilter/Kconfig +## +# CONFIG_DECNET_NF_GRABULATOR is not set + +## +## file: net/ipx/Kconfig +## +CONFIG_IPX=m +CONFIG_IPX_INTERN=y + +## +## file: net/irda/Kconfig +## +# CONFIG_IRDA is not set + +## +## file: net/lapb/Kconfig +## +# CONFIG_LAPB is not set + +## +## file: net/wanrouter/Kconfig +## +# CONFIG_WAN_ROUTER is not set + +## +## file: sound/drivers/Kconfig +## +CONFIG_SND_DUMMY=m +# CONFIG_SND_VIRMIDI is not set +CONFIG_SND_MTPAV=m +CONFIG_SND_SERIAL_U16550=m +CONFIG_SND_MPU401=m + +## +## file: sound/pci/Kconfig +## +# CONFIG_SND_AD1889 is not set +CONFIG_SND_ALS300=m +# CONFIG_SND_ALI5451 is not set +# CONFIG_SND_ATIIXP is not set +# CONFIG_SND_ATIIXP_MODEM is not set +# CONFIG_SND_AU8810 is not set +# CONFIG_SND_AU8820 is not set +# CONFIG_SND_AU8830 is not set +# CONFIG_SND_AZT3328 is not set +# CONFIG_SND_BT87X is not set +# CONFIG_SND_CA0106 is not set +# CONFIG_SND_CMIPCI is not set +# CONFIG_SND_CS4281 is not set +# CONFIG_SND_CS46XX is not set +# CONFIG_SND_EMU10K1 is not set +# CONFIG_SND_EMU10K1X is not set +# CONFIG_SND_ENS1370 is not set +# CONFIG_SND_ENS1371 is not set +# CONFIG_SND_ES1938 is not set +# CONFIG_SND_ES1968 is not set +# CONFIG_SND_FM801 is not set +# CONFIG_SND_HDSP is not set +# CONFIG_SND_HDSPM is not set +# CONFIG_SND_ICE1712 is not set +# CONFIG_SND_ICE1724 is not set +# CONFIG_SND_INTEL8X0 is not set +# CONFIG_SND_INTEL8X0M is not set +# CONFIG_SND_KORG1212 is not set +# CONFIG_SND_MAESTRO3 is not set +# CONFIG_SND_MIXART is not set +# CONFIG_SND_NM256 is not set +CONFIG_SND_PCXHR=m +CONFIG_SND_RIPTIDE=m +# CONFIG_SND_RME32 is not set +# CONFIG_SND_RME96 is not set +# CONFIG_SND_RME9652 is not set +# CONFIG_SND_SONICVIBES is not set +# CONFIG_SND_TRIDENT is not set +# CONFIG_SND_VIA82XX is not set +# CONFIG_SND_VIA82XX_MODEM is not set +# CONFIG_SND_VX222 is not set +# CONFIG_SND_YMFPCI is not set + +## +## file: sound/pci/hda/Kconfig +## +# CONFIG_SND_HDA_INTEL is not set + + --- linux-2.6-3.0.0~rc6.orig/debian/config/armel/defines +++ linux-2.6-3.0.0~rc6/debian/config/armel/defines @@ -0,0 +1,63 @@ +[base] +flavours: + iop32x + kirkwood + orion5x + versatile +kernel-arch: arm + +[image] +suggests: fdutils + +[iop32x_build] +image-file: arch/arm/boot/zImage + +[iop32x_description] +hardware: IOP32x +hardware-long: IOP32x based systems (Thecus N2100, etc) + +[iop32x_image] +# Thecus N2100: 1441792 - 8 = 1441784 +check-size: 1441784 + +[ixp4xx_build] +image-file: arch/arm/boot/zImage + +[ixp4xx_description] +hardware: IXP4xx +hardware-long: IXP4xx based systems (Linksys NSLU2, etc) + +[ixp4xx_image] +# Linksys NSLU2: 1441792 - 16 - 16 = 1441760 +check-size: 1441760 + +[kirkwood_build] +image-file: arch/arm/boot/zImage + +[kirkwood_description] +hardware: Marvell Kirkwood +hardware-long: Marvell Kirkwood based systems (SheevaPlug, QNAP TS-119/TS-219, etc) + +[kirkwood_image] +recommends: uboot-mkimage +# SheevaPlug: 4194304 - 8 - 64 = 4194232 +# QNAP TS-119/TS-219: 2097152 - 8 - 64 = 2097080 +check-size: 2097080 + +[orion5x_build] +image-file: arch/arm/boot/zImage + +[orion5x_description] +hardware: Marvell Orion +hardware-long: Marvell Orion 5181, 5182 and 5281 based systems (QNAP TS-109/TS-209, etc) + +[orion5x_image] +recommends: uboot-mkimage +# D-Link DNS-323: 1572864 - 8 - 64 = 1572792 +# HP Media Vault mv2120: ca 2 MB +# QNAP TS-109/TS-209 & TS-409: 2097152 - 8 - 64 = 2097080 +check-size: 1572792 + +[versatile_description] +hardware: Versatile +hardware-long: Versatile systems (PB, AB, Qemu) --- linux-2.6-3.0.0~rc6.orig/debian/config/armel/config.kirkwood +++ linux-2.6-3.0.0~rc6/debian/config/armel/config.kirkwood @@ -0,0 +1,641 @@ +## +## file: arch/arm/Kconfig +## +## choice: ARM system type +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_REALVIEW is not set +# CONFIG_ARCH_VERSATILE is not set +# CONFIG_ARCH_AT91 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_EP93XX is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_MXC is not set +# CONFIG_ARCH_NETX is not set +# CONFIG_ARCH_H720X is not set +# CONFIG_ARCH_IOP13XX is not set +# CONFIG_ARCH_IOP32X is not set +# CONFIG_ARCH_IOP33X is not set +# CONFIG_ARCH_IXP23XX is not set +# CONFIG_ARCH_IXP2000 is not set +# CONFIG_ARCH_IXP4XX is not set +CONFIG_ARCH_KIRKWOOD=y +# CONFIG_ARCH_ORION5X is not set +# CONFIG_ARCH_KS8695 is not set +# CONFIG_ARCH_PNX4008 is not set +# CONFIG_ARCH_PXA is not set +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_SA1100 is not set +# CONFIG_ARCH_S3C2410 is not set +# CONFIG_ARCH_SHARK is not set +# CONFIG_ARCH_DAVINCI is not set +# CONFIG_ARCH_OMAP is not set +## end choice +CONFIG_PCI=y +CONFIG_LEDS=y +CONFIG_LEDS_CPU=y +CONFIG_UACCESS_WITH_MEMCPY=y +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_CMDLINE="" +# CONFIG_XIP_KERNEL is not set +CONFIG_KEXEC=y +CONFIG_ATAGS_PROC=y +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_NWFPE_XP is not set +# CONFIG_FPE_FASTFPE is not set +# CONFIG_VFP is not set +# CONFIG_ARTHUR is not set + +## +## file: arch/arm/mach-kirkwood/Kconfig +## +CONFIG_MACH_DB88F6281_BP=y +CONFIG_MACH_RD88F6192_NAS=y +CONFIG_MACH_RD88F6281=y +CONFIG_MACH_MV88F6281GTW_GE=y +CONFIG_MACH_SHEEVAPLUG=y +CONFIG_MACH_ESATA_SHEEVAPLUG=y +CONFIG_MACH_GURUPLUG=y +CONFIG_MACH_TS219=y +CONFIG_MACH_TS41X=y +CONFIG_MACH_DOCKSTAR=y +CONFIG_MACH_OPENRD_BASE=y +CONFIG_MACH_OPENRD_CLIENT=y +CONFIG_MACH_OPENRD_ULTIMATE=y +CONFIG_MACH_T5325=y + +## +## file: arch/arm/mm/Kconfig +## +CONFIG_ARM_THUMB=y +# CONFIG_CPU_ICACHE_DISABLE is not set +# CONFIG_CPU_DCACHE_DISABLE is not set +# CONFIG_CPU_DCACHE_WRITETHROUGH is not set + +## +## file: drivers/ata/Kconfig +## +CONFIG_ATA=m +CONFIG_SATA_AHCI=m +# CONFIG_SATA_INIC162X is not set +# CONFIG_SATA_SIL24 is not set +CONFIG_ATA_SFF=y +# CONFIG_PDC_ADMA is not set +# CONFIG_SATA_QSTOR is not set +# CONFIG_SATA_SX4 is not set +# CONFIG_ATA_PIIX is not set +CONFIG_SATA_MV=m +# CONFIG_SATA_NV is not set +# CONFIG_SATA_PROMISE is not set +# CONFIG_SATA_SIL is not set +# CONFIG_SATA_SIS is not set +# CONFIG_SATA_SVW is not set +# CONFIG_SATA_ULI is not set +# CONFIG_SATA_VIA is not set +# CONFIG_SATA_VITESSE is not set +# CONFIG_PATA_ALI is not set +# CONFIG_PATA_AMD is not set +# CONFIG_PATA_ARTOP is not set +# CONFIG_PATA_ATIIXP is not set +# CONFIG_PATA_CMD64X is not set +# CONFIG_PATA_CS5520 is not set +# CONFIG_PATA_CS5530 is not set +# CONFIG_PATA_CYPRESS is not set +# CONFIG_PATA_EFAR is not set +# CONFIG_PATA_HPT366 is not set +# CONFIG_PATA_HPT37X is not set +# CONFIG_PATA_HPT3X2N is not set +# CONFIG_PATA_HPT3X3 is not set +# CONFIG_PATA_IT8213 is not set +# CONFIG_PATA_IT821X is not set +# CONFIG_PATA_JMICRON is not set +# CONFIG_PATA_MARVELL is not set +# CONFIG_PATA_NETCELL is not set +# CONFIG_PATA_NINJA32 is not set +# CONFIG_PATA_NS87415 is not set +# CONFIG_PATA_OLDPIIX is not set +# CONFIG_PATA_OPTIDMA is not set +# CONFIG_PATA_PDC2027X is not set +# CONFIG_PATA_PDC_OLD is not set +# CONFIG_PATA_RADISYS is not set +# CONFIG_PATA_SC1200 is not set +# CONFIG_PATA_SCH is not set +# CONFIG_PATA_SERVERWORKS is not set +# CONFIG_PATA_SIL680 is not set +# CONFIG_PATA_SIS is not set +# CONFIG_PATA_TRIFLEX is not set +# CONFIG_PATA_VIA is not set +# CONFIG_PATA_WINBOND is not set +# CONFIG_PATA_CMD640_PCI is not set +# CONFIG_PATA_MPIIX is not set +# CONFIG_PATA_NS87410 is not set +# CONFIG_PATA_OPTI is not set +# CONFIG_PATA_PLATFORM is not set +# CONFIG_PATA_RZ1000 is not set +# CONFIG_ATA_GENERIC is not set + +## +## file: drivers/bluetooth/Kconfig +## +# CONFIG_BT_HCIUART is not set +CONFIG_BT_HCIBCM203X=m +CONFIG_BT_HCIBPA10X=m +CONFIG_BT_HCIBFUSB=m +CONFIG_BT_HCIVHCI=m + +## +## file: drivers/cpuidle/Kconfig +## +CONFIG_CPU_IDLE=y + +## +## file: drivers/crypto/Kconfig +## +CONFIG_CRYPTO_DEV_MV_CESA=m + +## +## file: drivers/dma/Kconfig +## +CONFIG_DMADEVICES=y +CONFIG_MV_XOR=y +# CONFIG_NET_DMA is not set + +## +## file: drivers/gpio/Kconfig +## +CONFIG_GPIO_SYSFS=y + +## +## file: drivers/gpu/drm/Kconfig +## +# CONFIG_DRM is not set + +## +## file: drivers/i2c/Kconfig +## +CONFIG_I2C=y +CONFIG_I2C_CHARDEV=y + +## +## file: drivers/i2c/busses/Kconfig +## +CONFIG_I2C_MV64XXX=y + +## +## file: drivers/input/gameport/Kconfig +## +CONFIG_GAMEPORT=m + +## +## file: drivers/input/joystick/Kconfig +## +CONFIG_INPUT_JOYSTICK=y + +## +## file: drivers/input/keyboard/Kconfig +## +CONFIG_KEYBOARD_GPIO=m + +## +## file: drivers/input/touchscreen/Kconfig +## +CONFIG_INPUT_TOUCHSCREEN=y + +## +## file: drivers/isdn/Kconfig +## +CONFIG_ISDN=y +CONFIG_ISDN_CAPI=m + +## +## file: drivers/isdn/capi/Kconfig +## +CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON=y +CONFIG_ISDN_CAPI_MIDDLEWARE=y +CONFIG_ISDN_CAPI_CAPI20=m +CONFIG_ISDN_CAPI_CAPIDRV=m + +## +## file: drivers/isdn/hardware/avm/Kconfig +## +CONFIG_CAPI_AVM=y +CONFIG_ISDN_DRV_AVMB1_B1PCI=m +CONFIG_ISDN_DRV_AVMB1_B1PCIV4=y +CONFIG_ISDN_DRV_AVMB1_B1PCMCIA=m +CONFIG_ISDN_DRV_AVMB1_AVM_CS=m +CONFIG_ISDN_DRV_AVMB1_T1PCI=m +CONFIG_ISDN_DRV_AVMB1_C4=m + +## +## file: drivers/isdn/hardware/eicon/Kconfig +## +CONFIG_CAPI_EICON=y +CONFIG_ISDN_DIVAS=m +CONFIG_ISDN_DIVAS_BRIPCI=y +CONFIG_ISDN_DIVAS_PRIPCI=y +CONFIG_ISDN_DIVAS_DIVACAPI=m +CONFIG_ISDN_DIVAS_USERIDI=m +CONFIG_ISDN_DIVAS_MAINT=m + +## +## file: drivers/leds/Kconfig +## +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y +CONFIG_LEDS_GPIO=y +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_TRIGGER_TIMER=y +CONFIG_LEDS_TRIGGER_DEFAULT_ON=y + +## +## file: drivers/media/Kconfig +## +CONFIG_DVB_CORE=m + +## +## file: drivers/mmc/Kconfig +## +CONFIG_MMC=m + +## +## file: drivers/mmc/card/Kconfig +## +CONFIG_MMC_BLOCK=m + +## +## file: drivers/mmc/host/Kconfig +## +CONFIG_MMC_MVSDIO=m + +## +## file: drivers/mtd/Kconfig +## +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_REDBOOT_PARTS is not set +CONFIG_MTD_CMDLINE_PARTS=y +# CONFIG_MTD_AFS_PARTS is not set +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +CONFIG_FTL=m +CONFIG_NFTL=m +# CONFIG_NFTL_RW is not set +# CONFIG_INFTL is not set +# CONFIG_RFD_FTL is not set +# CONFIG_SSFDC is not set +# CONFIG_MTD_OOPS is not set + +## +## file: drivers/mtd/chips/Kconfig +## +CONFIG_MTD_CFI=y +CONFIG_MTD_JEDECPROBE=y +CONFIG_MTD_CFI_ADV_OPTIONS=y +## choice: Flash cmd/query data swapping +CONFIG_MTD_CFI_NOSWAP=y +# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set +# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set +## end choice +CONFIG_MTD_CFI_GEOMETRY=y +CONFIG_MTD_MAP_BANK_WIDTH_1=y +CONFIG_MTD_MAP_BANK_WIDTH_2=y +CONFIG_MTD_MAP_BANK_WIDTH_4=y +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set +CONFIG_MTD_CFI_I1=y +CONFIG_MTD_CFI_I2=y +CONFIG_MTD_CFI_I4=y +# CONFIG_MTD_CFI_I8 is not set +# CONFIG_MTD_OTP is not set +CONFIG_MTD_CFI_INTELEXT=y +CONFIG_MTD_CFI_AMDSTD=m +CONFIG_MTD_CFI_STAA=m +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set + +## +## file: drivers/mtd/devices/Kconfig +## +# CONFIG_MTD_PMC551 is not set +CONFIG_MTD_M25P80=y +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_PHRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLOCK2MTD is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOC2001PLUS is not set + +## +## file: drivers/mtd/maps/Kconfig +## +# CONFIG_MTD_COMPLEX_MAPPINGS is not set +CONFIG_MTD_PHYSMAP=y +CONFIG_MTD_PHYSMAP_START=0x0 +CONFIG_MTD_PHYSMAP_LEN=0x0 +CONFIG_MTD_PHYSMAP_BANKWIDTH=0 +# CONFIG_MTD_ARM_INTEGRATOR is not set +# CONFIG_MTD_IMPA7 is not set +# CONFIG_MTD_INTEL_VR_NOR is not set +# CONFIG_MTD_PLATRAM is not set + +## +## file: drivers/mtd/nand/Kconfig +## +# CONFIG_MTD_NAND_ECC_SMC is not set +CONFIG_MTD_NAND=y +# CONFIG_MTD_NAND_VERIFY_WRITE is not set +# CONFIG_MTD_NAND_MUSEUM_IDS is not set +# CONFIG_MTD_NAND_DISKONCHIP is not set +# CONFIG_MTD_NAND_CAFE is not set +# CONFIG_MTD_NAND_PLATFORM is not set +# CONFIG_MTD_ALAUDA is not set +CONFIG_MTD_NAND_ORION=y + +## +## file: drivers/mtd/onenand/Kconfig +## +# CONFIG_MTD_ONENAND is not set + +## +## file: drivers/mtd/ubi/Kconfig +## +CONFIG_MTD_UBI=y + +## +## file: drivers/net/Kconfig +## +# CONFIG_NET_ETHERNET is not set +CONFIG_NETDEV_1000=y +# CONFIG_DL2K is not set +# CONFIG_E1000 is not set +# CONFIG_E1000E is not set +# CONFIG_IP1000 is not set +# CONFIG_IGB is not set +# CONFIG_NS83820 is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_R8169 is not set +# CONFIG_SIS190 is not set +# CONFIG_SKGE is not set +# CONFIG_SKY2 is not set +# CONFIG_VIA_VELOCITY is not set +# CONFIG_TIGON3 is not set +# CONFIG_BNX2 is not set +CONFIG_MV643XX_ETH=m +# CONFIG_QLA3XXX is not set +# CONFIG_ATL1 is not set +# CONFIG_NETDEV_10000 is not set +# CONFIG_BNX2X is not set + +## +## file: drivers/net/arcnet/Kconfig +## +# CONFIG_ARCNET is not set + +## +## file: drivers/net/phy/Kconfig +## +#. Turned off because this causes networking on some Kirkwood machines to fail +# CONFIG_MARVELL_PHY is not set +#. Turned off to avoid namespace collisions +# CONFIG_FIXED_PHY is not set + +## +## file: drivers/net/wireless/mwifiex/Kconfig +## +CONFIG_MWIFIEX=m +CONFIG_MWIFIEX_SDIO=m + +## +## file: drivers/pcmcia/Kconfig +## +# CONFIG_PCCARD is not set + +## +## file: drivers/rtc/Kconfig +## +CONFIG_RTC_DRV_S35390A=y +CONFIG_RTC_DRV_MV=y + +## +## file: drivers/scsi/Kconfig +## +# CONFIG_BLK_DEV_3W_XXXX_RAID is not set +# CONFIG_SCSI_3W_9XXX is not set +# CONFIG_SCSI_AACRAID is not set +# CONFIG_SCSI_AIC7XXX_OLD is not set +# CONFIG_SCSI_DPT_I2O is not set +# CONFIG_SCSI_ARCMSR is not set +# CONFIG_SCSI_HPTIOP is not set +# CONFIG_SCSI_DMX3191D is not set +# CONFIG_SCSI_FUTURE_DOMAIN is not set +# CONFIG_SCSI_IPS is not set +# CONFIG_SCSI_INITIO is not set +# CONFIG_SCSI_INIA100 is not set +# CONFIG_SCSI_PPA is not set +# CONFIG_SCSI_IMM is not set +# CONFIG_SCSI_STEX is not set +# CONFIG_SCSI_SYM53C8XX_2 is not set +# CONFIG_SCSI_IPR is not set +# CONFIG_SCSI_QLOGIC_1280 is not set +# CONFIG_SCSI_LPFC is not set +# CONFIG_SCSI_DC395x is not set +# CONFIG_SCSI_DC390T is not set +# CONFIG_SCSI_NSP32 is not set + +## +## file: drivers/scsi/aic7xxx/Kconfig.aic79xx +## +# CONFIG_SCSI_AIC79XX is not set + +## +## file: drivers/scsi/aic7xxx/Kconfig.aic7xxx +## +# CONFIG_SCSI_AIC7XXX is not set + +## +## file: drivers/scsi/aic94xx/Kconfig +## +# CONFIG_SCSI_AIC94XX is not set + +## +## file: drivers/scsi/megaraid/Kconfig.megaraid +## +# CONFIG_MEGARAID_NEWGEN is not set +# CONFIG_MEGARAID_LEGACY is not set +# CONFIG_MEGARAID_SAS is not set + +## +## file: drivers/scsi/mvsas/Kconfig +## +# CONFIG_SCSI_MVSAS is not set + +## +## file: drivers/scsi/qla2xxx/Kconfig +## +# CONFIG_SCSI_QLA_FC is not set + +## +## file: drivers/scsi/qla4xxx/Kconfig +## +# CONFIG_SCSI_QLA_ISCSI is not set + +## +## file: drivers/spi/Kconfig +## +CONFIG_SPI_ORION=y + +## +## file: drivers/ssb/Kconfig +## +# CONFIG_SSB is not set + +## +## file: drivers/staging/xgifb/Kconfig +## +CONFIG_FB_XGI=m + +## +## file: drivers/tty/serial/Kconfig +## +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_SERIAL_8250_PCI=y +CONFIG_SERIAL_8250_NR_UARTS=4 +CONFIG_SERIAL_8250_RUNTIME_UARTS=2 +# CONFIG_SERIAL_8250_EXTENDED is not set + +## +## file: drivers/usb/Kconfig +## +CONFIG_USB_SUPPORT=y +CONFIG_USB=m + +## +## file: drivers/usb/atm/Kconfig +## +CONFIG_USB_ATM=m +CONFIG_USB_SPEEDTOUCH=m + +## +## file: drivers/usb/host/Kconfig +## +CONFIG_USB_EHCI_HCD=m +CONFIG_USB_EHCI_ROOT_HUB_TT=y +CONFIG_USB_EHCI_TT_NEWSCHED=y +# CONFIG_USB_ISP116X_HCD is not set +CONFIG_USB_OHCI_HCD=m +CONFIG_USB_UHCI_HCD=m +CONFIG_USB_SL811_HCD=m + +## +## file: drivers/video/Kconfig +## +CONFIG_FB=m +CONFIG_FB_UDL=m + +## +## file: drivers/video/console/Kconfig +## +# CONFIG_VGA_CONSOLE is not set +CONFIG_FRAMEBUFFER_CONSOLE=m + +## +## file: drivers/watchdog/Kconfig +## +CONFIG_ORION_WATCHDOG=m + +## +## file: fs/Kconfig.binfmt +## +CONFIG_BINFMT_AOUT=m + +## +## file: fs/jffs2/Kconfig +## +CONFIG_JFFS2_FS=y + +## +## file: fs/partitions/Kconfig +## +CONFIG_ACORN_PARTITION=y +# CONFIG_ACORN_PARTITION_CUMANA is not set +# CONFIG_ACORN_PARTITION_EESOX is not set +CONFIG_ACORN_PARTITION_ICS=y +# CONFIG_ACORN_PARTITION_ADFS is not set +# CONFIG_ACORN_PARTITION_POWERTEC is not set +CONFIG_ACORN_PARTITION_RISCIX=y +CONFIG_OSF_PARTITION=y +CONFIG_AMIGA_PARTITION=y +CONFIG_ATARI_PARTITION=y +CONFIG_MAC_PARTITION=y +CONFIG_BSD_DISKLABEL=y +CONFIG_MINIX_SUBPARTITION=y +CONFIG_SOLARIS_X86_PARTITION=y +CONFIG_UNIXWARE_DISKLABEL=y +CONFIG_LDM_PARTITION=y +# CONFIG_LDM_DEBUG is not set +CONFIG_SGI_PARTITION=y +CONFIG_ULTRIX_PARTITION=y +CONFIG_SUN_PARTITION=y +CONFIG_EFI_PARTITION=y + +## +## file: fs/ubifs/Kconfig +## +CONFIG_UBIFS_FS=y + +## +## file: kernel/power/Kconfig +## +# CONFIG_SUSPEND is not set + +## +## file: mm/Kconfig +## +## choice: Memory model +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +## end choice + +## +## file: net/atm/Kconfig +## +CONFIG_ATM=m + +## +## file: net/ax25/Kconfig +## +CONFIG_HAMRADIO=y +CONFIG_AX25=m +# CONFIG_AX25_DAMA_SLAVE is not set +CONFIG_NETROM=m +CONFIG_ROSE=m + +## +## file: net/wanrouter/Kconfig +## +CONFIG_WAN_ROUTER=m + +## +## file: sound/soc/Kconfig +## +CONFIG_SND_SOC=m + +## +## file: sound/soc/codecs/Kconfig +## +# CONFIG_SND_SOC_ALL_CODECS is not set + +## +## file: sound/soc/kirkwood/Kconfig +## +CONFIG_SND_KIRKWOOD_SOC=m +CONFIG_SND_KIRKWOOD_SOC_OPENRD=m +CONFIG_SND_KIRKWOOD_SOC_T5325=m + --- linux-2.6-3.0.0~rc6.orig/debian/config/armel/config +++ linux-2.6-3.0.0~rc6/debian/config/armel/config @@ -0,0 +1,106 @@ +## +## file: arch/arm/Kconfig +## +CONFIG_MMU=y +CONFIG_AEABI=y +CONFIG_OABI_COMPAT=y + +## +## file: arch/arm/Kconfig.debug +## +CONFIG_DEBUG_LL=y +CONFIG_EARLY_PRINTK=y + +## +## file: arch/arm/mm/Kconfig +## +#. Support Thumb user binaries +CONFIG_ARM_THUMB=y + +## +## file: drivers/input/misc/Kconfig +## +CONFIG_INPUT_MISC=y +CONFIG_INPUT_UINPUT=m + +## +## file: drivers/input/mouse/Kconfig +## +CONFIG_INPUT_MOUSE=y +CONFIG_MOUSE_PS2=m +CONFIG_MOUSE_APPLETOUCH=m + +## +## file: drivers/input/touchscreen/Kconfig +## +# CONFIG_TOUCHSCREEN_EETI is not set + +## +## file: drivers/net/hamradio/Kconfig +## +CONFIG_BPQETHER=m +CONFIG_BAYCOM_SER_FDX=m +CONFIG_BAYCOM_SER_HDX=m +CONFIG_BAYCOM_PAR=m +CONFIG_BAYCOM_EPP=m +CONFIG_YAM=m + +## +## file: drivers/net/wireless/ipw2x00/Kconfig +## +# CONFIG_IPW2100 is not set + +## +## file: drivers/parport/Kconfig +## +#. Causes lockups on ARM (see #588164) +# CONFIG_PARPORT_PC is not set + +## +## file: drivers/scsi/Kconfig +## +# CONFIG_BLK_DEV_3W_XXXX_RAID is not set +# CONFIG_SCSI_3W_9XXX is not set +# CONFIG_SCSI_AACRAID is not set +# CONFIG_SCSI_AIC7XXX_OLD is not set +# CONFIG_SCSI_HPTIOP is not set + +## +## file: drivers/scsi/aic7xxx/Kconfig.aic79xx +## +# CONFIG_SCSI_AIC79XX is not set + +## +## file: drivers/scsi/aic7xxx/Kconfig.aic7xxx +## +# CONFIG_SCSI_AIC7XXX is not set + +## +## file: drivers/scsi/aic94xx/Kconfig +## +# CONFIG_SCSI_AIC94XX is not set + +## +## file: drivers/scsi/megaraid/Kconfig.megaraid +## +# CONFIG_MEGARAID_SAS is not set + +## +## file: drivers/scsi/qla2xxx/Kconfig +## +# CONFIG_SCSI_QLA_FC is not set + +## +## file: drivers/scsi/qla4xxx/Kconfig +## +# CONFIG_SCSI_QLA_ISCSI is not set + +## +## file: init/Kconfig +## +## choice: Kernel compression mode +# CONFIG_KERNEL_GZIP is not set +# CONFIG_KERNEL_BZIP2 is not set +CONFIG_KERNEL_LZMA=y +## end choice + --- linux-2.6-3.0.0~rc6.orig/debian/config/armel/config.ixp4xx +++ linux-2.6-3.0.0~rc6/debian/config/armel/config.ixp4xx @@ -0,0 +1,794 @@ +## +## file: arch/arm/Kconfig +## +## choice: ARM system type +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_REALVIEW is not set +# CONFIG_ARCH_VERSATILE is not set +# CONFIG_ARCH_AT91 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_EP93XX is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_NETX is not set +# CONFIG_ARCH_H720X is not set +# CONFIG_ARCH_IOP32X is not set +# CONFIG_ARCH_IOP33X is not set +# CONFIG_ARCH_IXP23XX is not set +# CONFIG_ARCH_IXP2000 is not set +CONFIG_ARCH_IXP4XX=y +# CONFIG_ARCH_PNX4008 is not set +# CONFIG_ARCH_PXA is not set +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_SA1100 is not set +# CONFIG_ARCH_S3C2410 is not set +# CONFIG_ARCH_SHARK is not set +# CONFIG_ARCH_OMAP is not set +## end choice +CONFIG_PCI=y +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_CMDLINE="console=ttyS0,115200" +# CONFIG_XIP_KERNEL is not set +CONFIG_KEXEC=y +CONFIG_ATAGS_PROC=y +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_NWFPE_XP is not set +# CONFIG_FPE_FASTFPE is not set +# CONFIG_ARTHUR is not set + +## +## file: arch/arm/mach-ixp4xx/Kconfig +## +CONFIG_MACH_NSLU2=y +CONFIG_ARCH_ADI_COYOTE=y +CONFIG_ARCH_IXDP425=y +CONFIG_MACH_IXDPG425=y +CONFIG_MACH_IXDP465=y +CONFIG_ARCH_PRPMC1100=y +CONFIG_MACH_NAS100D=y +CONFIG_MACH_DSMG600=y +CONFIG_MACH_FSG=y +# CONFIG_MACH_GTWX5715 is not set +# CONFIG_IXP4XX_INDIRECT_PCI is not set +CONFIG_IXP4XX_QMGR=m +CONFIG_IXP4XX_NPE=m + +## +## file: arch/arm/mm/Kconfig +## +CONFIG_ARM_THUMB=y +# CONFIG_CPU_BIG_ENDIAN is not set + +## +## file: drivers/ata/Kconfig +## +CONFIG_ATA=m +# CONFIG_SATA_PMP is not set +# CONFIG_SATA_AHCI is not set +# CONFIG_SATA_INIC162X is not set +# CONFIG_SATA_SIL24 is not set +CONFIG_ATA_SFF=y +# CONFIG_PDC_ADMA is not set +# CONFIG_SATA_QSTOR is not set +# CONFIG_SATA_SX4 is not set +# CONFIG_ATA_PIIX is not set +# CONFIG_SATA_MV is not set +# CONFIG_SATA_NV is not set +# CONFIG_SATA_PROMISE is not set +# CONFIG_SATA_SIL is not set +# CONFIG_SATA_SIS is not set +# CONFIG_SATA_SVW is not set +# CONFIG_SATA_ULI is not set +CONFIG_SATA_VIA=m +# CONFIG_SATA_VITESSE is not set +# CONFIG_PATA_ALI is not set +# CONFIG_PATA_AMD is not set +# CONFIG_PATA_ARTOP is not set +# CONFIG_PATA_ATIIXP is not set +# CONFIG_PATA_CMD64X is not set +# CONFIG_PATA_CS5520 is not set +# CONFIG_PATA_CS5530 is not set +# CONFIG_PATA_CYPRESS is not set +# CONFIG_PATA_EFAR is not set +# CONFIG_PATA_HPT366 is not set +# CONFIG_PATA_HPT37X is not set +# CONFIG_PATA_HPT3X2N is not set +# CONFIG_PATA_HPT3X3 is not set +# CONFIG_PATA_IT8213 is not set +# CONFIG_PATA_IT821X is not set +# CONFIG_PATA_JMICRON is not set +# CONFIG_PATA_MARVELL is not set +# CONFIG_PATA_NETCELL is not set +# CONFIG_PATA_NINJA32 is not set +# CONFIG_PATA_NS87415 is not set +# CONFIG_PATA_OLDPIIX is not set +# CONFIG_PATA_OPTIDMA is not set +# CONFIG_PATA_PDC2027X is not set +# CONFIG_PATA_PDC_OLD is not set +# CONFIG_PATA_RADISYS is not set +# CONFIG_PATA_SC1200 is not set +# CONFIG_PATA_SCH is not set +# CONFIG_PATA_SERVERWORKS is not set +# CONFIG_PATA_SIL680 is not set +# CONFIG_PATA_SIS is not set +# CONFIG_PATA_TRIFLEX is not set +# CONFIG_PATA_VIA is not set +# CONFIG_PATA_WINBOND is not set +# CONFIG_PATA_CMD640_PCI is not set +# CONFIG_PATA_IXP4XX_CF is not set +# CONFIG_PATA_MPIIX is not set +# CONFIG_PATA_NS87410 is not set +# CONFIG_PATA_OPTI is not set +# CONFIG_PATA_RZ1000 is not set +# CONFIG_ATA_GENERIC is not set + +## +## file: drivers/block/Kconfig +## +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_UMEM is not set +# CONFIG_BLK_DEV_SX8 is not set +# CONFIG_BLK_DEV_UB is not set +# CONFIG_CDROM_PKTCDVD is not set + +## +## file: drivers/bluetooth/Kconfig +## +# CONFIG_BT_HCIUART is not set +CONFIG_BT_HCIBCM203X=m +CONFIG_BT_HCIBPA10X=m +CONFIG_BT_HCIBFUSB=m +CONFIG_BT_HCIVHCI=m + +## +## file: drivers/char/Kconfig +## +# CONFIG_NVRAM is not set +# CONFIG_DTLK is not set +# CONFIG_APPLICOM is not set +CONFIG_TELCLOCK=m + +## +## file: drivers/char/ipmi/Kconfig +## +# CONFIG_IPMI_HANDLER is not set + +## +## file: drivers/char/tpm/Kconfig +## +# CONFIG_TCG_TPM is not set + +## +## file: drivers/firewire/Kconfig +## +# CONFIG_FIREWIRE is not set + +## +## file: drivers/gpu/drm/Kconfig +## +# CONFIG_DRM is not set + +## +## file: drivers/hwmon/Kconfig +## +CONFIG_HWMON=y +# CONFIG_HWMON_DEBUG_CHIP is not set +CONFIG_SENSORS_ADM1021=m +CONFIG_SENSORS_ADM1025=m +CONFIG_SENSORS_ADM1026=m +CONFIG_SENSORS_ADM1031=m +CONFIG_SENSORS_ADM9240=m +# CONFIG_SENSORS_ASB100 is not set +CONFIG_SENSORS_ATXP1=m +CONFIG_SENSORS_DS1621=m +# CONFIG_SENSORS_F71805F is not set +# CONFIG_SENSORS_GL518SM is not set +# CONFIG_SENSORS_GL520SM is not set +# CONFIG_SENSORS_IT87 is not set +CONFIG_SENSORS_LM63=m +CONFIG_SENSORS_LM75=m +CONFIG_SENSORS_LM77=m +CONFIG_SENSORS_LM78=m +CONFIG_SENSORS_LM80=m +CONFIG_SENSORS_LM83=m +CONFIG_SENSORS_LM85=m +CONFIG_SENSORS_LM87=m +CONFIG_SENSORS_LM90=m +CONFIG_SENSORS_LM92=m +CONFIG_SENSORS_MAX1619=m +# CONFIG_SENSORS_PC87360 is not set +CONFIG_SENSORS_PCF8591=m +# CONFIG_SENSORS_SIS5595 is not set +# CONFIG_SENSORS_SMSC47M1 is not set +# CONFIG_SENSORS_SMSC47B397 is not set +# CONFIG_SENSORS_VIA686A is not set +CONFIG_SENSORS_VT8231=m +# CONFIG_SENSORS_W83781D is not set +# CONFIG_SENSORS_W83L785TS is not set +# CONFIG_SENSORS_W83627HF is not set +CONFIG_SENSORS_W83627EHF=m + +## +## file: drivers/i2c/Kconfig +## +CONFIG_I2C=y +CONFIG_I2C_CHARDEV=y +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set + +## +## file: drivers/i2c/busses/Kconfig +## +# CONFIG_I2C_ALI1535 is not set +# CONFIG_I2C_ALI1563 is not set +# CONFIG_I2C_ALI15X3 is not set +# CONFIG_I2C_AMD756 is not set +# CONFIG_I2C_AMD8111 is not set +# CONFIG_I2C_I801 is not set +# CONFIG_I2C_PIIX4 is not set +# CONFIG_I2C_NFORCE2 is not set +# CONFIG_I2C_SIS5595 is not set +# CONFIG_I2C_SIS630 is not set +# CONFIG_I2C_SIS96X is not set +# CONFIG_I2C_VIA is not set +# CONFIG_I2C_VIAPRO is not set +CONFIG_I2C_GPIO=y +# CONFIG_I2C_IOP3XX is not set +# CONFIG_I2C_PARPORT_LIGHT is not set +# CONFIG_I2C_PCA_ISA is not set +# CONFIG_I2C_STUB is not set +# CONFIG_SCx200_ACB is not set + +## +## file: drivers/ide/Kconfig +## +# CONFIG_IDE is not set + +## +## file: drivers/input/gameport/Kconfig +## +CONFIG_GAMEPORT=m + +## +## file: drivers/input/joystick/Kconfig +## +CONFIG_INPUT_JOYSTICK=y + +## +## file: drivers/input/keyboard/Kconfig +## +CONFIG_INPUT_KEYBOARD=y +CONFIG_KEYBOARD_ATKBD=m +# CONFIG_KEYBOARD_LKKBD is not set +# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set + +## +## file: drivers/input/misc/Kconfig +## +CONFIG_INPUT_IXP4XX_BEEPER=m + +## +## file: drivers/input/serio/Kconfig +## +CONFIG_SERIO=m +CONFIG_SERIO_SERPORT=m +# CONFIG_SERIO_PCIPS2 is not set +CONFIG_SERIO_LIBPS2=m +# CONFIG_SERIO_RAW is not set + +## +## file: drivers/input/touchscreen/Kconfig +## +CONFIG_INPUT_TOUCHSCREEN=y + +## +## file: drivers/leds/Kconfig +## +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y +CONFIG_LEDS_FSG=y +CONFIG_LEDS_GPIO=y +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_TRIGGER_TIMER=y + +## +## file: drivers/media/Kconfig +## +CONFIG_DVB_CORE=m + +## +## file: drivers/media/radio/Kconfig +## +# CONFIG_RADIO_MAXIRADIO is not set +# CONFIG_USB_DSBR is not set + +## +## file: drivers/message/i2o/Kconfig +## +# CONFIG_I2O is not set + +## +## file: drivers/mmc/Kconfig +## +# CONFIG_MMC is not set + +## +## file: drivers/mtd/Kconfig +## +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +CONFIG_MTD_REDBOOT_PARTS=y +CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1 +# CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED is not set +# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set +# CONFIG_MTD_CMDLINE_PARTS is not set +# CONFIG_MTD_AFS_PARTS is not set +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +CONFIG_FTL=m +CONFIG_NFTL=m +# CONFIG_INFTL is not set +CONFIG_RFD_FTL=m + +## +## file: drivers/mtd/chips/Kconfig +## +CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_CFI_ADV_OPTIONS=y +## choice: Flash cmd/query data swapping +# CONFIG_MTD_CFI_NOSWAP is not set +CONFIG_MTD_CFI_BE_BYTE_SWAP=y +# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set +## end choice +CONFIG_MTD_CFI_GEOMETRY=y +# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set +CONFIG_MTD_MAP_BANK_WIDTH_2=y +# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set +CONFIG_MTD_CFI_I1=y +CONFIG_MTD_CFI_I2=y +# CONFIG_MTD_CFI_I4 is not set +# CONFIG_MTD_CFI_I8 is not set +# CONFIG_MTD_OTP is not set +CONFIG_MTD_CFI_INTELEXT=y +CONFIG_MTD_CFI_AMDSTD=m +CONFIG_MTD_CFI_STAA=m +CONFIG_MTD_RAM=m +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set + +## +## file: drivers/mtd/devices/Kconfig +## +# CONFIG_MTD_PMC551 is not set +CONFIG_MTD_DATAFLASH=m +CONFIG_MTD_M25P80=m +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_PHRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLOCK2MTD is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOC2001PLUS is not set + +## +## file: drivers/mtd/maps/Kconfig +## +CONFIG_MTD_COMPLEX_MAPPINGS=y +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +CONFIG_MTD_IXP4XX=y +# CONFIG_MTD_PCI is not set +CONFIG_MTD_PLATRAM=m + +## +## file: drivers/mtd/nand/Kconfig +## +CONFIG_MTD_NAND=m +# CONFIG_MTD_NAND_VERIFY_WRITE is not set +# CONFIG_MTD_NAND_DISKONCHIP is not set + +## +## file: drivers/mtd/onenand/Kconfig +## +# CONFIG_MTD_ONENAND is not set + +## +## file: drivers/net/Kconfig +## +# CONFIG_AX88796 is not set +# CONFIG_HAPPYMEAL is not set +# CONFIG_SUNGEM is not set +# CONFIG_CASSINI is not set +# CONFIG_NET_VENDOR_3COM is not set +# CONFIG_SMC91X is not set +# CONFIG_DM9000 is not set +CONFIG_ENC28J60=m +# CONFIG_ENC28J60_WRITEVERIFY is not set +# CONFIG_HP100 is not set +# CONFIG_NET_PCI is not set +# CONFIG_B44 is not set +# CONFIG_NET_POCKET is not set +# CONFIG_NETDEV_1000 is not set +# CONFIG_NETDEV_10000 is not set +# CONFIG_S2IO is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_NET_FC is not set +# CONFIG_NETPOLL_TRAP is not set + +## +## file: drivers/net/arcnet/Kconfig +## +# CONFIG_ARCNET is not set + +## +## file: drivers/net/arm/Kconfig +## +CONFIG_IXP4XX_ETH=m + +## +## file: drivers/net/phy/Kconfig +## +CONFIG_PHYLIB=m +CONFIG_MARVELL_PHY=m +CONFIG_DAVICOM_PHY=m +CONFIG_QSEMI_PHY=m +CONFIG_LXT_PHY=m +CONFIG_CICADA_PHY=m + +## +## file: drivers/net/tokenring/Kconfig +## +# CONFIG_TR is not set + +## +## file: drivers/net/tulip/Kconfig +## +# CONFIG_NET_TULIP is not set + +## +## file: drivers/net/wan/Kconfig +## +# CONFIG_WAN is not set + +## +## file: drivers/net/wireless/Kconfig +## +CONFIG_ATMEL=m +# CONFIG_PCI_ATMEL is not set + +## +## file: drivers/net/wireless/hostap/Kconfig +## +#. TODO +# CONFIG_HOSTAP_FIRMWARE is not set +#. TODO +# CONFIG_HOSTAP_PCI is not set + +## +## file: drivers/net/wireless/ipw2x00/Kconfig +## +CONFIG_IPW2100=m +# CONFIG_IPW2100_MONITOR is not set +# CONFIG_IPW2100_DEBUG is not set +CONFIG_IPW2200=m +# CONFIG_IPW2200_DEBUG is not set + +## +## file: drivers/net/wireless/orinoco/Kconfig +## +CONFIG_HERMES=m +CONFIG_PLX_HERMES=m +CONFIG_TMD_HERMES=m +CONFIG_NORTEL_HERMES=m +CONFIG_PCI_HERMES=m + +## +## file: drivers/pcmcia/Kconfig +## +# CONFIG_PCCARD is not set + +## +## file: drivers/rtc/Kconfig +## +# CONFIG_RTC_DRV_DS1672 is not set +# CONFIG_RTC_DRV_RS5C372 is not set +CONFIG_RTC_DRV_ISL1208=y +CONFIG_RTC_DRV_X1205=y +CONFIG_RTC_DRV_PCF8563=y +# CONFIG_RTC_DRV_M48T86 is not set + +## +## file: drivers/scsi/Kconfig +## +# CONFIG_SCSI_CONSTANTS is not set +# CONFIG_SCSI_LOGGING is not set +# CONFIG_BLK_DEV_3W_XXXX_RAID is not set +# CONFIG_SCSI_3W_9XXX is not set +# CONFIG_SCSI_AACRAID is not set +# CONFIG_SCSI_AIC7XXX_OLD is not set +# CONFIG_SCSI_DPT_I2O is not set +# CONFIG_SCSI_ARCMSR is not set +# CONFIG_SCSI_HPTIOP is not set +# CONFIG_SCSI_DMX3191D is not set +# CONFIG_SCSI_FUTURE_DOMAIN is not set +# CONFIG_SCSI_IPS is not set +# CONFIG_SCSI_INITIO is not set +# CONFIG_SCSI_INIA100 is not set +# CONFIG_SCSI_PPA is not set +# CONFIG_SCSI_IMM is not set +# CONFIG_SCSI_STEX is not set +# CONFIG_SCSI_SYM53C8XX_2 is not set +# CONFIG_SCSI_QLOGIC_1280 is not set +# CONFIG_SCSI_LPFC is not set +# CONFIG_SCSI_DC395x is not set +# CONFIG_SCSI_DC390T is not set +# CONFIG_SCSI_NSP32 is not set +# CONFIG_SCSI_SRP is not set + +## +## file: drivers/scsi/aic7xxx/Kconfig.aic79xx +## +# CONFIG_SCSI_AIC79XX is not set + +## +## file: drivers/scsi/aic7xxx/Kconfig.aic7xxx +## +# CONFIG_SCSI_AIC7XXX is not set + +## +## file: drivers/scsi/aic94xx/Kconfig +## +# CONFIG_SCSI_AIC94XX is not set + +## +## file: drivers/scsi/megaraid/Kconfig.megaraid +## +# CONFIG_MEGARAID_NEWGEN is not set +# CONFIG_MEGARAID_LEGACY is not set +# CONFIG_MEGARAID_SAS is not set + +## +## file: drivers/scsi/mvsas/Kconfig +## +# CONFIG_SCSI_MVSAS is not set + +## +## file: drivers/scsi/qla2xxx/Kconfig +## +# CONFIG_SCSI_QLA_FC is not set + +## +## file: drivers/scsi/qla4xxx/Kconfig +## +# CONFIG_SCSI_QLA_ISCSI is not set + +## +## file: drivers/spi/Kconfig +## +CONFIG_SPI=y +CONFIG_SPI_BITBANG=m + +## +## file: drivers/tty/Kconfig +## +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +# CONFIG_SERIAL_NONSTANDARD is not set + +## +## file: drivers/tty/serial/Kconfig +## +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_SERIAL_8250_NR_UARTS=2 +CONFIG_SERIAL_8250_RUNTIME_UARTS=2 +# CONFIG_SERIAL_8250_EXTENDED is not set +# CONFIG_SERIAL_JSM is not set + +## +## file: drivers/usb/Kconfig +## +CONFIG_USB=m + +## +## file: drivers/usb/atm/Kconfig +## +CONFIG_USB_ATM=m +CONFIG_USB_SPEEDTOUCH=m + +## +## file: drivers/usb/host/Kconfig +## +CONFIG_USB_EHCI_HCD=m +CONFIG_USB_EHCI_ROOT_HUB_TT=y +CONFIG_USB_ISP116X_HCD=m +CONFIG_USB_OHCI_HCD=m +CONFIG_USB_UHCI_HCD=m +CONFIG_USB_SL811_HCD=m + +## +## file: drivers/video/Kconfig +## +# CONFIG_FB is not set + +## +## file: drivers/video/console/Kconfig +## +# CONFIG_VGA_CONSOLE is not set +# CONFIG_VGACON_SOFT_SCROLLBACK is not set + +## +## file: drivers/watchdog/Kconfig +## +CONFIG_IXP4XX_WATCHDOG=m +# CONFIG_PCIPCWATCHDOG is not set +# CONFIG_WDTPCI is not set +# CONFIG_USBPCWATCHDOG is not set + +## +## file: fs/Kconfig.binfmt +## +CONFIG_BINFMT_AOUT=m + +## +## file: fs/partitions/Kconfig +## +CONFIG_ACORN_PARTITION=y +# CONFIG_ACORN_PARTITION_CUMANA is not set +# CONFIG_ACORN_PARTITION_EESOX is not set +CONFIG_ACORN_PARTITION_ICS=y +# CONFIG_ACORN_PARTITION_ADFS is not set +# CONFIG_ACORN_PARTITION_POWERTEC is not set +CONFIG_ACORN_PARTITION_RISCIX=y +CONFIG_OSF_PARTITION=y +CONFIG_AMIGA_PARTITION=y +CONFIG_ATARI_PARTITION=y +CONFIG_MAC_PARTITION=y +CONFIG_BSD_DISKLABEL=y +CONFIG_MINIX_SUBPARTITION=y +CONFIG_SOLARIS_X86_PARTITION=y +CONFIG_UNIXWARE_DISKLABEL=y +CONFIG_LDM_PARTITION=y +# CONFIG_LDM_DEBUG is not set +CONFIG_SGI_PARTITION=y +CONFIG_ULTRIX_PARTITION=y +CONFIG_SUN_PARTITION=y +CONFIG_EFI_PARTITION=y + +## +## file: init/Kconfig +## +CONFIG_LOG_BUF_SHIFT=14 + +## +## file: kernel/Kconfig.preempt +## +## choice: Preemption Model +# CONFIG_PREEMPT is not set +## end choice + +## +## file: mm/Kconfig +## +## choice: Memory model +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +## end choice + +## +## file: net/ax25/Kconfig +## +CONFIG_HAMRADIO=y +CONFIG_AX25=m +# CONFIG_AX25_DAMA_SLAVE is not set +CONFIG_NETROM=m +CONFIG_ROSE=m + +## +## file: net/bridge/netfilter/Kconfig +## +# CONFIG_BRIDGE_NF_EBTABLES is not set + +## +## file: net/decnet/Kconfig +## +CONFIG_DECNET=m +CONFIG_DECNET_ROUTER=y + +## +## file: net/decnet/netfilter/Kconfig +## +# CONFIG_DECNET_NF_GRABULATOR is not set + +## +## file: net/ipx/Kconfig +## +CONFIG_IPX=m +CONFIG_IPX_INTERN=y + +## +## file: net/irda/Kconfig +## +# CONFIG_IRDA is not set + +## +## file: net/lapb/Kconfig +## +CONFIG_LAPB=m + +## +## file: net/wanrouter/Kconfig +## +CONFIG_WAN_ROUTER=m + +## +## file: sound/drivers/Kconfig +## +CONFIG_SND_DUMMY=m +# CONFIG_SND_VIRMIDI is not set +CONFIG_SND_MTPAV=m +CONFIG_SND_SERIAL_U16550=m +CONFIG_SND_MPU401=m + +## +## file: sound/pci/Kconfig +## +# CONFIG_SND_AD1889 is not set +# CONFIG_SND_ALI5451 is not set +# CONFIG_SND_ATIIXP is not set +# CONFIG_SND_ATIIXP_MODEM is not set +# CONFIG_SND_AU8810 is not set +# CONFIG_SND_AU8820 is not set +# CONFIG_SND_AU8830 is not set +# CONFIG_SND_AZT3328 is not set +# CONFIG_SND_BT87X is not set +# CONFIG_SND_CA0106 is not set +# CONFIG_SND_CMIPCI is not set +# CONFIG_SND_CS4281 is not set +# CONFIG_SND_CS46XX is not set +# CONFIG_SND_EMU10K1 is not set +# CONFIG_SND_EMU10K1X is not set +# CONFIG_SND_ENS1370 is not set +# CONFIG_SND_ENS1371 is not set +# CONFIG_SND_ES1938 is not set +# CONFIG_SND_ES1968 is not set +# CONFIG_SND_FM801 is not set +# CONFIG_SND_HDSP is not set +# CONFIG_SND_HDSPM is not set +# CONFIG_SND_ICE1712 is not set +# CONFIG_SND_ICE1724 is not set +# CONFIG_SND_INTEL8X0 is not set +# CONFIG_SND_INTEL8X0M is not set +# CONFIG_SND_KORG1212 is not set +# CONFIG_SND_MAESTRO3 is not set +# CONFIG_SND_MIXART is not set +# CONFIG_SND_NM256 is not set +CONFIG_SND_PCXHR=m +# CONFIG_SND_RME32 is not set +# CONFIG_SND_RME96 is not set +# CONFIG_SND_RME9652 is not set +# CONFIG_SND_SONICVIBES is not set +# CONFIG_SND_TRIDENT is not set +# CONFIG_SND_VIA82XX is not set +# CONFIG_SND_VIA82XX_MODEM is not set +# CONFIG_SND_VX222 is not set +# CONFIG_SND_YMFPCI is not set + +## +## file: sound/pci/hda/Kconfig +## +# CONFIG_SND_HDA_INTEL is not set + + --- linux-2.6-3.0.0~rc6.orig/debian/config/armel/config.orion5x +++ linux-2.6-3.0.0~rc6/debian/config/armel/config.orion5x @@ -0,0 +1,588 @@ +## +## file: arch/arm/Kconfig +## +## choice: ARM system type +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_REALVIEW is not set +# CONFIG_ARCH_VERSATILE is not set +# CONFIG_ARCH_AT91 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_EP93XX is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_MXC is not set +# CONFIG_ARCH_NETX is not set +# CONFIG_ARCH_H720X is not set +# CONFIG_ARCH_IOP13XX is not set +# CONFIG_ARCH_IOP32X is not set +# CONFIG_ARCH_IOP33X is not set +# CONFIG_ARCH_IXP23XX is not set +# CONFIG_ARCH_IXP2000 is not set +# CONFIG_ARCH_IXP4XX is not set +CONFIG_ARCH_ORION5X=y +# CONFIG_ARCH_KS8695 is not set +# CONFIG_ARCH_PNX4008 is not set +# CONFIG_ARCH_PXA is not set +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_SA1100 is not set +# CONFIG_ARCH_S3C2410 is not set +# CONFIG_ARCH_SHARK is not set +# CONFIG_ARCH_DAVINCI is not set +# CONFIG_ARCH_OMAP is not set +## end choice +CONFIG_PCI=y +CONFIG_LEDS=y +CONFIG_LEDS_CPU=y +CONFIG_UACCESS_WITH_MEMCPY=y +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_CMDLINE="" +# CONFIG_XIP_KERNEL is not set +CONFIG_KEXEC=y +CONFIG_ATAGS_PROC=y +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_NWFPE_XP is not set +# CONFIG_FPE_FASTFPE is not set +CONFIG_VFP=y +# CONFIG_ARTHUR is not set + +## +## file: arch/arm/mach-orion5x/Kconfig +## +CONFIG_MACH_DB88F5281=y +CONFIG_MACH_RD88F5182=y +CONFIG_MACH_KUROBOX_PRO=y +CONFIG_MACH_DNS323=y +CONFIG_MACH_TS209=y +CONFIG_MACH_TERASTATION_PRO2=y +CONFIG_MACH_LINKSTATION_PRO=y +CONFIG_MACH_LINKSTATION_LSCHL=y +CONFIG_MACH_LINKSTATION_MINI=y +CONFIG_MACH_LINKSTATION_LS_HGL=y +CONFIG_MACH_TS409=y +CONFIG_MACH_WRT350N_V2=y +CONFIG_MACH_TS78XX=y +CONFIG_MACH_MV2120=y +CONFIG_MACH_EDMINI_V2=y +CONFIG_MACH_D2NET=y +CONFIG_MACH_BIGDISK=y +CONFIG_MACH_NET2BIG=y +CONFIG_MACH_MSS2=y +CONFIG_MACH_WNR854T=y +CONFIG_MACH_RD88F5181L_GE=y +CONFIG_MACH_RD88F5181L_FXO=y +CONFIG_MACH_RD88F6183AP_GE=y + +## +## file: arch/arm/mm/Kconfig +## +CONFIG_CPU_FEROCEON_OLD_ID=y +CONFIG_ARM_THUMB=y +# CONFIG_CPU_ICACHE_DISABLE is not set +# CONFIG_CPU_DCACHE_DISABLE is not set +# CONFIG_CPU_DCACHE_WRITETHROUGH is not set + +## +## file: drivers/ata/Kconfig +## +CONFIG_ATA=m +# CONFIG_SATA_AHCI is not set +# CONFIG_SATA_INIC162X is not set +# CONFIG_SATA_SIL24 is not set +CONFIG_ATA_SFF=y +# CONFIG_PDC_ADMA is not set +# CONFIG_SATA_QSTOR is not set +# CONFIG_SATA_SX4 is not set +# CONFIG_ATA_PIIX is not set +CONFIG_SATA_MV=m +# CONFIG_SATA_NV is not set +# CONFIG_SATA_PROMISE is not set +# CONFIG_SATA_SIL is not set +# CONFIG_SATA_SIS is not set +# CONFIG_SATA_SVW is not set +# CONFIG_SATA_ULI is not set +# CONFIG_SATA_VIA is not set +# CONFIG_SATA_VITESSE is not set +# CONFIG_PATA_ALI is not set +# CONFIG_PATA_AMD is not set +# CONFIG_PATA_ARTOP is not set +# CONFIG_PATA_ATIIXP is not set +# CONFIG_PATA_CMD64X is not set +# CONFIG_PATA_CS5520 is not set +# CONFIG_PATA_CS5530 is not set +# CONFIG_PATA_CYPRESS is not set +# CONFIG_PATA_EFAR is not set +# CONFIG_PATA_HPT366 is not set +# CONFIG_PATA_HPT37X is not set +# CONFIG_PATA_HPT3X2N is not set +# CONFIG_PATA_HPT3X3 is not set +# CONFIG_PATA_IT8213 is not set +# CONFIG_PATA_IT821X is not set +# CONFIG_PATA_JMICRON is not set +# CONFIG_PATA_MARVELL is not set +# CONFIG_PATA_NETCELL is not set +# CONFIG_PATA_NINJA32 is not set +# CONFIG_PATA_NS87415 is not set +# CONFIG_PATA_OLDPIIX is not set +# CONFIG_PATA_OPTIDMA is not set +# CONFIG_PATA_PDC2027X is not set +# CONFIG_PATA_PDC_OLD is not set +# CONFIG_PATA_RADISYS is not set +# CONFIG_PATA_SC1200 is not set +# CONFIG_PATA_SCH is not set +# CONFIG_PATA_SERVERWORKS is not set +# CONFIG_PATA_SIL680 is not set +# CONFIG_PATA_SIS is not set +# CONFIG_PATA_TRIFLEX is not set +# CONFIG_PATA_VIA is not set +# CONFIG_PATA_WINBOND is not set +# CONFIG_PATA_CMD640_PCI is not set +# CONFIG_PATA_MPIIX is not set +# CONFIG_PATA_NS87410 is not set +# CONFIG_PATA_OPTI is not set +# CONFIG_PATA_PLATFORM is not set +# CONFIG_PATA_RZ1000 is not set +# CONFIG_ATA_GENERIC is not set + +## +## file: drivers/bluetooth/Kconfig +## +# CONFIG_BT_HCIUART is not set +CONFIG_BT_HCIBCM203X=m +CONFIG_BT_HCIBPA10X=m +CONFIG_BT_HCIBFUSB=m +CONFIG_BT_HCIVHCI=m + +## +## file: drivers/crypto/Kconfig +## +CONFIG_CRYPTO_DEV_MV_CESA=m + +## +## file: drivers/dma/Kconfig +## +CONFIG_DMADEVICES=y +CONFIG_MV_XOR=y +# CONFIG_NET_DMA is not set + +## +## file: drivers/gpio/Kconfig +## +CONFIG_GPIO_SYSFS=y + +## +## file: drivers/gpu/drm/Kconfig +## +# CONFIG_DRM is not set + +## +## file: drivers/hwmon/Kconfig +## +CONFIG_SENSORS_G760A=m +CONFIG_SENSORS_GPIO_FAN=m +CONFIG_SENSORS_LM75=m + +## +## file: drivers/i2c/Kconfig +## +CONFIG_I2C=y +CONFIG_I2C_CHARDEV=y + +## +## file: drivers/i2c/busses/Kconfig +## +CONFIG_I2C_MV64XXX=y + +## +## file: drivers/input/gameport/Kconfig +## +CONFIG_GAMEPORT=m + +## +## file: drivers/input/joystick/Kconfig +## +CONFIG_INPUT_JOYSTICK=y + +## +## file: drivers/input/keyboard/Kconfig +## +CONFIG_KEYBOARD_GPIO=m + +## +## file: drivers/input/touchscreen/Kconfig +## +CONFIG_INPUT_TOUCHSCREEN=y + +## +## file: drivers/isdn/Kconfig +## +CONFIG_ISDN=y +CONFIG_ISDN_CAPI=m + +## +## file: drivers/isdn/capi/Kconfig +## +CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON=y +CONFIG_ISDN_CAPI_MIDDLEWARE=y +CONFIG_ISDN_CAPI_CAPI20=m +CONFIG_ISDN_CAPI_CAPIDRV=m + +## +## file: drivers/isdn/hardware/avm/Kconfig +## +CONFIG_CAPI_AVM=y +CONFIG_ISDN_DRV_AVMB1_B1PCI=m +CONFIG_ISDN_DRV_AVMB1_B1PCIV4=y +CONFIG_ISDN_DRV_AVMB1_B1PCMCIA=m +CONFIG_ISDN_DRV_AVMB1_AVM_CS=m +CONFIG_ISDN_DRV_AVMB1_T1PCI=m +CONFIG_ISDN_DRV_AVMB1_C4=m + +## +## file: drivers/isdn/hardware/eicon/Kconfig +## +CONFIG_CAPI_EICON=y +CONFIG_ISDN_DIVAS=m +CONFIG_ISDN_DIVAS_BRIPCI=y +CONFIG_ISDN_DIVAS_PRIPCI=y +CONFIG_ISDN_DIVAS_DIVACAPI=m +CONFIG_ISDN_DIVAS_USERIDI=m +CONFIG_ISDN_DIVAS_MAINT=m + +## +## file: drivers/leds/Kconfig +## +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y +CONFIG_LEDS_GPIO=y +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_TRIGGER_TIMER=y +CONFIG_LEDS_TRIGGER_DEFAULT_ON=y + +## +## file: drivers/media/Kconfig +## +CONFIG_DVB_CORE=m + +## +## file: drivers/mtd/Kconfig +## +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_REDBOOT_PARTS is not set +CONFIG_MTD_CMDLINE_PARTS=y +# CONFIG_MTD_AFS_PARTS is not set +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLKDEVS=y +CONFIG_MTD_BLOCK=y +CONFIG_FTL=m +CONFIG_NFTL=m +# CONFIG_NFTL_RW is not set +# CONFIG_INFTL is not set +# CONFIG_RFD_FTL is not set +# CONFIG_SSFDC is not set +# CONFIG_MTD_OOPS is not set + +## +## file: drivers/mtd/chips/Kconfig +## +CONFIG_MTD_CFI=y +CONFIG_MTD_JEDECPROBE=y +CONFIG_MTD_CFI_ADV_OPTIONS=y +## choice: Flash cmd/query data swapping +CONFIG_MTD_CFI_NOSWAP=y +# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set +# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set +## end choice +CONFIG_MTD_CFI_GEOMETRY=y +CONFIG_MTD_MAP_BANK_WIDTH_1=y +CONFIG_MTD_MAP_BANK_WIDTH_2=y +CONFIG_MTD_MAP_BANK_WIDTH_4=y +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set +CONFIG_MTD_CFI_I1=y +CONFIG_MTD_CFI_I2=y +CONFIG_MTD_CFI_I4=y +# CONFIG_MTD_CFI_I8 is not set +# CONFIG_MTD_OTP is not set +#. Needed e.g. on QNAP devices +CONFIG_MTD_CFI_INTELEXT=y +#. Needed e.g. on the D-Link DNS-323 +CONFIG_MTD_CFI_AMDSTD=y +CONFIG_MTD_CFI_STAA=m +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set + +## +## file: drivers/mtd/devices/Kconfig +## +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_PHRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLOCK2MTD is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOC2001PLUS is not set + +## +## file: drivers/mtd/maps/Kconfig +## +# CONFIG_MTD_COMPLEX_MAPPINGS is not set +CONFIG_MTD_PHYSMAP=y +CONFIG_MTD_PHYSMAP_START=0x0 +CONFIG_MTD_PHYSMAP_LEN=0x0 +CONFIG_MTD_PHYSMAP_BANKWIDTH=0 +# CONFIG_MTD_ARM_INTEGRATOR is not set +# CONFIG_MTD_IMPA7 is not set +# CONFIG_MTD_INTEL_VR_NOR is not set +# CONFIG_MTD_PLATRAM is not set + +## +## file: drivers/mtd/nand/Kconfig +## +# CONFIG_MTD_NAND_ECC_SMC is not set +CONFIG_MTD_NAND=y +CONFIG_MTD_NAND_VERIFY_WRITE=y +# CONFIG_MTD_NAND_MUSEUM_IDS is not set +# CONFIG_MTD_NAND_DISKONCHIP is not set +# CONFIG_MTD_NAND_CAFE is not set +# CONFIG_MTD_NAND_PLATFORM is not set +# CONFIG_MTD_ALAUDA is not set +CONFIG_MTD_NAND_ORION=y + +## +## file: drivers/mtd/onenand/Kconfig +## +# CONFIG_MTD_ONENAND is not set + +## +## file: drivers/net/Kconfig +## +# CONFIG_NET_ETHERNET is not set +CONFIG_NETDEV_1000=y +# CONFIG_DL2K is not set +# CONFIG_E1000 is not set +# CONFIG_E1000E is not set +# CONFIG_IP1000 is not set +# CONFIG_IGB is not set +# CONFIG_NS83820 is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_R8169 is not set +# CONFIG_SIS190 is not set +# CONFIG_SKGE is not set +# CONFIG_SKY2 is not set +# CONFIG_VIA_VELOCITY is not set +# CONFIG_TIGON3 is not set +# CONFIG_BNX2 is not set +CONFIG_MV643XX_ETH=m +# CONFIG_QLA3XXX is not set +# CONFIG_ATL1 is not set +# CONFIG_NETDEV_10000 is not set +# CONFIG_BNX2X is not set + +## +## file: drivers/net/arcnet/Kconfig +## +# CONFIG_ARCNET is not set + +## +## file: drivers/net/phy/Kconfig +## +#. Turned off because this causes networking on some Orion machines to fail +# CONFIG_MARVELL_PHY is not set +#. Turned off to avoid namespace collisions +# CONFIG_FIXED_PHY is not set + +## +## file: drivers/pcmcia/Kconfig +## +# CONFIG_PCCARD is not set + +## +## file: drivers/rtc/Kconfig +## +CONFIG_RTC_DRV_DS1307=y +CONFIG_RTC_DRV_RS5C372=y +CONFIG_RTC_DRV_PCF8563=y +CONFIG_RTC_DRV_M41T80=y +CONFIG_RTC_DRV_S35390A=y + +## +## file: drivers/scsi/Kconfig +## +# CONFIG_BLK_DEV_3W_XXXX_RAID is not set +# CONFIG_SCSI_3W_9XXX is not set +# CONFIG_SCSI_AACRAID is not set +# CONFIG_SCSI_AIC7XXX_OLD is not set +# CONFIG_SCSI_DPT_I2O is not set +# CONFIG_SCSI_ARCMSR is not set +# CONFIG_SCSI_HPTIOP is not set +# CONFIG_SCSI_DMX3191D is not set +# CONFIG_SCSI_FUTURE_DOMAIN is not set +# CONFIG_SCSI_IPS is not set +# CONFIG_SCSI_INITIO is not set +# CONFIG_SCSI_INIA100 is not set +# CONFIG_SCSI_PPA is not set +# CONFIG_SCSI_IMM is not set +# CONFIG_SCSI_STEX is not set +# CONFIG_SCSI_SYM53C8XX_2 is not set +# CONFIG_SCSI_IPR is not set +# CONFIG_SCSI_QLOGIC_1280 is not set +# CONFIG_SCSI_LPFC is not set +# CONFIG_SCSI_DC395x is not set +# CONFIG_SCSI_DC390T is not set +# CONFIG_SCSI_NSP32 is not set + +## +## file: drivers/scsi/aic7xxx/Kconfig.aic79xx +## +# CONFIG_SCSI_AIC79XX is not set + +## +## file: drivers/scsi/aic7xxx/Kconfig.aic7xxx +## +# CONFIG_SCSI_AIC7XXX is not set + +## +## file: drivers/scsi/aic94xx/Kconfig +## +# CONFIG_SCSI_AIC94XX is not set + +## +## file: drivers/scsi/megaraid/Kconfig.megaraid +## +# CONFIG_MEGARAID_NEWGEN is not set +# CONFIG_MEGARAID_LEGACY is not set +# CONFIG_MEGARAID_SAS is not set + +## +## file: drivers/scsi/mvsas/Kconfig +## +# CONFIG_SCSI_MVSAS is not set + +## +## file: drivers/scsi/qla2xxx/Kconfig +## +# CONFIG_SCSI_QLA_FC is not set + +## +## file: drivers/scsi/qla4xxx/Kconfig +## +# CONFIG_SCSI_QLA_ISCSI is not set + +## +## file: drivers/ssb/Kconfig +## +# CONFIG_SSB is not set + +## +## file: drivers/tty/serial/Kconfig +## +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_SERIAL_8250_PCI=y +CONFIG_SERIAL_8250_NR_UARTS=4 +CONFIG_SERIAL_8250_RUNTIME_UARTS=2 +# CONFIG_SERIAL_8250_EXTENDED is not set + +## +## file: drivers/usb/Kconfig +## +CONFIG_USB_SUPPORT=y +CONFIG_USB=m + +## +## file: drivers/usb/atm/Kconfig +## +CONFIG_USB_ATM=m +CONFIG_USB_SPEEDTOUCH=m + +## +## file: drivers/usb/host/Kconfig +## +CONFIG_USB_EHCI_HCD=m +CONFIG_USB_EHCI_ROOT_HUB_TT=y +CONFIG_USB_EHCI_TT_NEWSCHED=y +# CONFIG_USB_ISP116X_HCD is not set +CONFIG_USB_OHCI_HCD=m +CONFIG_USB_UHCI_HCD=m +CONFIG_USB_SL811_HCD=m + +## +## file: drivers/video/Kconfig +## +CONFIG_FB=m + +## +## file: drivers/video/console/Kconfig +## +# CONFIG_VGA_CONSOLE is not set + +## +## file: drivers/watchdog/Kconfig +## +CONFIG_ORION_WATCHDOG=m + +## +## file: fs/Kconfig.binfmt +## +CONFIG_BINFMT_AOUT=m + +## +## file: fs/partitions/Kconfig +## +CONFIG_ACORN_PARTITION=y +# CONFIG_ACORN_PARTITION_CUMANA is not set +# CONFIG_ACORN_PARTITION_EESOX is not set +CONFIG_ACORN_PARTITION_ICS=y +# CONFIG_ACORN_PARTITION_ADFS is not set +# CONFIG_ACORN_PARTITION_POWERTEC is not set +CONFIG_ACORN_PARTITION_RISCIX=y +CONFIG_OSF_PARTITION=y +CONFIG_AMIGA_PARTITION=y +CONFIG_ATARI_PARTITION=y +CONFIG_MAC_PARTITION=y +CONFIG_BSD_DISKLABEL=y +CONFIG_MINIX_SUBPARTITION=y +CONFIG_SOLARIS_X86_PARTITION=y +CONFIG_UNIXWARE_DISKLABEL=y +CONFIG_LDM_PARTITION=y +# CONFIG_LDM_DEBUG is not set +CONFIG_SGI_PARTITION=y +CONFIG_ULTRIX_PARTITION=y +CONFIG_SUN_PARTITION=y +CONFIG_EFI_PARTITION=y + +## +## file: mm/Kconfig +## +## choice: Memory model +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +## end choice + +## +## file: net/atm/Kconfig +## +CONFIG_ATM=m + +## +## file: net/ax25/Kconfig +## +CONFIG_HAMRADIO=y +CONFIG_AX25=m +# CONFIG_AX25_DAMA_SLAVE is not set +CONFIG_NETROM=m +CONFIG_ROSE=m + +## +## file: net/wanrouter/Kconfig +## +CONFIG_WAN_ROUTER=m + + --- linux-2.6-3.0.0~rc6.orig/debian/config/armel/config.versatile +++ linux-2.6-3.0.0~rc6/debian/config/armel/config.versatile @@ -0,0 +1,440 @@ +## +## file: arch/arm/Kconfig +## +## choice: ARM system type +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_REALVIEW is not set +CONFIG_ARCH_VERSATILE=y +# CONFIG_ARCH_AT91 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_EP93XX is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_MXC is not set +# CONFIG_ARCH_NETX is not set +# CONFIG_ARCH_H720X is not set +# CONFIG_ARCH_IOP13XX is not set +# CONFIG_ARCH_IOP32X is not set +# CONFIG_ARCH_IOP33X is not set +# CONFIG_ARCH_IXP23XX is not set +# CONFIG_ARCH_IXP2000 is not set +# CONFIG_ARCH_IXP4XX is not set +# CONFIG_ARCH_KS8695 is not set +# CONFIG_ARCH_PNX4008 is not set +# CONFIG_ARCH_PXA is not set +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_SA1100 is not set +# CONFIG_ARCH_S3C2410 is not set +# CONFIG_ARCH_SHARK is not set +# CONFIG_ARCH_DAVINCI is not set +# CONFIG_ARCH_OMAP is not set +## end choice +CONFIG_PCI=y +# CONFIG_LEDS is not set +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_CMDLINE="" +# CONFIG_XIP_KERNEL is not set +CONFIG_KEXEC=y +CONFIG_ATAGS_PROC=y +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_NWFPE_XP is not set +# CONFIG_FPE_FASTFPE is not set +CONFIG_VFP=y +# CONFIG_ARTHUR is not set + +## +## file: arch/arm/Kconfig.debug +## +# CONFIG_DEBUG_USER is not set + +## +## file: arch/arm/mach-versatile/Kconfig +## +CONFIG_ARCH_VERSATILE_PB=y +CONFIG_MACH_VERSATILE_AB=y + +## +## file: arch/arm/mm/Kconfig +## +CONFIG_CPU_ARM926T=y +CONFIG_ARM_THUMB=y +# CONFIG_CPU_ICACHE_DISABLE is not set +# CONFIG_CPU_DCACHE_DISABLE is not set +# CONFIG_CPU_DCACHE_WRITETHROUGH is not set +# CONFIG_CPU_CACHE_ROUND_ROBIN is not set + +## +## file: drivers/ata/Kconfig +## +CONFIG_ATA=m +CONFIG_SATA_AHCI=m +# CONFIG_SATA_INIC162X is not set +CONFIG_SATA_SIL24=m +# CONFIG_PDC_ADMA is not set +# CONFIG_SATA_QSTOR is not set +CONFIG_SATA_SX4=m +# CONFIG_ATA_PIIX is not set +# CONFIG_SATA_MV is not set +# CONFIG_SATA_NV is not set +CONFIG_SATA_PROMISE=m +CONFIG_SATA_SIL=m +# CONFIG_SATA_SIS is not set +# CONFIG_SATA_SVW is not set +# CONFIG_SATA_ULI is not set +CONFIG_SATA_VIA=m +# CONFIG_SATA_VITESSE is not set +# CONFIG_PATA_ALI is not set +# CONFIG_PATA_AMD is not set +# CONFIG_PATA_ARTOP is not set +# CONFIG_PATA_ATIIXP is not set +# CONFIG_PATA_CMD64X is not set +# CONFIG_PATA_CS5520 is not set +# CONFIG_PATA_CS5530 is not set +# CONFIG_PATA_CYPRESS is not set +# CONFIG_PATA_EFAR is not set +# CONFIG_PATA_HPT366 is not set +# CONFIG_PATA_HPT37X is not set +# CONFIG_PATA_HPT3X2N is not set +# CONFIG_PATA_HPT3X3 is not set +# CONFIG_PATA_IT8213 is not set +# CONFIG_PATA_IT821X is not set +# CONFIG_PATA_JMICRON is not set +# CONFIG_PATA_MARVELL is not set +# CONFIG_PATA_NETCELL is not set +# CONFIG_PATA_NS87415 is not set +# CONFIG_PATA_OLDPIIX is not set +# CONFIG_PATA_OPTIDMA is not set +# CONFIG_PATA_PDC2027X is not set +# CONFIG_PATA_PDC_OLD is not set +# CONFIG_PATA_RADISYS is not set +# CONFIG_PATA_SC1200 is not set +# CONFIG_PATA_SERVERWORKS is not set +# CONFIG_PATA_SIL680 is not set +# CONFIG_PATA_SIS is not set +# CONFIG_PATA_TRIFLEX is not set +# CONFIG_PATA_VIA is not set +# CONFIG_PATA_WINBOND is not set +# CONFIG_PATA_CMD640_PCI is not set +# CONFIG_PATA_MPIIX is not set +# CONFIG_PATA_NS87410 is not set +# CONFIG_PATA_OPTI is not set +# CONFIG_PATA_RZ1000 is not set +# CONFIG_ATA_GENERIC is not set + +## +## file: drivers/atm/Kconfig +## +CONFIG_ATM_DRIVERS=y +# CONFIG_ATM_DUMMY is not set +# CONFIG_ATM_TCP is not set +# CONFIG_ATM_LANAI is not set +# CONFIG_ATM_ENI is not set +# CONFIG_ATM_FIRESTREAM is not set +# CONFIG_ATM_ZATM is not set +# CONFIG_ATM_NICSTAR is not set +# CONFIG_ATM_IDT77252 is not set +# CONFIG_ATM_AMBASSADOR is not set +# CONFIG_ATM_HORIZON is not set +# CONFIG_ATM_IA is not set +# CONFIG_ATM_HE is not set + +## +## file: drivers/char/Kconfig +## +# CONFIG_NVRAM is not set +# CONFIG_APPLICOM is not set + +## +## file: drivers/i2c/Kconfig +## +# CONFIG_I2C is not set + +## +## file: drivers/input/keyboard/Kconfig +## +CONFIG_INPUT_KEYBOARD=y +CONFIG_KEYBOARD_ATKBD=y +# CONFIG_KEYBOARD_LKKBD is not set +# CONFIG_KEYBOARD_NEWTON is not set +CONFIG_KEYBOARD_STOWAWAY=m +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set + +## +## file: drivers/input/serio/Kconfig +## +CONFIG_SERIO=y +CONFIG_SERIO_SERPORT=y +CONFIG_SERIO_AMBAKMI=y +# CONFIG_SERIO_PCIPS2 is not set +CONFIG_SERIO_LIBPS2=y +# CONFIG_SERIO_RAW is not set + +## +## file: drivers/input/touchscreen/Kconfig +## +# CONFIG_INPUT_TOUCHSCREEN is not set + +## +## file: drivers/leds/Kconfig +## +# CONFIG_NEW_LEDS is not set + +## +## file: drivers/net/Kconfig +## +CONFIG_IFB=m +CONFIG_NET_ETHERNET=y +# CONFIG_AX88796 is not set +# CONFIG_HAPPYMEAL is not set +# CONFIG_SUNGEM is not set +# CONFIG_CASSINI is not set +CONFIG_NET_VENDOR_3COM=y +CONFIG_VORTEX=m +CONFIG_TYPHOON=m +CONFIG_SMC91X=m +# CONFIG_DM9000 is not set +CONFIG_HP100=m +CONFIG_NET_PCI=y +CONFIG_AMD8111_ETH=m +CONFIG_ADAPTEC_STARFIRE=m +# CONFIG_B44 is not set +# CONFIG_FORCEDETH is not set +CONFIG_E100=m +CONFIG_FEALNX=m +CONFIG_NATSEMI=m +CONFIG_NE2K_PCI=m +CONFIG_8139CP=m +CONFIG_8139TOO=m +# CONFIG_8139TOO_PIO is not set +CONFIG_8139TOO_TUNE_TWISTER=y +CONFIG_8139TOO_8129=y +# CONFIG_8139_OLD_RX_RESET is not set +CONFIG_SIS900=m +CONFIG_EPIC100=m +CONFIG_SUNDANCE=m +# CONFIG_SUNDANCE_MMIO is not set +# CONFIG_TLAN is not set +CONFIG_VIA_RHINE=m +# CONFIG_VIA_RHINE_MMIO is not set +CONFIG_SC92031=m +CONFIG_NETDEV_1000=y +# CONFIG_ACENIC is not set +# CONFIG_IP1000 is not set +# CONFIG_TIGON3 is not set +# CONFIG_BNX2 is not set +# CONFIG_NETDEV_10000 is not set +# CONFIG_BNX2X is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_NET_FC is not set +# CONFIG_NETPOLL_TRAP is not set + +## +## file: drivers/net/arcnet/Kconfig +## +# CONFIG_ARCNET is not set + +## +## file: drivers/net/phy/Kconfig +## +CONFIG_PHYLIB=m +CONFIG_MARVELL_PHY=m +CONFIG_DAVICOM_PHY=m +CONFIG_QSEMI_PHY=m +CONFIG_LXT_PHY=m +CONFIG_CICADA_PHY=m +CONFIG_VITESSE_PHY=m +CONFIG_SMSC_PHY=m +CONFIG_BROADCOM_PHY=m +CONFIG_ICPLUS_PHY=m +# CONFIG_MDIO_BITBANG is not set + +## +## file: drivers/pcmcia/Kconfig +## +# CONFIG_PCCARD is not set + +## +## file: drivers/rtc/Kconfig +## +CONFIG_RTC_DRV_PL031=y + +## +## file: drivers/scsi/Kconfig +## +CONFIG_SCSI_SYM53C8XX_2=m + +## +## file: drivers/spi/Kconfig +## +# CONFIG_SPI is not set + +## +## file: drivers/tty/Kconfig +## +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +# CONFIG_SERIAL_NONSTANDARD is not set + +## +## file: drivers/tty/serial/Kconfig +## +# CONFIG_SERIAL_8250 is not set +CONFIG_SERIAL_AMBA_PL011=y +CONFIG_SERIAL_AMBA_PL011_CONSOLE=y +# CONFIG_SERIAL_JSM is not set + +## +## file: drivers/usb/Kconfig +## +CONFIG_USB_SUPPORT=y +CONFIG_USB=m + +## +## file: drivers/usb/host/Kconfig +## +CONFIG_USB_EHCI_HCD=m +CONFIG_USB_EHCI_ROOT_HUB_TT=y +CONFIG_USB_EHCI_TT_NEWSCHED=y +CONFIG_USB_ISP116X_HCD=m +CONFIG_USB_OHCI_HCD=m +# CONFIG_USB_OHCI_HCD_SSB is not set +CONFIG_USB_UHCI_HCD=m +# CONFIG_USB_U132_HCD is not set +# CONFIG_USB_SL811_HCD is not set +# CONFIG_USB_R8A66597_HCD is not set + +## +## file: drivers/video/Kconfig +## +CONFIG_VIDEO_OUTPUT_CONTROL=m +CONFIG_FB=y +CONFIG_FIRMWARE_EDID=y +CONFIG_FB_MODE_HELPERS=y +CONFIG_FB_TILEBLITTING=y +CONFIG_FB_CIRRUS=m +# CONFIG_FB_PM2 is not set +CONFIG_FB_ARMCLCD=y +# CONFIG_FB_CYBER2000 is not set +# CONFIG_FB_ASILIANT is not set +# CONFIG_FB_IMSTT is not set +# CONFIG_FB_S1D13XXX is not set +# CONFIG_FB_NVIDIA is not set +# CONFIG_FB_RIVA is not set +# CONFIG_FB_MATROX is not set +# CONFIG_FB_RADEON is not set +# CONFIG_FB_ATY128 is not set +# CONFIG_FB_ATY is not set +CONFIG_FB_S3=m +CONFIG_FB_S3_DDC=y +# CONFIG_FB_SAVAGE is not set +# CONFIG_FB_SIS is not set +# CONFIG_FB_NEOMAGIC is not set +# CONFIG_FB_KYRO is not set +# CONFIG_FB_3DFX is not set +# CONFIG_FB_VOODOO1 is not set +# CONFIG_FB_VT8623 is not set +# CONFIG_FB_TRIDENT is not set +CONFIG_FB_ARK=m +CONFIG_FB_PM3=m +CONFIG_FB_SM501=m +CONFIG_FB_VIRTUAL=m + +## +## file: drivers/video/backlight/Kconfig +## +CONFIG_BACKLIGHT_CLASS_DEVICE=m + +## +## file: drivers/video/console/Kconfig +## +CONFIG_FRAMEBUFFER_CONSOLE=y +# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set +CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y +CONFIG_FONTS=y +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y +# CONFIG_FONT_6x11 is not set +# CONFIG_FONT_7x14 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set +# CONFIG_FONT_MINI_4x6 is not set +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_SUN12x22 is not set +# CONFIG_FONT_10x18 is not set + +## +## file: drivers/video/display/Kconfig +## +CONFIG_DISPLAY_SUPPORT=m + +## +## file: drivers/video/logo/Kconfig +## +CONFIG_LOGO=y +# CONFIG_LOGO_LINUX_MONO is not set +# CONFIG_LOGO_LINUX_VGA16 is not set +CONFIG_LOGO_LINUX_CLUT224=y + +## +## file: kernel/Kconfig.preempt +## +## choice: Preemption Model +# CONFIG_PREEMPT is not set +## end choice + +## +## file: kernel/time/Kconfig +## +# CONFIG_NO_HZ is not set +# CONFIG_HIGH_RES_TIMERS is not set + +## +## file: lib/Kconfig.debug +## +CONFIG_ENABLE_WARN_DEPRECATED=y +CONFIG_ENABLE_MUST_CHECK=y +CONFIG_UNUSED_SYMBOLS=y +# CONFIG_HEADERS_CHECK is not set +CONFIG_DEBUG_BUGVERBOSE=y +# CONFIG_FRAME_POINTER is not set + +## +## file: mm/Kconfig +## +## choice: Memory model +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +## end choice + +## +## file: net/decnet/Kconfig +## +CONFIG_DECNET=m +CONFIG_DECNET_ROUTER=y + +## +## file: net/ipx/Kconfig +## +CONFIG_IPX=m +CONFIG_IPX_INTERN=y + +## +## file: net/irda/Kconfig +## +# CONFIG_IRDA is not set + +## +## file: net/lapb/Kconfig +## +# CONFIG_LAPB is not set + +## +## file: net/wanrouter/Kconfig +## +# CONFIG_WAN_ROUTER is not set + + --- linux-2.6-3.0.0~rc6.orig/debian/config/m68k/config.hp +++ linux-2.6-3.0.0~rc6/debian/config/m68k/config.hp @@ -0,0 +1,53 @@ +# CONFIG_SUN3 is not set +# CONFIG_AMIGA is not set +# CONFIG_ATARI is not set +# CONFIG_MAC is not set +# CONFIG_APOLLO is not set +# CONFIG_VME is not set +CONFIG_HP300=y +# CONFIG_DIO is not set +# CONFIG_SUN3X is not set +# CONFIG_Q40 is not set +CONFIG_M68020=y +CONFIG_M68030=y +CONFIG_M68040=y +CONFIG_M68060=y +CONFIG_MMU_MOTOROLA=y +CONFIG_M68KFPU_EMU=y +CONFIG_M68KFPU_EMU_EXTRAPREC=y +# CONFIG_M68KFPU_EMU_ONLY is not set +CONFIG_HEARTBEAT=y +# CONFIG_IDE is not set +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +CONFIG_IP_PNP_BOOTP=y +CONFIG_IP_PNP_RARP=y +CONFIG_IPX=m +# CONFIG_IPX_INTERN is not set +CONFIG_NET_ETHERNET=y +# CONFIG_KEYBOARD_ATKBD is not set +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_HIL_OLD is not set +# CONFIG_KEYBOARD_HIL is not set +CONFIG_MOUSE_PS2=m +CONFIG_MOUSE_SERIAL=m +# CONFIG_MOUSE_HIL is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_MISC is not set +CONFIG_SERIO=m +CONFIG_SERIO_SERPORT=m +# CONFIG_HP_SDC is not set +# CONFIG_HIL_MLC is not set +CONFIG_SERIO_LIBPS2=m +# CONFIG_SERIAL_8250 is not set +CONFIG_GEN_RTC=y +# CONFIG_FB is not set +# CONFIG_SOUND is not set +CONFIG_NFS_FS=y +CONFIG_ROOT_NFS=y +CONFIG_LOCKD=y +CONFIG_SUNRPC=y +CONFIG_SUNRPC_GSS=y +CONFIG_RPCSEC_GSS_KRB5=y +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_CRC32=y --- linux-2.6-3.0.0~rc6.orig/debian/config/m68k/README.build +++ linux-2.6-3.0.0~rc6/debian/config/m68k/README.build @@ -0,0 +1,26 @@ +HOWTO cross-build m68k linux-image + +Building linux-image packages takes a while, especially on the "slower +arches", ie m68k. Cross-compiling is an alternative, and it works very well +for m68k. + +You need to set up a cross-compiler. The toolchain-source package has some +limitations, I prefer using cross-tools, see this page for instructions: + + http://people.debian.org/~cts/debian-m68k/cross-compile/ + +Now you only have to tell the debian build system, that you do want to build +packages for m68k. It used to be sufficient to pass an option to debuild, +since recently you also have to set an environment variable, like this: + + DEB_HOST_ARCH=m68k debuild -B -am68k + +If you also want to build source packages, omit the -B. + +If you want to build images for just one of the currently nine subarches, +you can uncomment some lines in the flavours section in: + debian/arch/m68k/defines + +The first run of debuild will give you an error message that updating the +configs suceeded, the second run will build the images. + --- linux-2.6-3.0.0~rc6.orig/debian/config/m68k/config.atari +++ linux-2.6-3.0.0~rc6/debian/config/m68k/config.atari @@ -0,0 +1,225 @@ +## +## file: arch/m68k/Kconfig +## +CONFIG_ATARI_MFPSER=m +CONFIG_ATARI_MIDI=m +CONFIG_ATARI_DSP56K=m +CONFIG_SERIAL_CONSOLE=y + +## +## file: arch/m68k/Kconfig.mmu +## +# CONFIG_AMIGA is not set +CONFIG_ATARI=y +# CONFIG_MAC is not set +# CONFIG_APOLLO is not set +# CONFIG_VME is not set +# CONFIG_HP300 is not set +# CONFIG_SUN3X is not set +# CONFIG_Q40 is not set +# CONFIG_SUN3 is not set +CONFIG_NATFEAT=y +CONFIG_NFBLOCK=y +CONFIG_NFCON=y +CONFIG_NFETH=y +CONFIG_M68020=y +CONFIG_M68030=y +CONFIG_M68040=y +CONFIG_M68060=y +CONFIG_M68KFPU_EMU=y +CONFIG_M68KFPU_EMU_EXTRAPREC=y +# CONFIG_M68KFPU_EMU_ONLY is not set +CONFIG_STRAM_PROC=y +CONFIG_HEARTBEAT=y + +## +## file: drivers/block/Kconfig +## +CONFIG_ATARI_FLOPPY=y +# CONFIG_PARIDE is not set +# CONFIG_BLK_DEV_HD is not set + +## +## file: drivers/char/Kconfig +## +CONFIG_PRINTER=m +# CONFIG_LP_CONSOLE is not set +# CONFIG_PPDEV is not set +CONFIG_NVRAM=y +CONFIG_RTC=y +CONFIG_GEN_RTC=y + +## +## file: drivers/ide/Kconfig +## +CONFIG_IDE=y +# CONFIG_BLK_DEV_IDE_SATA is not set +CONFIG_IDE_GD=y +CONFIG_IDE_GD_ATA=y +CONFIG_BLK_DEV_IDECD=y +# CONFIG_BLK_DEV_IDETAPE is not set +CONFIG_IDE_GENERIC=y +CONFIG_BLK_DEV_FALCON_IDE=y + +## +## file: drivers/input/joystick/Kconfig +## +# CONFIG_INPUT_JOYSTICK is not set + +## +## file: drivers/input/keyboard/Kconfig +## +CONFIG_KEYBOARD_ATARI=y +CONFIG_KEYBOARD_ATKBD=y +# CONFIG_KEYBOARD_SUNKBD is not set + +## +## file: drivers/input/misc/Kconfig +## +CONFIG_INPUT_MISC=y +CONFIG_INPUT_M68K_BEEP=m +CONFIG_INPUT_UINPUT=m + +## +## file: drivers/input/mouse/Kconfig +## +CONFIG_MOUSE_PS2=y +# CONFIG_MOUSE_SERIAL is not set +CONFIG_MOUSE_ATARI=y + +## +## file: drivers/input/serio/Kconfig +## +CONFIG_SERIO=y +CONFIG_SERIO_SERPORT=y +# CONFIG_SERIO_PARKBD is not set +CONFIG_SERIO_LIBPS2=y + +## +## file: drivers/net/Kconfig +## +CONFIG_NET_ETHERNET=y +CONFIG_ATARILANCE=y +# CONFIG_PLIP is not set +CONFIG_PPP_FILTER=y +CONFIG_PPP_ASYNC=m +CONFIG_PPP_SYNC_TTY=m + +## +## file: drivers/parport/Kconfig +## +# CONFIG_PARPORT is not set +CONFIG_PARPORT_ATARI=m + +## +## file: drivers/rtc/Kconfig +## +CONFIG_RTC_CLASS=y +CONFIG_RTC_DRV_GENERIC=y + +## +## file: drivers/scsi/Kconfig +## +# CONFIG_SCSI_PPA is not set +# CONFIG_SCSI_IMM is not set +CONFIG_ATARI_SCSI=y + +## +## file: drivers/tty/serial/Kconfig +## +# CONFIG_SERIAL_8250 is not set + +## +## file: drivers/video/Kconfig +## +CONFIG_FB=y +# CONFIG_FB_MODE_HELPERS is not set +# CONFIG_FB_TILEBLITTING is not set +CONFIG_FB_ATARI=y +# CONFIG_FB_S1D13XXX is not set +CONFIG_FB_ATY=y +# CONFIG_FB_VIRTUAL is not set + +## +## file: drivers/video/console/Kconfig +## +CONFIG_FRAMEBUFFER_CONSOLE=y +# CONFIG_FONTS is not set +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y + +## +## file: drivers/video/logo/Kconfig +## +# CONFIG_LOGO is not set + +## +## file: fs/affs/Kconfig +## +CONFIG_AFFS_FS=m + +## +## file: fs/hfs/Kconfig +## +CONFIG_HFS_FS=m + +## +## file: fs/hfsplus/Kconfig +## +CONFIG_HFSPLUS_FS=m + +## +## file: fs/nfs/Kconfig +## +# CONFIG_NFS_V4 is not set + +## +## file: fs/nfsd/Kconfig +## +# CONFIG_NFSD_V4 is not set + +## +## file: fs/partitions/Kconfig +## +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_ATARI_PARTITION=y + +## +## file: fs/ufs/Kconfig +## +# CONFIG_UFS_FS_WRITE is not set + +## +## file: lib/Kconfig +## +CONFIG_CRC32=y + +## +## file: net/ipv4/Kconfig +## +# CONFIG_IP_PNP is not set + +## +## file: net/ipx/Kconfig +## +CONFIG_IPX=m +# CONFIG_IPX_INTERN is not set + +## +## file: sound/Kconfig +## +# CONFIG_SND is not set + +## +## file: sound/oss/dmasound/Kconfig +## +CONFIG_DMASOUND_ATARI=m + +## +## file: unknown +## +CONFIG_ATARI_ETHERNEC=m +CONFIG_ATARI_ROM_ISA=y +CONFIG_ATARI_SCC=y +CONFIG_ATARI_SCC_DMA=y + --- linux-2.6-3.0.0~rc6.orig/debian/config/m68k/config.bvme6000 +++ linux-2.6-3.0.0~rc6/debian/config/m68k/config.bvme6000 @@ -0,0 +1,129 @@ +## +## file: arch/m68k/Kconfig +## +CONFIG_BVME6000_SCC=y +CONFIG_SERIAL_CONSOLE=y + +## +## file: arch/m68k/Kconfig.mmu +## +# CONFIG_AMIGA is not set +# CONFIG_ATARI is not set +# CONFIG_MAC is not set +# CONFIG_APOLLO is not set +CONFIG_VME=y +# CONFIG_MVME147 is not set +# CONFIG_MVME16x is not set +CONFIG_BVME6000=y +# CONFIG_HP300 is not set +# CONFIG_SUN3X is not set +# CONFIG_Q40 is not set +# CONFIG_SUN3 is not set +# CONFIG_M68020 is not set +# CONFIG_M68030 is not set +CONFIG_M68040=y +CONFIG_M68060=y +# CONFIG_M68KFPU_EMU is not set + +## +## file: drivers/char/Kconfig +## +CONFIG_GEN_RTC=m + +## +## file: drivers/firewire/Kconfig +## +# CONFIG_FIREWIRE is not set + +## +## file: drivers/ide/Kconfig +## +# CONFIG_IDE is not set + +## +## file: drivers/input/joystick/Kconfig +## +# CONFIG_INPUT_JOYSTICK is not set + +## +## file: drivers/input/keyboard/Kconfig +## +# CONFIG_KEYBOARD_ATKBD is not set +# CONFIG_KEYBOARD_SUNKBD is not set + +## +## file: drivers/input/misc/Kconfig +## +# CONFIG_INPUT_MISC is not set + +## +## file: drivers/input/mouse/Kconfig +## +CONFIG_MOUSE_PS2=m +CONFIG_MOUSE_SERIAL=m + +## +## file: drivers/input/serio/Kconfig +## +CONFIG_SERIO=m +CONFIG_SERIO_SERPORT=m +CONFIG_SERIO_LIBPS2=m + +## +## file: drivers/net/Kconfig +## +CONFIG_NET_ETHERNET=y +CONFIG_BVME6000_NET=y + +## +## file: drivers/scsi/Kconfig +## +CONFIG_BVME6000_SCSI=y + +## +## file: drivers/tty/serial/Kconfig +## +CONFIG_SERIAL_8250=m +CONFIG_SERIAL_8250_NR_UARTS=4 +# CONFIG_SERIAL_8250_EXTENDED is not set + +## +## file: drivers/video/Kconfig +## +# CONFIG_FB is not set + +## +## file: fs/nfs/Kconfig +## +CONFIG_NFS_FS=y +CONFIG_ROOT_NFS=y + +## +## file: fs/partitions/Kconfig +## +# CONFIG_PARTITION_ADVANCED is not set + +## +## file: lib/Kconfig +## +#. TODO +CONFIG_CRC32=m + +## +## file: net/ipv4/Kconfig +## +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +CONFIG_IP_PNP_BOOTP=y +CONFIG_IP_PNP_RARP=y + +## +## file: net/ipx/Kconfig +## +# CONFIG_IPX is not set + +## +## file: sound/Kconfig +## +# CONFIG_SOUND is not set + --- linux-2.6-3.0.0~rc6.orig/debian/config/m68k/defines +++ linux-2.6-3.0.0~rc6/debian/config/m68k/defines @@ -0,0 +1,45 @@ +[base] +compiler: gcc-4.4 +flavours: + amiga + atari + bvme6000 +# hp + mac + mvme147 + mvme16x +# q40 +# sun3 +kernel-arch: m68k + +[image] +initramfs: false +suggests: vmelilo, fdutils + +[amiga_description] +hardware: Amiga + +[atari_description] +hardware: Atari + +[bvme6000_description] +hardware: BVM BVME4000 and BVME6000 + +[hp_description] +hardware: HP + +[mac_description] +hardware: Macintosh + +[mvme147_description] +hardware: Motorola MVME147 + +[mvme16x_description] +hardware: Motorola MVME162/6/7, MVME172/7 + +[q40_description] +hardware: Q40 and Q60 + +[sun3_description] +hardware: sun3 + --- linux-2.6-3.0.0~rc6.orig/debian/config/m68k/config.amiga +++ linux-2.6-3.0.0~rc6/debian/config/m68k/config.amiga @@ -0,0 +1,302 @@ +## +## file: arch/m68k/Kconfig +## +CONFIG_AMIGA_BUILTIN_SERIAL=y +CONFIG_MULTIFACE_III_TTY=m +CONFIG_SERIAL_CONSOLE=y + +## +## file: arch/m68k/Kconfig.mmu +## +CONFIG_AMIGA=y +# CONFIG_ATARI is not set +# CONFIG_MAC is not set +# CONFIG_APOLLO is not set +# CONFIG_VME is not set +# CONFIG_HP300 is not set +# CONFIG_SUN3X is not set +# CONFIG_Q40 is not set +# CONFIG_SUN3 is not set +CONFIG_M68020=y +CONFIG_M68030=y +CONFIG_M68040=y +CONFIG_M68060=y +CONFIG_M68KFPU_EMU=y +CONFIG_M68KFPU_EMU_EXTRAPREC=y +# CONFIG_M68KFPU_EMU_ONLY is not set +CONFIG_ZORRO=y +CONFIG_AMIGA_PCMCIA=y +# CONFIG_HEARTBEAT is not set + +## +## file: drivers/block/Kconfig +## +CONFIG_AMIGA_FLOPPY=y +CONFIG_AMIGA_Z2RAM=y +# CONFIG_PARIDE is not set + +## +## file: drivers/char/Kconfig +## +CONFIG_PRINTER=m +# CONFIG_LP_CONSOLE is not set +# CONFIG_PPDEV is not set +CONFIG_GEN_RTC=m + +## +## file: drivers/firewire/Kconfig +## +# CONFIG_FIREWIRE is not set + +## +## file: drivers/ide/Kconfig +## +CONFIG_IDE=y +# CONFIG_BLK_DEV_IDE_SATA is not set +CONFIG_IDE_GD=y +CONFIG_IDE_GD_ATA=y +CONFIG_BLK_DEV_IDECD=y +# CONFIG_BLK_DEV_IDETAPE is not set +CONFIG_IDE_GENERIC=y +CONFIG_BLK_DEV_GAYLE=y +CONFIG_BLK_DEV_BUDDHA=y + +## +## file: drivers/input/joystick/Kconfig +## +CONFIG_INPUT_JOYSTICK=y +# CONFIG_JOYSTICK_ANALOG is not set +# CONFIG_JOYSTICK_A3D is not set +# CONFIG_JOYSTICK_ADI is not set +# CONFIG_JOYSTICK_COBRA is not set +# CONFIG_JOYSTICK_GF2K is not set +# CONFIG_JOYSTICK_GRIP is not set +# CONFIG_JOYSTICK_GRIP_MP is not set +# CONFIG_JOYSTICK_GUILLEMOT is not set +# CONFIG_JOYSTICK_INTERACT is not set +# CONFIG_JOYSTICK_SIDEWINDER is not set +# CONFIG_JOYSTICK_TMDC is not set +# CONFIG_JOYSTICK_WARRIOR is not set +# CONFIG_JOYSTICK_MAGELLAN is not set +# CONFIG_JOYSTICK_SPACEORB is not set +# CONFIG_JOYSTICK_SPACEBALL is not set +# CONFIG_JOYSTICK_STINGER is not set +# CONFIG_JOYSTICK_TWIDJOY is not set +# CONFIG_JOYSTICK_DB9 is not set +# CONFIG_JOYSTICK_GAMECON is not set +# CONFIG_JOYSTICK_TURBOGRAFX is not set +CONFIG_JOYSTICK_AMIGA=m +# CONFIG_JOYSTICK_JOYDUMP is not set + +## +## file: drivers/input/joystick/iforce/Kconfig +## +# CONFIG_JOYSTICK_IFORCE is not set + +## +## file: drivers/input/keyboard/Kconfig +## +CONFIG_KEYBOARD_AMIGA=y +# CONFIG_KEYBOARD_ATKBD is not set +# CONFIG_KEYBOARD_SUNKBD is not set + +## +## file: drivers/input/misc/Kconfig +## +# CONFIG_INPUT_MISC is not set + +## +## file: drivers/input/mouse/Kconfig +## +# CONFIG_MOUSE_PS2 is not set +# CONFIG_MOUSE_SERIAL is not set +# CONFIG_MOUSE_INPORT is not set +# CONFIG_MOUSE_LOGIBM is not set +# CONFIG_MOUSE_PC110PAD is not set +CONFIG_MOUSE_AMIGA=y + +## +## file: drivers/input/serio/Kconfig +## +CONFIG_SERIO=m +CONFIG_SERIO_SERPORT=m +# CONFIG_SERIO_PARKBD is not set + +## +## file: drivers/net/Kconfig +## +CONFIG_NET_ETHERNET=y +CONFIG_ARIADNE=m +CONFIG_A2065=m +CONFIG_HYDRA=m +CONFIG_ZORRO8390=m +CONFIG_APNE=m +# CONFIG_NET_VENDOR_3COM is not set +# CONFIG_NET_VENDOR_SMC is not set +# CONFIG_NET_VENDOR_RACAL is not set +# CONFIG_AT1700 is not set +# CONFIG_DEPCA is not set +# CONFIG_HP100 is not set +# CONFIG_NET_ISA is not set +# CONFIG_NET_PCI is not set +CONFIG_PLIP=m + +## +## file: drivers/net/arcnet/Kconfig +## +# CONFIG_ARCNET is not set + +## +## file: drivers/net/tokenring/Kconfig +## +# CONFIG_TR is not set + +## +## file: drivers/parport/Kconfig +## +CONFIG_PARPORT_AMIGA=m +CONFIG_PARPORT_MFC3=m + +## +## file: drivers/pnp/Kconfig +## +# CONFIG_PNP is not set + +## +## file: drivers/scsi/Kconfig +## +CONFIG_SCSI_SPI_ATTRS=y +# CONFIG_SCSI_AIC7XXX_OLD is not set +# CONFIG_SCSI_ADVANSYS is not set +# CONFIG_SCSI_IN2000 is not set +# CONFIG_SCSI_DTC3280 is not set +# CONFIG_SCSI_EATA_PIO is not set +# CONFIG_SCSI_FUTURE_DOMAIN is not set +# CONFIG_SCSI_GENERIC_NCR5380 is not set +# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set +# CONFIG_SCSI_PPA is not set +# CONFIG_SCSI_IMM is not set +# CONFIG_SCSI_NCR53C406A is not set +# CONFIG_SCSI_PAS16 is not set +# CONFIG_SCSI_QLOGIC_FAS is not set +# CONFIG_SCSI_SYM53C416 is not set +# CONFIG_SCSI_T128 is not set +CONFIG_A3000_SCSI=y +CONFIG_A2091_SCSI=y +CONFIG_GVP11_SCSI=y +CONFIG_SCSI_A4000T=y +CONFIG_SCSI_ZORRO7XX=y + +## +## file: drivers/staging/generic_serial/Kconfig +## +CONFIG_A2232=m + +## +## file: drivers/tty/serial/Kconfig +## +# CONFIG_SERIAL_8250 is not set + +## +## file: drivers/video/Kconfig +## +CONFIG_FB=y +# CONFIG_FB_MODE_HELPERS is not set +# CONFIG_FB_TILEBLITTING is not set +CONFIG_FB_CIRRUS=y +# CONFIG_FB_PM2 is not set +CONFIG_FB_AMIGA=y +CONFIG_FB_AMIGA_OCS=y +CONFIG_FB_AMIGA_ECS=y +CONFIG_FB_AMIGA_AGA=y +CONFIG_FB_FM2=y +# CONFIG_FB_S1D13XXX is not set +# CONFIG_FB_VIRTUAL is not set + +## +## file: drivers/video/console/Kconfig +## +CONFIG_FRAMEBUFFER_CONSOLE=y +# CONFIG_FONTS is not set +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y +CONFIG_FONT_PEARL_8x8=y + +## +## file: drivers/video/logo/Kconfig +## +CONFIG_LOGO=y +CONFIG_LOGO_LINUX_MONO=y +CONFIG_LOGO_LINUX_VGA16=y +CONFIG_LOGO_LINUX_CLUT224=y + +## +## file: drivers/zorro/Kconfig +## +CONFIG_ZORRO_NAMES=y + +## +## file: fs/affs/Kconfig +## +CONFIG_AFFS_FS=y + +## +## file: fs/hfs/Kconfig +## +CONFIG_HFS_FS=m + +## +## file: fs/hfsplus/Kconfig +## +CONFIG_HFSPLUS_FS=m + +## +## file: fs/partitions/Kconfig +## +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_AMIGA_PARTITION=y + +## +## file: fs/ufs/Kconfig +## +# CONFIG_UFS_FS_WRITE is not set + +## +## file: init/Kconfig +## +#. TODO +# CONFIG_AUDIT is not set + +## +## file: net/ipx/Kconfig +## +CONFIG_IPX=m +# CONFIG_IPX_INTERN is not set + +## +## file: sound/Kconfig +## +# CONFIG_SND is not set + +## +## file: sound/oss/dmasound/Kconfig +## +CONFIG_DMASOUND_PAULA=m + +## +## file: unknown +## +CONFIG_BLK_DEV_IDEDOUBLER=y +CONFIG_BLZ1230_SCSI=y +CONFIG_BLZ2060_SCSI=y +CONFIG_CYBERSTORMII_SCSI=y +CONFIG_CYBERSTORM_SCSI=y +CONFIG_FASTLANE_SCSI=y +# CONFIG_FB_CYBER is not set +# CONFIG_FB_RETINAZ3 is not set +# CONFIG_FB_VIRGE is not set +# CONFIG_OKTAGON_SCSI is not set +CONFIG_SCSI_AMIGA7XX=y +# CONFIG_SCSI_NCR53C7xx_FAST is not set +# CONFIG_WHIPPET_SERIAL is not set + --- linux-2.6-3.0.0~rc6.orig/debian/config/m68k/config +++ linux-2.6-3.0.0~rc6/debian/config/m68k/config @@ -0,0 +1,306 @@ +## +## file: arch/m68k/Kconfig.mmu +## +# CONFIG_ADVANCED is not set +CONFIG_PROC_HARDWARE=y + +## +## file: drivers/block/Kconfig +## +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_COUNT=16 +CONFIG_BLK_DEV_RAM_SIZE=4096 +# CONFIG_CDROM_PKTCDVD is not set + +## +## file: drivers/char/Kconfig +## +CONFIG_GEN_RTC_X=y +# CONFIG_DTLK is not set + +## +## file: drivers/char/ipmi/Kconfig +## +# CONFIG_IPMI_HANDLER is not set + +## +## file: drivers/gpu/drm/Kconfig +## +# CONFIG_DRM is not set + +## +## file: drivers/hwmon/Kconfig +## +# CONFIG_SENSORS_F71805F is not set + +## +## file: drivers/i2c/Kconfig +## +# CONFIG_I2C is not set + +## +## file: drivers/infiniband/Kconfig +## +# CONFIG_INFINIBAND is not set + +## +## file: drivers/input/Kconfig +## +# CONFIG_INPUT_JOYDEV is not set + +## +## file: drivers/input/gameport/Kconfig +## +# CONFIG_GAMEPORT is not set + +## +## file: drivers/input/keyboard/Kconfig +## +CONFIG_INPUT_KEYBOARD=y +# CONFIG_KEYBOARD_LKKBD is not set +# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_XTKBD is not set + +## +## file: drivers/input/mouse/Kconfig +## +CONFIG_INPUT_MOUSE=y +# CONFIG_MOUSE_VSXXXAA is not set + +## +## file: drivers/input/serio/Kconfig +## +# CONFIG_SERIO_RAW is not set + +## +## file: drivers/input/touchscreen/Kconfig +## +# CONFIG_INPUT_TOUCHSCREEN is not set + +## +## file: drivers/media/Kconfig +## +# CONFIG_VIDEO_DEV is not set + +## +## file: drivers/mmc/Kconfig +## +# CONFIG_MMC is not set + +## +## file: drivers/mtd/Kconfig +## +# CONFIG_MTD is not set + +## +## file: drivers/net/Kconfig +## +CONFIG_NETDEVICES=y +# CONFIG_BONDING is not set +CONFIG_EQUALIZER=m +# CONFIG_TUN is not set +# CONFIG_NETPOLL_TRAP is not set + +## +## file: drivers/net/wan/Kconfig +## +# CONFIG_WAN is not set + +## +## file: drivers/net/wireless/ipw2x00/Kconfig +## +# CONFIG_IPW2100 is not set + +## +## file: drivers/scsi/Kconfig +## +CONFIG_SCSI=y +CONFIG_BLK_DEV_SD=y +# CONFIG_SCSI_ISCSI_ATTRS is not set +# CONFIG_ISCSI_TCP is not set + +## +## file: drivers/staging/Kconfig +## +# CONFIG_STAGING is not set + +## +## file: drivers/telephony/Kconfig +## +# CONFIG_PHONE is not set + +## +## file: drivers/tty/Kconfig +## +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +# CONFIG_SERIAL_NONSTANDARD is not set + +## +## file: drivers/tty/serial/Kconfig +## +CONFIG_SERIAL_8250_RUNTIME_UARTS=4 + +## +## file: drivers/w1/Kconfig +## +# CONFIG_W1 is not set + +## +## file: drivers/watchdog/Kconfig +## +# CONFIG_WATCHDOG is not set + +## +## file: fs/adfs/Kconfig +## +# CONFIG_ADFS_FS is not set + +## +## file: fs/afs/Kconfig +## +# CONFIG_AFS_FS is not set + +## +## file: fs/befs/Kconfig +## +# CONFIG_BEFS_FS is not set + +## +## file: fs/bfs/Kconfig +## +# CONFIG_BFS_FS is not set + +## +## file: fs/Kconfig.binfmt +## +CONFIG_BINFMT_ELF=y +CONFIG_BINFMT_AOUT=m +CONFIG_BINFMT_MISC=m + +## +## file: fs/cifs/Kconfig +## +# CONFIG_CIFS is not set + +## +## file: fs/cramfs/Kconfig +## +CONFIG_CRAMFS=m + +## +## file: fs/efs/Kconfig +## +# CONFIG_EFS_FS is not set + +## +## file: fs/ext2/Kconfig +## +CONFIG_EXT2_FS=y + +## +## file: fs/ext3/Kconfig +## +CONFIG_EXT3_FS=y + +## +## file: fs/freevxfs/Kconfig +## +# CONFIG_VXFS_FS is not set + +## +## file: fs/jbd/Kconfig +## +# CONFIG_JBD_DEBUG is not set + +## +## file: fs/partitions/Kconfig +## +CONFIG_MSDOS_PARTITION=y + +## +## file: fs/qnx4/Kconfig +## +# CONFIG_QNX4FS_FS is not set + +## +## file: fs/sysfs/Kconfig +## +CONFIG_SYSFS=y + +## +## file: init/Kconfig +## +# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set + +## +## file: lib/Kconfig.debug +## +# CONFIG_SCHEDSTATS is not set +# CONFIG_FRAME_POINTER is not set + +## +## file: net/atm/Kconfig +## +# CONFIG_ATM is not set + +## +## file: net/ax25/Kconfig +## +# CONFIG_HAMRADIO is not set + +## +## file: net/bluetooth/Kconfig +## +#. TODO +# CONFIG_BT is not set + +## +## file: net/bridge/Kconfig +## +#. TODO +# CONFIG_BRIDGE is not set + +## +## file: net/decnet/Kconfig +## +# CONFIG_DECNET is not set + +## +## file: net/ipv4/Kconfig +## +#. TODO +# CONFIG_IP_ADVANCED_ROUTER is not set + +## +## file: net/irda/Kconfig +## +# CONFIG_IRDA is not set + +## +## file: net/lapb/Kconfig +## +# CONFIG_LAPB is not set + +## +## file: net/llc/Kconfig +## +# CONFIG_LLC2 is not set + +## +## file: net/sched/Kconfig +## +#. TODO +# CONFIG_NET_SCHED is not set + +## +## file: net/wanrouter/Kconfig +## +# CONFIG_WAN_ROUTER is not set + +## +## file: net/xfrm/Kconfig +## +#. TODO +CONFIG_NET_KEY=y + --- linux-2.6-3.0.0~rc6.orig/debian/config/m68k/config.q40 +++ linux-2.6-3.0.0~rc6/debian/config/m68k/config.q40 @@ -0,0 +1,104 @@ +# CONFIG_SUN3 is not set +# CONFIG_AMIGA is not set +# CONFIG_ATARI is not set +# CONFIG_MAC is not set +# CONFIG_APOLLO is not set +# CONFIG_VME is not set +# CONFIG_HP300 is not set +# CONFIG_SUN3X is not set +CONFIG_Q40=y +# CONFIG_M68020 is not set +# CONFIG_M68030 is not set +CONFIG_M68040=y +CONFIG_M68060=y +CONFIG_MMU_MOTOROLA=y +CONFIG_M68KFPU_EMU=y +CONFIG_M68KFPU_EMU_EXTRAPREC=y +# CONFIG_M68KFPU_EMU_ONLY is not set +# CONFIG_HEARTBEAT is not set +CONFIG_ISA=y +CONFIG_GENERIC_ISA_DMA=y +# CONFIG_PNP is not set +# CONFIG_BLK_DEV_FD is not set +CONFIG_IDE=y +CONFIG_IDE_GD=y +# CONFIG_BLK_DEV_IDE_SATA is not set +CONFIG_IDE_GD_ATA=y +CONFIG_BLK_DEV_IDECD=y +# disable IDETAPE, causes ICE +# CONFIG_BLK_DEV_IDETAPE is not set +CONFIG_IDE_GENERIC=y +CONFIG_BLK_DEV_Q40IDE=y +# CONFIG_BLK_DEV_IDEDMA is not set +# CONFIG_BLK_DEV_HD is not set +# CONFIG_SCSI_IN2000 is not set +# CONFIG_SCSI_DTC3280 is not set +# CONFIG_SCSI_FUTURE_DOMAIN is not set +# CONFIG_SCSI_GENERIC_NCR5380 is not set +# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set +# CONFIG_SCSI_NCR53C406A is not set +# CONFIG_SCSI_PAS16 is not set +# CONFIG_SCSI_QLOGIC_FAS is not set +# CONFIG_SCSI_SYM53C416 is not set +# CONFIG_SCSI_T128 is not set +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +CONFIG_IP_PNP_BOOTP=y +CONFIG_IP_PNP_RARP=y +CONFIG_IPX=m +# CONFIG_IPX_INTERN is not set +# CONFIG_ARCNET is not set +CONFIG_NET_ETHERNET=y +# CONFIG_NET_VENDOR_3COM is not set +# CONFIG_NET_VENDOR_SMC is not set +# CONFIG_NET_VENDOR_RACAL is not set +# CONFIG_AT1700 is not set +# CONFIG_DEPCA is not set +# CONFIG_HP100 is not set +# CONFIG_NET_ISA is not set +CONFIG_NE2000=m +# CONFIG_NET_PCI is not set +# CONFIG_TR is not set +# CONFIG_KEYBOARD_ATKBD is not set +# CONFIG_KEYBOARD_SUNKBD is not set +CONFIG_MOUSE_PS2=m +CONFIG_MOUSE_SERIAL=m +# CONFIG_MOUSE_INPORT is not set +# CONFIG_MOUSE_LOGIBM is not set +# CONFIG_MOUSE_PC110PAD is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_MISC is not set +CONFIG_SERIO=m +CONFIG_SERIO_SERPORT=m +CONFIG_SERIO_Q40KBD=m +CONFIG_SERIO_LIBPS2=m +# CONFIG_SERIAL_8250 is not set +CONFIG_GEN_RTC=m +CONFIG_FB=y +CONFIG_FB_CFB_IMAGEBLIT=y +# CONFIG_FB_MACMODES is not set +# CONFIG_FB_MODE_HELPERS is not set +# CONFIG_FB_TILEBLITTING is not set +CONFIG_FB_Q40=y +# CONFIG_FB_S1D13XXX is not set +# CONFIG_FB_VIRTUAL is not set +CONFIG_FRAMEBUFFER_CONSOLE=y +# CONFIG_FONTS is not set +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y +CONFIG_LOGO=y +CONFIG_LOGO_LINUX_MONO=y +CONFIG_LOGO_LINUX_VGA16=y +CONFIG_LOGO_LINUX_CLUT224=y +CONFIG_SOUND=y +CONFIG_DMASOUND_Q40=y +CONFIG_DMASOUND=y +CONFIG_UFS_FS_WRITE=y +CONFIG_NFS_FS=y +CONFIG_ROOT_NFS=y +CONFIG_LOCKD=y +CONFIG_SUNRPC=y +CONFIG_SUNRPC_GSS=y +CONFIG_RPCSEC_GSS_KRB5=y +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_CRC32=y --- linux-2.6-3.0.0~rc6.orig/debian/config/m68k/config.mac +++ linux-2.6-3.0.0~rc6/debian/config/m68k/config.mac @@ -0,0 +1,210 @@ +## +## file: arch/m68k/Kconfig +## +CONFIG_SERIAL_CONSOLE=y + +## +## file: arch/m68k/Kconfig.mmu +## +# CONFIG_AMIGA is not set +# CONFIG_ATARI is not set +CONFIG_MAC=y +# CONFIG_APOLLO is not set +# CONFIG_VME is not set +# CONFIG_HP300 is not set +# CONFIG_SUN3X is not set +# CONFIG_Q40 is not set +# CONFIG_SUN3 is not set +CONFIG_M68020=y +CONFIG_M68030=y +CONFIG_M68040=y +# CONFIG_M68060 is not set +CONFIG_M68KFPU_EMU=y +CONFIG_M68KFPU_EMU_EXTRAPREC=y +# CONFIG_M68KFPU_EMU_ONLY is not set +# CONFIG_HEARTBEAT is not set + +## +## file: drivers/block/Kconfig +## +CONFIG_BLK_DEV_SWIM=m + +## +## file: drivers/char/Kconfig +## +CONFIG_GEN_RTC=m + +## +## file: drivers/ide/Kconfig +## +CONFIG_IDE=y +# CONFIG_BLK_DEV_IDE_SATA is not set +CONFIG_IDE_GD=y +CONFIG_IDE_GD_ATA=y +CONFIG_BLK_DEV_IDECD=y +# CONFIG_BLK_DEV_IDETAPE is not set +CONFIG_IDE_GENERIC=y +CONFIG_BLK_DEV_MAC_IDE=y + +## +## file: drivers/input/joystick/Kconfig +## +# CONFIG_INPUT_JOYSTICK is not set + +## +## file: drivers/input/keyboard/Kconfig +## +# CONFIG_KEYBOARD_ATKBD is not set +# CONFIG_KEYBOARD_SUNKBD is not set + +## +## file: drivers/input/misc/Kconfig +## +CONFIG_INPUT_MISC=y +CONFIG_INPUT_UINPUT=m + +## +## file: drivers/input/mouse/Kconfig +## +CONFIG_MOUSE_PS2=m +CONFIG_MOUSE_SERIAL=m + +## +## file: drivers/input/serio/Kconfig +## +CONFIG_SERIO=m +CONFIG_SERIO_SERPORT=m +CONFIG_SERIO_LIBPS2=m + +## +## file: drivers/macintosh/Kconfig +## +CONFIG_ADB=y +CONFIG_ADB_MACII=y +# CONFIG_ADB_MACIISI is not set +CONFIG_ADB_IOP=y # switched on for the benefit of IIfx, Q900, Q950 +CONFIG_ADB_PMU68K=y +CONFIG_ADB_CUDA=y +CONFIG_INPUT_ADBHID=y +CONFIG_MAC_EMUMOUSEBTN=y +# CONFIG_WINDFARM is not set + +## +## file: drivers/net/Kconfig +## +CONFIG_NET_ETHERNET=y +CONFIG_MAC8390=y +CONFIG_MAC89x0=y +CONFIG_MACSONIC=y # switched back on as requested by Finn Thain +CONFIG_MACMACE=y +# CONFIG_NET_VENDOR_SMC is not set + +## +## file: drivers/net/appletalk/Kconfig +## +CONFIG_IPDDP=m +CONFIG_IPDDP_ENCAP=y +CONFIG_IPDDP_DECAP=y + +## +## file: drivers/parport/Kconfig +## +# CONFIG_PARPORT is not set +# CONFIG_PARPORT_PC is not set + +## +## file: drivers/scsi/Kconfig +## +CONFIG_MAC_SCSI=y +CONFIG_SCSI_MAC_ESP=y + +## +## file: drivers/tty/serial/Kconfig +## +# CONFIG_SERIAL_8250 is not set + +## +## file: drivers/video/Kconfig +## +CONFIG_FB=y +# CONFIG_FB_MODE_HELPERS is not set +# CONFIG_FB_TILEBLITTING is not set +CONFIG_FB_VALKYRIE=y +CONFIG_FB_MAC=y +# CONFIG_FB_S1D13XXX is not set +# CONFIG_FB_VIRTUAL is not set + +## +## file: drivers/video/console/Kconfig +## +CONFIG_FRAMEBUFFER_CONSOLE=y +# CONFIG_FONTS is not set +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y +CONFIG_FONT_6x11=y + +## +## file: drivers/video/logo/Kconfig +## +CONFIG_LOGO=y +CONFIG_LOGO_LINUX_MONO=y +CONFIG_LOGO_LINUX_VGA16=y +CONFIG_LOGO_LINUX_CLUT224=y +CONFIG_LOGO_MAC_CLUT224=y + +## +## file: fs/affs/Kconfig +## +CONFIG_AFFS_FS=m + +## +## file: fs/hfs/Kconfig +## +CONFIG_HFS_FS=y + +## +## file: fs/hfsplus/Kconfig +## +CONFIG_HFSPLUS_FS=y + +## +## file: fs/partitions/Kconfig +## +CONFIG_AMIGA_PARTITION=y +CONFIG_ATARI_PARTITION=y +CONFIG_MAC_PARTITION=y +CONFIG_BSD_DISKLABEL=y +CONFIG_MINIX_SUBPARTITION=y +CONFIG_SOLARIS_X86_PARTITION=y +CONFIG_UNIXWARE_DISKLABEL=y +CONFIG_LDM_PARTITION=y +CONFIG_LDM_DEBUG=y +CONFIG_SUN_PARTITION=y + +## +## file: fs/ufs/Kconfig +## +# CONFIG_UFS_FS_WRITE is not set + +## +## file: init/Kconfig +## +#. TODO +# CONFIG_AUDIT is not set + +## +## file: net/ipx/Kconfig +## +CONFIG_IPX=m +# CONFIG_IPX_INTERN is not set + +## +## file: sound/Kconfig +## +# CONFIG_SOUND is not set + +## +## file: unknown +## +CONFIG_MAC_SCC=y + --- linux-2.6-3.0.0~rc6.orig/debian/config/m68k/config.mvme16x +++ linux-2.6-3.0.0~rc6/debian/config/m68k/config.mvme16x @@ -0,0 +1,147 @@ +## +## file: arch/m68k/Kconfig +## +CONFIG_MVME162_SCC=y +CONFIG_SERIAL_CONSOLE=y + +## +## file: arch/m68k/Kconfig.mmu +## +# CONFIG_AMIGA is not set +# CONFIG_ATARI is not set +# CONFIG_MAC is not set +# CONFIG_APOLLO is not set +CONFIG_VME=y +# CONFIG_MVME147 is not set +CONFIG_MVME16x=y +# CONFIG_BVME6000 is not set +# CONFIG_HP300 is not set +# CONFIG_SUN3X is not set +# CONFIG_Q40 is not set +# CONFIG_SUN3 is not set +# CONFIG_M68020 is not set +# CONFIG_M68030 is not set +CONFIG_M68040=y +CONFIG_M68060=y +# CONFIG_M68KFPU_EMU is not set + +## +## file: drivers/char/Kconfig +## +CONFIG_GEN_RTC=m + +## +## file: drivers/firewire/Kconfig +## +# CONFIG_FIREWIRE is not set + +## +## file: drivers/ide/Kconfig +## +# CONFIG_IDE is not set + +## +## file: drivers/input/joystick/Kconfig +## +# CONFIG_INPUT_JOYSTICK is not set + +## +## file: drivers/input/keyboard/Kconfig +## +# CONFIG_KEYBOARD_ATKBD is not set +# CONFIG_KEYBOARD_SUNKBD is not set + +## +## file: drivers/input/misc/Kconfig +## +# CONFIG_INPUT_MISC is not set + +## +## file: drivers/input/mouse/Kconfig +## +CONFIG_MOUSE_PS2=m +CONFIG_MOUSE_SERIAL=m + +## +## file: drivers/input/serio/Kconfig +## +CONFIG_SERIO=m +CONFIG_SERIO_SERPORT=m +CONFIG_SERIO_LIBPS2=m + +## +## file: drivers/net/Kconfig +## +CONFIG_NET_ETHERNET=y +CONFIG_MVME16x_NET=y + +## +## file: drivers/scsi/Kconfig +## +CONFIG_MVME16x_SCSI=y + +## +## file: drivers/staging/tty/Kconfig +## +CONFIG_SERIAL167=y + +## +## file: drivers/tty/serial/Kconfig +## +# CONFIG_SERIAL_8250 is not set + +## +## file: drivers/video/Kconfig +## +CONFIG_FB=y +# CONFIG_FB_MODE_HELPERS is not set +# CONFIG_FB_TILEBLITTING is not set +# CONFIG_FB_S1D13XXX is not set +# CONFIG_FB_VIRTUAL is not set + +## +## file: drivers/video/console/Kconfig +## +CONFIG_FRAMEBUFFER_CONSOLE=y +# CONFIG_FONTS is not set +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y + +## +## file: drivers/video/logo/Kconfig +## +CONFIG_LOGO=y +CONFIG_LOGO_LINUX_MONO=y +CONFIG_LOGO_LINUX_VGA16=y +CONFIG_LOGO_LINUX_CLUT224=y + +## +## file: fs/nfs/Kconfig +## +CONFIG_NFS_FS=y +CONFIG_ROOT_NFS=y + +## +## file: fs/partitions/Kconfig +## +# CONFIG_PARTITION_ADVANCED is not set + +## +## file: net/ipv4/Kconfig +## +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +CONFIG_IP_PNP_BOOTP=y +CONFIG_IP_PNP_RARP=y + +## +## file: net/ipx/Kconfig +## +CONFIG_IPX=m +# CONFIG_IPX_INTERN is not set + +## +## file: sound/Kconfig +## +# CONFIG_SOUND is not set + --- linux-2.6-3.0.0~rc6.orig/debian/config/m68k/config.mvme147 +++ linux-2.6-3.0.0~rc6/debian/config/m68k/config.mvme147 @@ -0,0 +1,137 @@ +## +## file: arch/m68k/Kconfig +## +CONFIG_MVME147_SCC=y +CONFIG_SERIAL_CONSOLE=y + +## +## file: arch/m68k/Kconfig.mmu +## +# CONFIG_AMIGA is not set +# CONFIG_ATARI is not set +# CONFIG_MAC is not set +# CONFIG_APOLLO is not set +CONFIG_VME=y +CONFIG_MVME147=y +# CONFIG_MVME16x is not set +# CONFIG_BVME6000 is not set +# CONFIG_HP300 is not set +# CONFIG_SUN3X is not set +# CONFIG_Q40 is not set +# CONFIG_SUN3 is not set +# CONFIG_M68020 is not set +CONFIG_M68030=y +# CONFIG_M68040 is not set +# CONFIG_M68060 is not set +# CONFIG_M68KFPU_EMU is not set + +## +## file: drivers/char/Kconfig +## +CONFIG_GEN_RTC=m + +## +## file: drivers/ide/Kconfig +## +# CONFIG_IDE is not set + +## +## file: drivers/input/joystick/Kconfig +## +# CONFIG_INPUT_JOYSTICK is not set + +## +## file: drivers/input/keyboard/Kconfig +## +# CONFIG_KEYBOARD_ATKBD is not set +# CONFIG_KEYBOARD_SUNKBD is not set + +## +## file: drivers/input/misc/Kconfig +## +# CONFIG_INPUT_MISC is not set + +## +## file: drivers/input/mouse/Kconfig +## +CONFIG_MOUSE_PS2=m +CONFIG_MOUSE_SERIAL=m + +## +## file: drivers/input/serio/Kconfig +## +CONFIG_SERIO=m +CONFIG_SERIO_SERPORT=m +CONFIG_SERIO_LIBPS2=m + +## +## file: drivers/net/Kconfig +## +CONFIG_NET_ETHERNET=y +CONFIG_MVME147_NET=y + +## +## file: drivers/scsi/Kconfig +## +CONFIG_MVME147_SCSI=y + +## +## file: drivers/tty/serial/Kconfig +## +# CONFIG_SERIAL_8250 is not set + +## +## file: drivers/video/Kconfig +## +CONFIG_FB=y +# CONFIG_FB_MODE_HELPERS is not set +# CONFIG_FB_TILEBLITTING is not set +# CONFIG_FB_S1D13XXX is not set +# CONFIG_FB_VIRTUAL is not set + +## +## file: drivers/video/console/Kconfig +## +CONFIG_FRAMEBUFFER_CONSOLE=y +# CONFIG_FONTS is not set +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y + +## +## file: drivers/video/logo/Kconfig +## +CONFIG_LOGO=y +CONFIG_LOGO_LINUX_MONO=y +CONFIG_LOGO_LINUX_VGA16=y +CONFIG_LOGO_LINUX_CLUT224=y + +## +## file: fs/nfs/Kconfig +## +CONFIG_NFS_FS=y +CONFIG_ROOT_NFS=y + +## +## file: fs/partitions/Kconfig +## +# CONFIG_PARTITION_ADVANCED is not set + +## +## file: net/ipv4/Kconfig +## +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +CONFIG_IP_PNP_BOOTP=y +CONFIG_IP_PNP_RARP=y + +## +## file: net/ipx/Kconfig +## +CONFIG_IPX=m +# CONFIG_IPX_INTERN is not set + +## +## file: sound/Kconfig +## +# CONFIG_SOUND is not set + --- linux-2.6-3.0.0~rc6.orig/debian/config/m68k/config.sun3 +++ linux-2.6-3.0.0~rc6/debian/config/m68k/config.sun3 @@ -0,0 +1,56 @@ +CONFIG_SUN3=y +CONFIG_M68020=y +CONFIG_MMU_SUN3=y +CONFIG_M68KFPU_EMU=y +CONFIG_M68KFPU_EMU_EXTRAPREC=y +# CONFIG_M68KFPU_EMU_ONLY is not set +# CONFIG_IDE is not set +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +CONFIG_IP_PNP_BOOTP=y +CONFIG_IP_PNP_RARP=y +CONFIG_IPX=m +# CONFIG_IPX_INTERN is not set +CONFIG_NET_ETHERNET=y +CONFIG_SUN3LANCE=y +CONFIG_SUN3_82586=y +# CONFIG_KEYBOARD_ATKBD is not set +CONFIG_KEYBOARD_SUNKBD=y +CONFIG_MOUSE_PS2=m +CONFIG_MOUSE_SERIAL=m +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_MISC is not set +CONFIG_SERIO=y +CONFIG_SERIO_SERPORT=m +CONFIG_SERIO_LIBPS2=m +# CONFIG_SERIAL_8250 is not set +CONFIG_GEN_RTC=y +CONFIG_FB=y +# CONFIG_FB_CFB_IMAGEBLIT is not set +# CONFIG_FB_MACMODES is not set +# CONFIG_FB_MODE_HELPERS is not set +# CONFIG_FB_TILEBLITTING is not set +# CONFIG_FB_S1D13XXX is not set +# CONFIG_FB_VIRTUAL is not set +CONFIG_FRAMEBUFFER_CONSOLE=y +# CONFIG_FONTS is not set +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y +CONFIG_LOGO=y +CONFIG_LOGO_LINUX_MONO=y +CONFIG_LOGO_LINUX_VGA16=y +CONFIG_LOGO_LINUX_CLUT224=y +# CONFIG_SOUND is not set +CONFIG_UFS_FS_WRITE=y +CONFIG_NFS_FS=y +CONFIG_ROOT_NFS=y +CONFIG_LOCKD=y +CONFIG_SUNRPC=y +CONFIG_SUNRPC_GSS=y +CONFIG_RPCSEC_GSS_KRB5=y +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_SUN_PARTITION=y +CONFIG_CRC32=y +# 2.6.16-14 +# enable SCSI +CONFIG_SUN3_SCSI=y --- linux-2.6-3.0.0~rc6.orig/debian/config/ia64/config.mckinley +++ linux-2.6-3.0.0~rc6/debian/config/ia64/config.mckinley @@ -0,0 +1,11 @@ +## +## file: arch/ia64/Kconfig +## +## choice: Processor type +# CONFIG_ITANIUM is not set +CONFIG_MCKINLEY=y +## end choice +CONFIG_SMP=y +CONFIG_NR_CPUS=64 +# CONFIG_SCHED_SMT is not set + --- linux-2.6-3.0.0~rc6.orig/debian/config/ia64/defines +++ linux-2.6-3.0.0~rc6/debian/config/ia64/defines @@ -0,0 +1,15 @@ +[base] +flavours: + itanium + mckinley +kernel-arch: ia64 + +[image] +bootloaders: elilo +suggests: fdutils + +[itanium_description] +hardware: Itanium + +[mckinley_description] +hardware: Itanium II --- linux-2.6-3.0.0~rc6.orig/debian/config/ia64/config +++ linux-2.6-3.0.0~rc6/debian/config/ia64/config @@ -0,0 +1,821 @@ +## +## file: arch/Kconfig +## +CONFIG_OPROFILE=m +CONFIG_KPROBES=y + +## +## file: arch/ia64/Kconfig +## +CONFIG_HOTPLUG_CPU=y +CONFIG_SCHED_SMT=y +CONFIG_PERMIT_BSP_REMOVE=y +CONFIG_NODES_SHIFT=8 +CONFIG_IA64_MCA_RECOVERY=m +CONFIG_PERFMON=y +CONFIG_IA64_PALINFO=m +CONFIG_KEXEC=y +CONFIG_CRASH_DUMP=y +CONFIG_MSPEC=m + +## +## file: arch/ia64/Kconfig.debug +## +## choice: Physical memory granularity +CONFIG_IA64_GRANULE_16MB=y +# CONFIG_IA64_GRANULE_64MB is not set +## end choice +CONFIG_IA64_PRINT_HAZARDS=y +# CONFIG_DISABLE_VHPT is not set +# CONFIG_IA64_DEBUG_CMPXCHG is not set +# CONFIG_IA64_DEBUG_IRQ is not set + +## +## file: arch/ia64/hp/sim/Kconfig +## +# CONFIG_HP_SIMETH is not set +# CONFIG_HP_SIMSERIAL is not set +# CONFIG_HP_SIMSCSI is not set + +## +## file: arch/ia64/kernel/cpufreq/Kconfig +## +CONFIG_IA64_ACPI_CPUFREQ=m + +## +## file: drivers/acpi/Kconfig +## +CONFIG_ACPI_DOCK=y +CONFIG_ACPI_PCI_SLOT=m +CONFIG_ACPI_CONTAINER=y + +## +## file: drivers/ata/Kconfig +## +CONFIG_PATA_ALI=m +CONFIG_PATA_AMD=m +CONFIG_PATA_CMD64X=m +CONFIG_PATA_CS5520=m +CONFIG_PATA_CS5530=m +CONFIG_PATA_EFAR=m +CONFIG_PATA_NETCELL=m +CONFIG_PATA_NS87415=m +CONFIG_PATA_OLDPIIX=m +CONFIG_PATA_PDC2027X=m +CONFIG_PATA_PDC_OLD=m +CONFIG_PATA_SC1200=m +CONFIG_PATA_SERVERWORKS=m +CONFIG_PATA_SIL680=m +CONFIG_PATA_TRIFLEX=m +CONFIG_PATA_VIA=m +CONFIG_PATA_MPIIX=m +CONFIG_PATA_NS87410=m + +## +## file: drivers/block/Kconfig +## +CONFIG_BLK_CPQ_DA=m +CONFIG_BLK_CPQ_CISS_DA=m +CONFIG_CISS_SCSI_TAPE=y +CONFIG_BLK_DEV_DAC960=m +CONFIG_BLK_DEV_UMEM=m +CONFIG_BLK_DEV_SX8=m +CONFIG_CDROM_PKTCDVD=m +CONFIG_CDROM_PKTCDVD_BUFFERS=8 +# CONFIG_CDROM_PKTCDVD_WCACHE is not set + +## +## file: drivers/char/Kconfig +## +CONFIG_STALDRV=y +CONFIG_SGI_SNSC=y +CONFIG_SGI_TIOCX=y +CONFIG_SGI_MBCS=m +CONFIG_PRINTER=m +# CONFIG_LP_CONSOLE is not set +CONFIG_PPDEV=m +CONFIG_DTLK=m +CONFIG_APPLICOM=m +CONFIG_RAW_DRIVER=m +CONFIG_MAX_RAW_DEVS=256 +CONFIG_HPET=y +# CONFIG_HPET_MMAP is not set +CONFIG_MMTIMER=m + +## +## file: drivers/char/agp/Kconfig +## +#. Workaround +CONFIG_AGP=y +#. Workaround +CONFIG_AGP_I460=y +#. Workaround +CONFIG_AGP_HP_ZX1=y +#. Workaround +CONFIG_AGP_SGI_TIOCA=y + +## +## file: drivers/char/ipmi/Kconfig +## +CONFIG_IPMI_HANDLER=m +# CONFIG_IPMI_PANIC_EVENT is not set +CONFIG_IPMI_DEVICE_INTERFACE=m +CONFIG_IPMI_SI=m +CONFIG_IPMI_WATCHDOG=m +CONFIG_IPMI_POWEROFF=m + +## +## file: drivers/firmware/Kconfig +## +CONFIG_EFI_VARS=m +CONFIG_DMIID=y + +## +## file: drivers/gpu/drm/Kconfig +## +CONFIG_DRM=m +CONFIG_DRM_TDFX=m +CONFIG_DRM_R128=m +CONFIG_DRM_RADEON=m +CONFIG_DRM_MGA=m +CONFIG_DRM_SIS=m + +## +## file: drivers/gpu/drm/nouveau/Kconfig +## +CONFIG_DRM_NOUVEAU=m +# CONFIG_DRM_NOUVEAU_BACKLIGHT is not set +# CONFIG_DRM_NOUVEAU_DEBUG is not set +CONFIG_DRM_I2C_CH7006=m +CONFIG_DRM_I2C_SIL164=m + +## +## file: drivers/hid/usbhid/Kconfig +## +CONFIG_USB_HID=m +# CONFIG_HID_PID is not set +CONFIG_USB_KBD=m +CONFIG_USB_MOUSE=m + +## +## file: drivers/hwmon/Kconfig +## +CONFIG_SENSORS_ADM1021=m +CONFIG_SENSORS_ADM1025=m +CONFIG_SENSORS_ADM1026=m +CONFIG_SENSORS_ADM1031=m +CONFIG_SENSORS_ASB100=m +CONFIG_SENSORS_DS1621=m +CONFIG_SENSORS_F71805F=m +CONFIG_SENSORS_GL518SM=m +CONFIG_SENSORS_GL520SM=m +CONFIG_SENSORS_IT87=m +CONFIG_SENSORS_LM63=m +CONFIG_SENSORS_LM75=m +CONFIG_SENSORS_LM77=m +CONFIG_SENSORS_LM78=m +CONFIG_SENSORS_LM80=m +CONFIG_SENSORS_LM83=m +CONFIG_SENSORS_LM85=m +CONFIG_SENSORS_LM87=m +CONFIG_SENSORS_LM90=m +CONFIG_SENSORS_LM92=m +CONFIG_SENSORS_MAX1619=m +CONFIG_SENSORS_PC87360=m +CONFIG_SENSORS_PCF8591=m +CONFIG_SENSORS_SIS5595=m +CONFIG_SENSORS_SMSC47M1=m +CONFIG_SENSORS_SMSC47B397=m +CONFIG_SENSORS_VIA686A=m +CONFIG_SENSORS_W83781D=m +CONFIG_SENSORS_W83L785TS=m +CONFIG_SENSORS_W83627HF=m + +## +## file: drivers/i2c/Kconfig +## +CONFIG_I2C=m +CONFIG_I2C_CHARDEV=m +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set + +## +## file: drivers/i2c/busses/Kconfig +## +CONFIG_I2C_ALI1535=m +CONFIG_I2C_ALI1563=m +CONFIG_I2C_ALI15X3=m +CONFIG_I2C_AMD756=m +CONFIG_I2C_AMD756_S4882=m +CONFIG_I2C_AMD8111=m +CONFIG_I2C_I801=m +CONFIG_I2C_PIIX4=m +CONFIG_I2C_NFORCE2=m +CONFIG_I2C_SIS5595=m +CONFIG_I2C_SIS630=m +CONFIG_I2C_SIS96X=m +CONFIG_I2C_VIA=m +CONFIG_I2C_VIAPRO=m +CONFIG_I2C_PARPORT=m +CONFIG_I2C_PARPORT_LIGHT=m +CONFIG_I2C_PCA_ISA=m +CONFIG_I2C_STUB=m +CONFIG_SCx200_ACB=m + +## +## file: drivers/ide/Kconfig +## +CONFIG_IDE=m +CONFIG_IDE_GD=m +# CONFIG_BLK_DEV_IDECS is not set +CONFIG_BLK_DEV_IDECD=m +CONFIG_BLK_DEV_IDETAPE=m +CONFIG_IDE_GENERIC=m +# CONFIG_BLK_DEV_IDEPNP is not set +# CONFIG_BLK_DEV_GENERIC is not set +CONFIG_BLK_DEV_OPTI621=m +# CONFIG_BLK_DEV_AEC62XX is not set +# CONFIG_BLK_DEV_ALI15X3 is not set +# CONFIG_BLK_DEV_AMD74XX is not set +# CONFIG_BLK_DEV_CMD64X is not set +# CONFIG_BLK_DEV_TRIFLEX is not set +CONFIG_BLK_DEV_CY82C693=m +# CONFIG_BLK_DEV_CS5520 is not set +# CONFIG_BLK_DEV_CS5530 is not set +CONFIG_BLK_DEV_HPT366=m +# CONFIG_BLK_DEV_SC1200 is not set +# CONFIG_BLK_DEV_PIIX is not set +# CONFIG_BLK_DEV_NS87415 is not set +# CONFIG_BLK_DEV_PDC202XX_OLD is not set +# CONFIG_BLK_DEV_PDC202XX_NEW is not set +# CONFIG_BLK_DEV_SVWKS is not set +CONFIG_BLK_DEV_SGIIOC4=m +# CONFIG_BLK_DEV_SIIMAGE is not set +# CONFIG_BLK_DEV_SLC90E66 is not set +CONFIG_BLK_DEV_TRM290=m +# CONFIG_BLK_DEV_VIA82CXXX is not set + +## +## file: drivers/input/gameport/Kconfig +## +CONFIG_GAMEPORT=m +CONFIG_GAMEPORT_NS558=m +CONFIG_GAMEPORT_L4=m +CONFIG_GAMEPORT_EMU10K1=m +CONFIG_GAMEPORT_FM801=m + +## +## file: drivers/input/joystick/Kconfig +## +CONFIG_INPUT_JOYSTICK=y + +## +## file: drivers/input/keyboard/Kconfig +## +CONFIG_INPUT_KEYBOARD=y +CONFIG_KEYBOARD_ATKBD=y +CONFIG_KEYBOARD_LKKBD=m +CONFIG_KEYBOARD_NEWTON=m +CONFIG_KEYBOARD_SUNKBD=m +CONFIG_KEYBOARD_XTKBD=m + +## +## file: drivers/input/misc/Kconfig +## +CONFIG_INPUT_MISC=y +CONFIG_INPUT_UINPUT=m + +## +## file: drivers/input/mouse/Kconfig +## +CONFIG_INPUT_MOUSE=y +CONFIG_MOUSE_PS2=m +CONFIG_MOUSE_SERIAL=m +CONFIG_MOUSE_VSXXXAA=m + +## +## file: drivers/input/serio/Kconfig +## +CONFIG_SERIO=y +CONFIG_SERIO_I8042=y +CONFIG_SERIO_SERPORT=m +CONFIG_SERIO_PARKBD=m +CONFIG_SERIO_PCIPS2=m +CONFIG_SERIO_LIBPS2=y +CONFIG_SERIO_RAW=m + +## +## file: drivers/input/touchscreen/Kconfig +## +# CONFIG_INPUT_TOUCHSCREEN is not set + +## +## file: drivers/isdn/Kconfig +## +CONFIG_ISDN=y +CONFIG_ISDN_CAPI=m + +## +## file: drivers/isdn/capi/Kconfig +## +CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON=y +# CONFIG_ISDN_CAPI_MIDDLEWARE is not set +CONFIG_ISDN_CAPI_CAPI20=m + +## +## file: drivers/isdn/hardware/avm/Kconfig +## +CONFIG_CAPI_AVM=y +CONFIG_ISDN_DRV_AVMB1_B1PCI=m +CONFIG_ISDN_DRV_AVMB1_B1PCIV4=y +CONFIG_ISDN_DRV_AVMB1_B1PCMCIA=m +CONFIG_ISDN_DRV_AVMB1_AVM_CS=m +CONFIG_ISDN_DRV_AVMB1_T1PCI=m +CONFIG_ISDN_DRV_AVMB1_C4=m + +## +## file: drivers/isdn/hardware/eicon/Kconfig +## +CONFIG_CAPI_EICON=y +CONFIG_ISDN_DIVAS=m +CONFIG_ISDN_DIVAS_BRIPCI=y +CONFIG_ISDN_DIVAS_PRIPCI=y +CONFIG_ISDN_DIVAS_DIVACAPI=m +CONFIG_ISDN_DIVAS_USERIDI=m +CONFIG_ISDN_DIVAS_MAINT=m + +## +## file: drivers/media/Kconfig +## +CONFIG_DVB_CORE=m + +## +## file: drivers/media/radio/Kconfig +## +CONFIG_RADIO_MAXIRADIO=m +CONFIG_USB_DSBR=m + +## +## file: drivers/message/i2o/Kconfig +## +CONFIG_I2O=m +CONFIG_I2O_CONFIG=m +CONFIG_I2O_BLOCK=m +CONFIG_I2O_SCSI=m +CONFIG_I2O_PROC=m + +## +## file: drivers/mmc/Kconfig +## +CONFIG_MMC=m +# CONFIG_MMC_DEBUG is not set + +## +## file: drivers/mmc/card/Kconfig +## +CONFIG_MMC_BLOCK=m + +## +## file: drivers/net/Kconfig +## +CONFIG_NET_SB1000=m +CONFIG_NET_VENDOR_3COM=y +CONFIG_VORTEX=m +CONFIG_TYPHOON=m +# CONFIG_HP100 is not set +CONFIG_NET_PCI=y +CONFIG_AMD8111_ETH=m +CONFIG_ADAPTEC_STARFIRE=m +CONFIG_B44=m +CONFIG_FORCEDETH=m +CONFIG_E100=m +CONFIG_FEALNX=m +CONFIG_NATSEMI=m +CONFIG_NE2K_PCI=m +CONFIG_8139CP=m +CONFIG_8139TOO=m +# CONFIG_8139TOO_PIO is not set +# CONFIG_8139TOO_TUNE_TWISTER is not set +# CONFIG_8139TOO_8129 is not set +# CONFIG_8139_OLD_RX_RESET is not set +CONFIG_SIS900=m +CONFIG_EPIC100=m +CONFIG_SUNDANCE=m +# CONFIG_SUNDANCE_MMIO is not set +CONFIG_VIA_RHINE=m +# CONFIG_VIA_RHINE_MMIO is not set +CONFIG_FDDI=y +CONFIG_SKFP=m +# CONFIG_HIPPI is not set +CONFIG_PLIP=m +CONFIG_NET_FC=y + +## +## file: drivers/net/arcnet/Kconfig +## +CONFIG_ARCNET=m +CONFIG_ARCNET_1201=m +CONFIG_ARCNET_1051=m +CONFIG_ARCNET_RAW=m +CONFIG_ARCNET_CAP=m +CONFIG_ARCNET_COM90xx=m +CONFIG_ARCNET_COM90xxIO=m +CONFIG_ARCNET_RIM_I=m +CONFIG_ARCNET_COM20020=m +CONFIG_ARCNET_COM20020_PCI=m + +## +## file: drivers/net/irda/Kconfig +## +CONFIG_IRTTY_SIR=m +CONFIG_USB_IRDA=m +CONFIG_SIGMATEL_FIR=m +CONFIG_VLSI_FIR=m + +## +## file: drivers/net/pcmcia/Kconfig +## +CONFIG_NET_PCMCIA=y +CONFIG_PCMCIA_3C589=m +CONFIG_PCMCIA_3C574=m +CONFIG_PCMCIA_FMVJ18X=m +CONFIG_PCMCIA_PCNET=m +CONFIG_PCMCIA_NMCLAN=m +CONFIG_PCMCIA_SMC91C92=m +CONFIG_PCMCIA_XIRC2PS=m +CONFIG_PCMCIA_AXNET=m +CONFIG_ARCNET_COM20020_CS=m + +## +## file: drivers/net/tulip/Kconfig +## +CONFIG_NET_TULIP=y +CONFIG_DE2104X=m +CONFIG_TULIP=m +# CONFIG_TULIP_MWI is not set +# CONFIG_TULIP_MMIO is not set +CONFIG_DE4X5=y +CONFIG_WINBOND_840=m +CONFIG_DM9102=m +CONFIG_PCMCIA_XIRCOM=m + +## +## file: drivers/net/wan/Kconfig +## +CONFIG_WAN=y +CONFIG_LANMEDIA=m +CONFIG_PCI200SYN=m +CONFIG_WANXL=m +CONFIG_PC300=m +CONFIG_PC300_MLPPP=y +CONFIG_FARSYNC=m +CONFIG_DSCC4=m +# CONFIG_DSCC4_PCISYNC is not set +# CONFIG_DSCC4_PCI_RST is not set +CONFIG_DLCI=m +CONFIG_DLCI_MAX=8 +# CONFIG_CYCLADES_SYNC is not set + +## +## file: drivers/net/wireless/Kconfig +## +CONFIG_PCMCIA_RAYCS=m +CONFIG_ATMEL=m +CONFIG_PCI_ATMEL=m +CONFIG_PCMCIA_ATMEL=m +CONFIG_AIRO_CS=m +CONFIG_PCMCIA_WL3501=m +CONFIG_USB_ZD1201=m + +## +## file: drivers/net/wireless/ipw2x00/Kconfig +## +CONFIG_IPW2100=m +CONFIG_IPW2100_MONITOR=y + +## +## file: drivers/net/wireless/mwifiex/Kconfig +## +CONFIG_MWIFIEX=m +CONFIG_MWIFIEX_SDIO=m + +## +## file: drivers/net/wireless/orinoco/Kconfig +## +CONFIG_HERMES=m +CONFIG_PLX_HERMES=m +CONFIG_TMD_HERMES=m +CONFIG_PCI_HERMES=m +CONFIG_PCMCIA_HERMES=m +CONFIG_PCMCIA_SPECTRUM=m + +## +## file: drivers/pci/hotplug/Kconfig +## +CONFIG_HOTPLUG_PCI=m + +## +## file: drivers/pcmcia/Kconfig +## +CONFIG_PCCARD=m +CONFIG_PCMCIA=m +CONFIG_CARDBUS=y +CONFIG_YENTA=m +CONFIG_PD6729=m +CONFIG_I82092=m + +## +## file: drivers/rtc/Kconfig +## +CONFIG_RTC_DRV_EFI=y + +## +## file: drivers/scsi/Kconfig +## +CONFIG_SCSI_ARCMSR=m +CONFIG_SCSI_DMX3191D=m +CONFIG_SCSI_IPS=m +CONFIG_SCSI_INITIO=m +CONFIG_SCSI_INIA100=m +CONFIG_SCSI_SYM53C8XX_2=m +CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1 +CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16 +CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 +CONFIG_SCSI_IPR=m +CONFIG_SCSI_IPR_TRACE=y +CONFIG_SCSI_IPR_DUMP=y +CONFIG_SCSI_QLOGIC_1280=m +CONFIG_SCSI_DC395x=m +CONFIG_SCSI_DC390T=m + +## +## file: drivers/scsi/megaraid/Kconfig.megaraid +## +CONFIG_MEGARAID_NEWGEN=y +CONFIG_MEGARAID_MM=m +CONFIG_MEGARAID_MAILBOX=m +CONFIG_MEGARAID_LEGACY=m + +## +## file: drivers/scsi/pcmcia/Kconfig +## +CONFIG_PCMCIA_FDOMAIN=m +CONFIG_PCMCIA_QLOGIC=m +CONFIG_PCMCIA_SYM53C500=m + +## +## file: drivers/sn/Kconfig +## +CONFIG_SGI_IOC3=m + +## +## file: drivers/staging/generic_serial/Kconfig +## +CONFIG_SX=m +CONFIG_RIO=m +CONFIG_RIO_OLDPCI=y + +## +## file: drivers/staging/tty/Kconfig +## +CONFIG_DIGIEPCA=m +CONFIG_SPECIALIX=m + +## +## file: drivers/staging/wlan-ng/Kconfig +## +# CONFIG_PRISM2_USB is not set + +## +## file: drivers/telephony/Kconfig +## +CONFIG_PHONE=m +CONFIG_PHONE_IXJ=m +CONFIG_PHONE_IXJ_PCMCIA=m + +## +## file: drivers/tty/Kconfig +## +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +CONFIG_SERIAL_NONSTANDARD=y +CONFIG_ROCKETPORT=m +# CONFIG_CYCLADES is not set +CONFIG_MOXA_INTELLIO=m +# CONFIG_MOXA_SMARTIO is not set +CONFIG_SYNCLINKMP=m +# CONFIG_ISI is not set +CONFIG_N_HDLC=m + +## +## file: drivers/tty/serial/Kconfig +## +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_SERIAL_8250_CS=m +CONFIG_SERIAL_8250_NR_UARTS=32 +CONFIG_SERIAL_8250_RUNTIME_UARTS=4 +CONFIG_SERIAL_8250_EXTENDED=y +CONFIG_SERIAL_8250_SHARE_IRQ=y +# CONFIG_SERIAL_8250_DETECT_IRQ is not set +CONFIG_SERIAL_8250_RSA=y +CONFIG_SERIAL_SGI_L1_CONSOLE=y +CONFIG_SERIAL_JSM=m +CONFIG_SERIAL_SGI_IOC4=m +CONFIG_SERIAL_SGI_IOC3=m + +## +## file: drivers/usb/Kconfig +## +CONFIG_USB=m +CONFIG_USB_USS720=m + +## +## file: drivers/usb/host/Kconfig +## +CONFIG_USB_EHCI_HCD=m +CONFIG_USB_EHCI_ROOT_HUB_TT=y +CONFIG_USB_OHCI_HCD=m +CONFIG_USB_UHCI_HCD=m +CONFIG_USB_SL811_HCD=m +CONFIG_USB_SL811_CS=m + +## +## file: drivers/video/Kconfig +## +CONFIG_FB=y +CONFIG_FB_MODE_HELPERS=y +CONFIG_FB_TILEBLITTING=y +CONFIG_FB_CIRRUS=m +CONFIG_FB_PM2=m +# CONFIG_FB_PM2_FIFO_DISCONNECT is not set +CONFIG_FB_CYBER2000=m +CONFIG_FB_ASILIANT=y +# CONFIG_FB_IMSTT is not set +CONFIG_FB_S1D13XXX=m +CONFIG_FB_NVIDIA=m +CONFIG_FB_NVIDIA_I2C=y +# CONFIG_FB_RIVA is not set +# CONFIG_FB_RIVA_I2C is not set +# CONFIG_FB_RIVA_DEBUG is not set +CONFIG_FB_MATROX=m +CONFIG_FB_MATROX_MILLENIUM=y +CONFIG_FB_MATROX_MYSTIQUE=y +CONFIG_FB_MATROX_G=y +CONFIG_FB_MATROX_I2C=m +CONFIG_FB_MATROX_MAVEN=m +CONFIG_FB_RADEON=m +CONFIG_FB_RADEON_I2C=y +# CONFIG_FB_RADEON_DEBUG is not set +CONFIG_FB_ATY128=m +CONFIG_FB_ATY=m +CONFIG_FB_ATY_CT=y +CONFIG_FB_ATY_GENERIC_LCD=y +CONFIG_FB_ATY_GX=y +CONFIG_FB_SAVAGE=m +CONFIG_FB_SAVAGE_I2C=y +# CONFIG_FB_SAVAGE_ACCEL is not set +CONFIG_FB_SIS=m +CONFIG_FB_SIS_300=y +CONFIG_FB_SIS_315=y +CONFIG_FB_NEOMAGIC=m +CONFIG_FB_KYRO=m +CONFIG_FB_VOODOO1=m +CONFIG_FB_TRIDENT=m +# CONFIG_FB_VIRTUAL is not set + +## +## file: drivers/video/console/Kconfig +## +CONFIG_VGA_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE=y +# CONFIG_FONTS is not set +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y + +## +## file: drivers/video/logo/Kconfig +## +CONFIG_LOGO=y +CONFIG_LOGO_LINUX_MONO=y +CONFIG_LOGO_LINUX_VGA16=y +CONFIG_LOGO_LINUX_CLUT224=y + +## +## file: fs/partitions/Kconfig +## +CONFIG_ACORN_PARTITION=y +# CONFIG_ACORN_PARTITION_CUMANA is not set +CONFIG_ACORN_PARTITION_EESOX=y +CONFIG_ACORN_PARTITION_ICS=y +CONFIG_ACORN_PARTITION_ADFS=y +CONFIG_ACORN_PARTITION_POWERTEC=y +CONFIG_ACORN_PARTITION_RISCIX=y +CONFIG_OSF_PARTITION=y +CONFIG_AMIGA_PARTITION=y +CONFIG_ATARI_PARTITION=y +CONFIG_MAC_PARTITION=y +CONFIG_BSD_DISKLABEL=y +CONFIG_MINIX_SUBPARTITION=y +CONFIG_SOLARIS_X86_PARTITION=y +CONFIG_UNIXWARE_DISKLABEL=y +CONFIG_LDM_PARTITION=y +CONFIG_LDM_DEBUG=y +CONFIG_SGI_PARTITION=y +CONFIG_ULTRIX_PARTITION=y +CONFIG_SUN_PARTITION=y +CONFIG_EFI_PARTITION=y + +## +## file: net/ax25/Kconfig +## +CONFIG_HAMRADIO=y + +## +## file: net/irda/Kconfig +## +CONFIG_IRDA=m +CONFIG_IRDA_ULTRA=y +CONFIG_IRDA_CACHE_LAST_LSAP=y +CONFIG_IRDA_FAST_RR=y + +## +## file: net/irda/ircomm/Kconfig +## +CONFIG_IRCOMM=m + +## +## file: net/irda/irlan/Kconfig +## +CONFIG_IRLAN=m + +## +## file: net/irda/irnet/Kconfig +## +CONFIG_IRNET=m + +## +## file: security/Kconfig +## +CONFIG_LSM_MMAP_MIN_ADDR=65536 + +## +## file: sound/drivers/Kconfig +## +CONFIG_SND_DUMMY=m +CONFIG_SND_VIRMIDI=m +CONFIG_SND_MTPAV=m +CONFIG_SND_SERIAL_U16550=m +CONFIG_SND_MPU401=m + +## +## file: sound/pci/Kconfig +## +CONFIG_SND_ALS4000=m +CONFIG_SND_ALI5451=m +CONFIG_SND_ATIIXP=m +CONFIG_SND_ATIIXP_MODEM=m +CONFIG_SND_AU8810=m +CONFIG_SND_AU8820=m +CONFIG_SND_AU8830=m +CONFIG_SND_AZT3328=m +CONFIG_SND_BT87X=m +# CONFIG_SND_BT87X_OVERCLOCK is not set +CONFIG_SND_CA0106=m +CONFIG_SND_CMIPCI=m +CONFIG_SND_CS4281=m +CONFIG_SND_CS46XX=m +CONFIG_SND_CS46XX_NEW_DSP=y +CONFIG_SND_EMU10K1=m +CONFIG_SND_EMU10K1X=m +CONFIG_SND_ENS1370=m +CONFIG_SND_ENS1371=m +CONFIG_SND_ES1938=m +CONFIG_SND_ES1968=m +CONFIG_SND_FM801=m +CONFIG_SND_FM801_TEA575X_BOOL=y +CONFIG_SND_HDSP=m +CONFIG_SND_ICE1712=m +CONFIG_SND_ICE1724=m +CONFIG_SND_INTEL8X0=m +CONFIG_SND_INTEL8X0M=m +CONFIG_SND_KORG1212=m +CONFIG_SND_MAESTRO3=m +CONFIG_SND_MIXART=m +CONFIG_SND_NM256=m +CONFIG_SND_RME32=m +CONFIG_SND_RME96=m +CONFIG_SND_RME9652=m +CONFIG_SND_SONICVIBES=m +CONFIG_SND_TRIDENT=m +CONFIG_SND_VIA82XX=m +CONFIG_SND_VIA82XX_MODEM=m +CONFIG_SND_VX222=m +CONFIG_SND_YMFPCI=m + +## +## file: sound/pci/hda/Kconfig +## +CONFIG_SND_HDA_INTEL=m + --- linux-2.6-3.0.0~rc6.orig/debian/config/ia64/config.itanium +++ linux-2.6-3.0.0~rc6/debian/config/ia64/config.itanium @@ -0,0 +1,11 @@ +## +## file: arch/ia64/Kconfig +## +## choice: Processor type +CONFIG_ITANIUM=y +# CONFIG_MCKINLEY is not set +## end choice +CONFIG_SMP=y +CONFIG_NR_CPUS=64 +# CONFIG_SCHED_SMT is not set + --- linux-2.6-3.0.0~rc6.orig/debian/config/mips/config.r4k-ip22 +++ linux-2.6-3.0.0~rc6/debian/config/mips/config.r4k-ip22 @@ -0,0 +1,555 @@ +## +## file: arch/Kconfig +## +# CONFIG_OPROFILE is not set + +## +## file: arch/mips/Kconfig +## +## choice: System type +# CONFIG_MIPS_COBALT is not set +# CONFIG_MACH_DECSTATION is not set +# CONFIG_MACH_JAZZ is not set +# CONFIG_LASAT is not set +# CONFIG_MIPS_MALTA is not set +# CONFIG_MIPS_SIM is not set +# CONFIG_MACH_VR41XX is not set +# CONFIG_PNX8550_JBS is not set +# CONFIG_PMC_YOSEMITE is not set +CONFIG_SGI_IP22=y +# CONFIG_SGI_IP27 is not set +# CONFIG_SGI_IP32 is not set +# CONFIG_SIBYTE_CRHINE is not set +# CONFIG_SIBYTE_CARMEL is not set +# CONFIG_SIBYTE_CRHONE is not set +# CONFIG_SIBYTE_RHONE is not set +# CONFIG_SIBYTE_SWARM is not set +# CONFIG_SIBYTE_LITTLESUR is not set +# CONFIG_SIBYTE_SENTOSA is not set +# CONFIG_SIBYTE_BIGSUR is not set +## end choice +CONFIG_ARC_CONSOLE=y +## choice: CPU type +# CONFIG_CPU_MIPS32_R1 is not set +# CONFIG_CPU_MIPS32_R2 is not set +# CONFIG_CPU_MIPS64_R1 is not set +# CONFIG_CPU_MIPS64_R2 is not set +# CONFIG_CPU_R3000 is not set +# CONFIG_CPU_TX39XX is not set +# CONFIG_CPU_VR41XX is not set +# CONFIG_CPU_R4300 is not set +CONFIG_CPU_R4X00=y +# CONFIG_CPU_TX49XX is not set +# CONFIG_CPU_R5000 is not set +# CONFIG_CPU_R5432 is not set +# CONFIG_CPU_R6000 is not set +# CONFIG_CPU_NEVADA is not set +# CONFIG_CPU_R8000 is not set +# CONFIG_CPU_R10000 is not set +# CONFIG_CPU_RM7000 is not set +# CONFIG_CPU_RM9000 is not set +# CONFIG_CPU_SB1 is not set +## end choice +## choice: Kernel code model +# CONFIG_32BIT is not set +CONFIG_64BIT=y +## end choice +## choice: Kernel page size +CONFIG_PAGE_SIZE_4KB=y +# CONFIG_PAGE_SIZE_8KB is not set +# CONFIG_PAGE_SIZE_16KB is not set +# CONFIG_PAGE_SIZE_64KB is not set +## end choice +CONFIG_EISA=y +CONFIG_MIPS32_COMPAT=y +CONFIG_MIPS32_O32=y +CONFIG_MIPS32_N32=y + +## +## file: arch/mips/alchemy/Kconfig +## +## choice: Machine type +# CONFIG_MIPS_MTX1 is not set +# CONFIG_MIPS_BOSPORUS is not set +# CONFIG_MIPS_DB1000 is not set +# CONFIG_MIPS_DB1100 is not set +# CONFIG_MIPS_DB1200 is not set +# CONFIG_MIPS_DB1500 is not set +# CONFIG_MIPS_DB1550 is not set +# CONFIG_MIPS_MIRAGE is not set +# CONFIG_MIPS_PB1000 is not set +# CONFIG_MIPS_PB1100 is not set +# CONFIG_MIPS_PB1200 is not set +# CONFIG_MIPS_PB1500 is not set +# CONFIG_MIPS_PB1550 is not set +# CONFIG_MIPS_XXS1500 is not set +## end choice + +## +## file: arch/mips/Kconfig.debug +## +CONFIG_CMDLINE="" + +## +## file: arch/mips/txx9/Kconfig +## +# CONFIG_TOSHIBA_JMR3927 is not set +# CONFIG_TOSHIBA_RBTX4927 is not set +# CONFIG_TOSHIBA_RBTX4938 is not set + +## +## file: drivers/ata/Kconfig +## +# CONFIG_ATA is not set + +## +## file: drivers/block/Kconfig +## +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_COUNT=16 +CONFIG_BLK_DEV_RAM_SIZE=8192 +# CONFIG_CDROM_PKTCDVD is not set + +## +## file: drivers/char/Kconfig +## +CONFIG_PRINTER=m +# CONFIG_LP_CONSOLE is not set +# CONFIG_PPDEV is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_TELCLOCK is not set + +## +## file: drivers/char/ipmi/Kconfig +## +# CONFIG_IPMI_HANDLER is not set + +## +## file: drivers/char/tpm/Kconfig +## +# CONFIG_TCG_TPM is not set + +## +## file: drivers/eisa/Kconfig +## +CONFIG_EISA_NAMES=y + +## +## file: drivers/hwmon/Kconfig +## +CONFIG_HWMON=y +# CONFIG_HWMON_DEBUG_CHIP is not set +# CONFIG_SENSORS_ADM1021 is not set +# CONFIG_SENSORS_ADM1025 is not set +# CONFIG_SENSORS_ADM1026 is not set +# CONFIG_SENSORS_ADM1031 is not set +# CONFIG_SENSORS_ADM9240 is not set +# CONFIG_SENSORS_ASB100 is not set +# CONFIG_SENSORS_ATXP1 is not set +# CONFIG_SENSORS_DS1621 is not set +# CONFIG_SENSORS_F71805F is not set +# CONFIG_SENSORS_GL518SM is not set +# CONFIG_SENSORS_GL520SM is not set +# CONFIG_SENSORS_IT87 is not set +# CONFIG_SENSORS_LM63 is not set +# CONFIG_SENSORS_LM75 is not set +# CONFIG_SENSORS_LM77 is not set +# CONFIG_SENSORS_LM78 is not set +# CONFIG_SENSORS_LM80 is not set +# CONFIG_SENSORS_LM83 is not set +# CONFIG_SENSORS_LM85 is not set +# CONFIG_SENSORS_LM87 is not set +# CONFIG_SENSORS_LM90 is not set +# CONFIG_SENSORS_LM92 is not set +# CONFIG_SENSORS_MAX1619 is not set +# CONFIG_SENSORS_PC87360 is not set +# CONFIG_SENSORS_PCF8591 is not set +# CONFIG_SENSORS_SMSC47M1 is not set +# CONFIG_SENSORS_SMSC47B397 is not set +# CONFIG_SENSORS_W83781D is not set +# CONFIG_SENSORS_W83792D is not set +# CONFIG_SENSORS_W83L785TS is not set +# CONFIG_SENSORS_W83627HF is not set +# CONFIG_SENSORS_W83627EHF is not set + +## +## file: drivers/i2c/Kconfig +## +CONFIG_I2C=m +CONFIG_I2C_CHARDEV=m +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set + +## +## file: drivers/i2c/busses/Kconfig +## +# CONFIG_I2C_PARPORT is not set +# CONFIG_I2C_PARPORT_LIGHT is not set +# CONFIG_I2C_ELEKTOR is not set +# CONFIG_I2C_PCA_ISA is not set +# CONFIG_I2C_STUB is not set + +## +## file: drivers/ide/Kconfig +## +# CONFIG_IDE is not set + +## +## file: drivers/input/Kconfig +## +# CONFIG_INPUT_JOYDEV is not set + +## +## file: drivers/input/gameport/Kconfig +## +# CONFIG_GAMEPORT is not set + +## +## file: drivers/input/joystick/Kconfig +## +# CONFIG_INPUT_JOYSTICK is not set + +## +## file: drivers/input/keyboard/Kconfig +## +CONFIG_INPUT_KEYBOARD=y +CONFIG_KEYBOARD_ATKBD=y +# CONFIG_KEYBOARD_LKKBD is not set +# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set + +## +## file: drivers/input/misc/Kconfig +## +# CONFIG_INPUT_MISC is not set + +## +## file: drivers/input/mouse/Kconfig +## +CONFIG_INPUT_MOUSE=y +CONFIG_MOUSE_PS2=y +# CONFIG_MOUSE_SERIAL is not set +# CONFIG_MOUSE_INPORT is not set +# CONFIG_MOUSE_LOGIBM is not set +# CONFIG_MOUSE_PC110PAD is not set +# CONFIG_MOUSE_VSXXXAA is not set + +## +## file: drivers/input/serio/Kconfig +## +CONFIG_SERIO=y +CONFIG_SERIO_I8042=y +CONFIG_SERIO_SERPORT=y +# CONFIG_SERIO_PARKBD is not set +CONFIG_SERIO_LIBPS2=y +CONFIG_SERIO_RAW=y + +## +## file: drivers/input/touchscreen/Kconfig +## +# CONFIG_INPUT_TOUCHSCREEN is not set + +## +## file: drivers/media/radio/Kconfig +## +# CONFIG_RADIO_CADET is not set +# CONFIG_RADIO_RTRACK is not set +# CONFIG_RADIO_RTRACK2 is not set +# CONFIG_RADIO_AZTECH is not set +# CONFIG_RADIO_GEMTEK is not set +# CONFIG_RADIO_SF16FMI is not set +# CONFIG_RADIO_SF16FMR2 is not set +# CONFIG_RADIO_TERRATEC is not set +# CONFIG_RADIO_TRUST is not set +# CONFIG_RADIO_TYPHOON is not set +# CONFIG_RADIO_ZOLTRIX is not set + +## +## file: drivers/media/video/Kconfig +## +# CONFIG_VIDEO_ADV_DEBUG is not set +# CONFIG_VIDEO_PMS is not set +# CONFIG_VIDEO_BWQCAM is not set +# CONFIG_VIDEO_CQCAM is not set +# CONFIG_VIDEO_W9966 is not set +CONFIG_VIDEO_VINO=m + +## +## file: drivers/message/fusion/Kconfig +## +# CONFIG_FUSION is not set + +## +## file: drivers/mmc/Kconfig +## +# CONFIG_MMC is not set + +## +## file: drivers/mtd/Kconfig +## +# CONFIG_MTD is not set + +## +## file: drivers/net/Kconfig +## +# CONFIG_NET_VENDOR_3COM is not set +CONFIG_NET_VENDOR_SMC=y +CONFIG_WD80x3=m +CONFIG_ULTRA=m +CONFIG_ULTRA32=m +CONFIG_SMC9194=m +CONFIG_SMC91X=m +# CONFIG_DM9000 is not set +# CONFIG_NET_VENDOR_RACAL is not set +# CONFIG_AT1700 is not set +# CONFIG_DEPCA is not set +# CONFIG_HP100 is not set +CONFIG_NET_ISA=y +CONFIG_E2100=m +CONFIG_EWRK3=m +CONFIG_EEXPRESS=m +CONFIG_EEXPRESS_PRO=m +CONFIG_HPLAN_PLUS=m +CONFIG_HPLAN=m +CONFIG_LP486E=m +CONFIG_ETH16I=m +CONFIG_NE2000=m +CONFIG_SEEQ8005=m +# CONFIG_NET_PCI is not set +# CONFIG_NET_POCKET is not set +CONFIG_SGISEEQ=y + +## +## file: drivers/net/appletalk/Kconfig +## +# CONFIG_ATALK is not set + +## +## file: drivers/net/arcnet/Kconfig +## +# CONFIG_ARCNET is not set + +## +## file: drivers/net/phy/Kconfig +## +# CONFIG_PHYLIB is not set + +## +## file: drivers/net/tokenring/Kconfig +## +# CONFIG_TR is not set + +## +## file: drivers/net/tulip/Kconfig +## +# CONFIG_NET_TULIP is not set + +## +## file: drivers/pcmcia/Kconfig +## +# CONFIG_PCCARD is not set + +## +## file: drivers/pnp/Kconfig +## +# CONFIG_PNP is not set + +## +## file: drivers/rtc/Kconfig +## +CONFIG_RTC_DRV_DS1286=y + +## +## file: drivers/scsi/Kconfig +## +CONFIG_SCSI=y +CONFIG_BLK_DEV_SD=y +# CONFIG_CHR_DEV_OSST is not set +CONFIG_BLK_DEV_SR=y +# CONFIG_SCSI_LOGGING is not set +CONFIG_SGIWD93_SCSI=y +# CONFIG_SCSI_AHA1740 is not set +# CONFIG_SCSI_AIC7XXX_OLD is not set +# CONFIG_SCSI_IN2000 is not set +# CONFIG_SCSI_DTC3280 is not set +# CONFIG_SCSI_FUTURE_DOMAIN is not set +# CONFIG_SCSI_GENERIC_NCR5380 is not set +# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set +# CONFIG_SCSI_NCR53C406A is not set +# CONFIG_SCSI_PAS16 is not set +# CONFIG_SCSI_QLOGIC_FAS is not set +# CONFIG_SCSI_SIM710 is not set +# CONFIG_SCSI_SYM53C416 is not set +# CONFIG_SCSI_T128 is not set + +## +## file: drivers/scsi/aic7xxx/Kconfig.aic7xxx +## +# CONFIG_SCSI_AIC7XXX is not set + +## +## file: drivers/spi/Kconfig +## +CONFIG_SPI=y +CONFIG_SPI_BITBANG=m +CONFIG_SPI_BUTTERFLY=m + +## +## file: drivers/telephony/Kconfig +## +# CONFIG_PHONE is not set + +## +## file: drivers/tty/Kconfig +## +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +# CONFIG_SERIAL_NONSTANDARD is not set + +## +## file: drivers/tty/serial/Kconfig +## +# CONFIG_SERIAL_8250 is not set +CONFIG_SERIAL_IP22_ZILOG=y +CONFIG_SERIAL_IP22_ZILOG_CONSOLE=y + +## +## file: drivers/video/Kconfig +## +CONFIG_FB=y +# CONFIG_FB_MODE_HELPERS is not set +# CONFIG_FB_TILEBLITTING is not set +# CONFIG_FB_S1D13XXX is not set +# CONFIG_FB_VIRTUAL is not set + +## +## file: drivers/video/console/Kconfig +## +# CONFIG_VGA_CONSOLE is not set +# CONFIG_MDA_CONSOLE is not set +CONFIG_SGI_NEWPORT_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE=y +# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set +# CONFIG_FONTS is not set +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y + +## +## file: drivers/video/logo/Kconfig +## +CONFIG_LOGO=y +# CONFIG_LOGO_LINUX_MONO is not set +# CONFIG_LOGO_LINUX_VGA16 is not set +# CONFIG_LOGO_LINUX_CLUT224 is not set +CONFIG_LOGO_SGI_CLUT224=y + +## +## file: drivers/w1/Kconfig +## +# CONFIG_W1 is not set + +## +## file: drivers/watchdog/Kconfig +## +CONFIG_INDYDOG=m +# CONFIG_PCWATCHDOG is not set +# CONFIG_MIXCOMWD is not set +# CONFIG_WDT is not set + +## +## file: fs/cramfs/Kconfig +## +CONFIG_CRAMFS=y + +## +## file: fs/ext2/Kconfig +## +CONFIG_EXT2_FS=y + +## +## file: fs/ext3/Kconfig +## +CONFIG_EXT3_FS=y + +## +## file: fs/partitions/Kconfig +## +CONFIG_SGI_PARTITION=y +CONFIG_KARMA_PARTITION=y + +## +## file: init/Kconfig +## +# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set + +## +## file: mm/Kconfig +## +## choice: Memory model +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +## end choice + +## +## file: net/ax25/Kconfig +## +# CONFIG_HAMRADIO is not set + +## +## file: net/bluetooth/Kconfig +## +# CONFIG_BT is not set + +## +## file: net/decnet/Kconfig +## +# CONFIG_DECNET is not set + +## +## file: net/ipx/Kconfig +## +# CONFIG_IPX is not set + +## +## file: net/irda/Kconfig +## +# CONFIG_IRDA is not set + +## +## file: net/lapb/Kconfig +## +# CONFIG_LAPB is not set + +## +## file: net/wanrouter/Kconfig +## +# CONFIG_WAN_ROUTER is not set + +## +## file: sound/drivers/Kconfig +## +# CONFIG_SND_DUMMY is not set +# CONFIG_SND_MTPAV is not set +# CONFIG_SND_SERIAL_U16550 is not set +# CONFIG_SND_MPU401 is not set + +## +## file: sound/mips/Kconfig +## +CONFIG_SND_MIPS=y +CONFIG_SND_SGI_HAL2=m + +## +## file: unknown +## +# CONFIG_MIPS_ATLAS is not set +# CONFIG_MIPS_SEAD is not set +# CONFIG_VIDEO_CPIA is not set +# CONFIG_VIDEO_OVCAMCHIP is not set +# CONFIG_VIDEO_SAA5246A is not set +# CONFIG_VIDEO_SAA5249 is not set + --- linux-2.6-3.0.0~rc6.orig/debian/config/mips/defines +++ linux-2.6-3.0.0~rc6/debian/config/mips/defines @@ -0,0 +1,41 @@ +[base] +flavours: + r4k-ip22 + r5k-ip32 + sb1-bcm91250a + sb1a-bcm91480b + 4kc-malta + 5kc-malta + octeon +kernel-arch: mips + +[image] +initramfs: false + +[r4k-ip22_description] +hardware: SGI IP22 +hardware-long: SGI IP22 systems (Indy, Indigo2) + +[r5k-ip32_description] +hardware: SGI IP32 +hardware-long: SGI IP32 systems (O2) + +[sb1-bcm91250a_description] +hardware: BCM91250A +hardware-long: Broadcom BCM91250A systems (aka SWARM) + +[sb1a-bcm91480b_description] +hardware: BCM91480B +hardware-long: Broadcom BCM91480B systems (aka BigSur) + +[4kc-malta_description] +hardware: MIPS Malta +hardware-long: MIPS Malta boards + +[5kc-malta_description] +hardware: MIPS Malta (64-bit) +hardware-long: MIPS Malta boards (64-bit) + +[octeon_description] +hardware: Octeon +hardware-long: Cavium Networks Octeon --- linux-2.6-3.0.0~rc6.orig/debian/config/mips/config +++ linux-2.6-3.0.0~rc6/debian/config/mips/config @@ -0,0 +1,14 @@ +## +## file: arch/mips/Kconfig +## +## choice: Endianess selection +CONFIG_CPU_BIG_ENDIAN=y +# CONFIG_CPU_LITTLE_ENDIAN is not set +## end choice +CONFIG_SECCOMP=y + +## +## file: drivers/net/Kconfig +## +# CONFIG_NIU is not set + --- linux-2.6-3.0.0~rc6.orig/debian/config/mips/config.4kc-malta +++ linux-2.6-3.0.0~rc6/debian/config/mips/config.4kc-malta @@ -0,0 +1,1198 @@ +## +## file: arch/Kconfig +## +CONFIG_OPROFILE=m + +## +## file: arch/mips/Kconfig +## +## choice: System type +# CONFIG_MIPS_COBALT is not set +# CONFIG_MACH_DECSTATION is not set +# CONFIG_MACH_JAZZ is not set +# CONFIG_LASAT is not set +CONFIG_MIPS_MALTA=y +# CONFIG_MIPS_SIM is not set +# CONFIG_MACH_VR41XX is not set +# CONFIG_PNX8550_JBS is not set +# CONFIG_PNX8550_STB810 is not set +# CONFIG_PMC_YOSEMITE is not set +# CONFIG_SGI_IP22 is not set +# CONFIG_SGI_IP27 is not set +# CONFIG_SGI_IP32 is not set +# CONFIG_SIBYTE_CRHINE is not set +# CONFIG_SIBYTE_CARMEL is not set +# CONFIG_SIBYTE_CRHONE is not set +# CONFIG_SIBYTE_RHONE is not set +# CONFIG_SIBYTE_SWARM is not set +# CONFIG_SIBYTE_LITTLESUR is not set +# CONFIG_SIBYTE_SENTOSA is not set +# CONFIG_SIBYTE_BIGSUR is not set +# CONFIG_SNI_RM is not set +# CONFIG_WR_PPMC is not set +## end choice +## choice: CPU type +CONFIG_CPU_MIPS32_R1=y +# CONFIG_CPU_MIPS32_R2 is not set +# CONFIG_CPU_MIPS64_R1 is not set +# CONFIG_CPU_MIPS64_R2 is not set +# CONFIG_CPU_R3000 is not set +# CONFIG_CPU_TX39XX is not set +# CONFIG_CPU_VR41XX is not set +# CONFIG_CPU_R4300 is not set +# CONFIG_CPU_R4X00 is not set +# CONFIG_CPU_TX49XX is not set +# CONFIG_CPU_R5000 is not set +# CONFIG_CPU_R5432 is not set +# CONFIG_CPU_R6000 is not set +# CONFIG_CPU_NEVADA is not set +# CONFIG_CPU_R8000 is not set +# CONFIG_CPU_R10000 is not set +# CONFIG_CPU_RM7000 is not set +# CONFIG_CPU_RM9000 is not set +# CONFIG_CPU_SB1 is not set +## end choice +## choice: Kernel code model +CONFIG_32BIT=y +# CONFIG_64BIT is not set +## end choice +## choice: Kernel page size +CONFIG_PAGE_SIZE_4KB=y +# CONFIG_PAGE_SIZE_8KB is not set +# CONFIG_PAGE_SIZE_16KB is not set +# CONFIG_PAGE_SIZE_64KB is not set +## end choice +## choice: MIPS MT options +CONFIG_MIPS_MT_DISABLED=y +# CONFIG_MIPS_MT_SMP is not set +# CONFIG_MIPS_MT_SMTC is not set +## end choice +# CONFIG_MIPS_VPE_LOADER is not set +# CONFIG_CPU_HAS_SMARTMIPS is not set +## choice: Timer frequency +# CONFIG_HZ_48 is not set +# CONFIG_HZ_100 is not set +# CONFIG_HZ_128 is not set +CONFIG_HZ_250=y +# CONFIG_HZ_256 is not set +# CONFIG_HZ_1000 is not set +# CONFIG_HZ_1024 is not set +## end choice +# CONFIG_KEXEC is not set +CONFIG_PCI=y +CONFIG_VIRTUALIZATION=y + +## +## file: arch/mips/Kconfig.debug +## +CONFIG_CMDLINE="" + +## +## file: arch/mips/txx9/Kconfig +## +# CONFIG_TOSHIBA_JMR3927 is not set +# CONFIG_TOSHIBA_RBTX4927 is not set +# CONFIG_TOSHIBA_RBTX4938 is not set + +## +## file: drivers/ata/Kconfig +## +CONFIG_ATA=y +CONFIG_SATA_AHCI=y +CONFIG_SATA_INIC162X=m +CONFIG_SATA_SIL24=y +# CONFIG_PDC_ADMA is not set +# CONFIG_SATA_QSTOR is not set +CONFIG_SATA_SX4=y +CONFIG_ATA_PIIX=y +CONFIG_SATA_MV=y +# CONFIG_SATA_NV is not set +CONFIG_SATA_PROMISE=y +CONFIG_SATA_SIL=y +# CONFIG_SATA_SIS is not set +# CONFIG_SATA_SVW is not set +# CONFIG_SATA_ULI is not set +# CONFIG_SATA_VIA is not set +# CONFIG_SATA_VITESSE is not set +CONFIG_PATA_CMD64X=y +CONFIG_PATA_HPT366=y +CONFIG_PATA_NETCELL=y +CONFIG_PATA_OLDPIIX=y +CONFIG_PATA_PDC2027X=y +CONFIG_PATA_PDC_OLD=y +CONFIG_PATA_SIL680=y +CONFIG_PATA_MPIIX=y +CONFIG_PATA_NS87410=y +CONFIG_PATA_PLATFORM=y +CONFIG_ATA_GENERIC=y + +## +## file: drivers/atm/Kconfig +## +# CONFIG_ATM_DRIVERS is not set + +## +## file: drivers/auxdisplay/Kconfig +## +# CONFIG_KS0108 is not set + +## +## file: drivers/block/Kconfig +## +CONFIG_BLK_DEV_FD=m +CONFIG_PARIDE=m +# CONFIG_BLK_CPQ_DA is not set +CONFIG_BLK_CPQ_CISS_DA=m +CONFIG_CISS_SCSI_TAPE=y +CONFIG_BLK_DEV_DAC960=m +CONFIG_BLK_DEV_UMEM=m +CONFIG_BLK_DEV_SX8=m +# CONFIG_BLK_DEV_UB is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_COUNT=16 +CONFIG_BLK_DEV_RAM_SIZE=65536 +CONFIG_CDROM_PKTCDVD=m +CONFIG_CDROM_PKTCDVD_BUFFERS=8 +# CONFIG_CDROM_PKTCDVD_WCACHE is not set + +## +## file: drivers/block/paride/Kconfig +## +CONFIG_PARIDE_PD=m +CONFIG_PARIDE_PCD=m +CONFIG_PARIDE_PF=m +CONFIG_PARIDE_PT=m +CONFIG_PARIDE_PG=m +CONFIG_PARIDE_ATEN=m +CONFIG_PARIDE_BPCK=m +CONFIG_PARIDE_COMM=m +CONFIG_PARIDE_DSTR=m +CONFIG_PARIDE_FIT2=m +CONFIG_PARIDE_FIT3=m +CONFIG_PARIDE_EPAT=m +# CONFIG_PARIDE_EPATC8 is not set +CONFIG_PARIDE_EPIA=m +CONFIG_PARIDE_FRIQ=m +CONFIG_PARIDE_FRPW=m +CONFIG_PARIDE_KBIC=m +CONFIG_PARIDE_KTTI=m +CONFIG_PARIDE_ON20=m +CONFIG_PARIDE_ON26=m + +## +## file: drivers/bluetooth/Kconfig +## +CONFIG_BT_HCIUART=m +CONFIG_BT_HCIUART_H4=y +CONFIG_BT_HCIUART_BCSP=y +CONFIG_BT_HCIBCM203X=m +CONFIG_BT_HCIBPA10X=m +CONFIG_BT_HCIBFUSB=m +CONFIG_BT_HCIVHCI=m + +## +## file: drivers/char/Kconfig +## +CONFIG_PRINTER=m +# CONFIG_LP_CONSOLE is not set +CONFIG_PPDEV=m +CONFIG_R3964=m +CONFIG_APPLICOM=m + +## +## file: drivers/char/ipmi/Kconfig +## +CONFIG_IPMI_HANDLER=m +# CONFIG_IPMI_PANIC_EVENT is not set +# CONFIG_IPMI_DEVICE_INTERFACE is not set +CONFIG_IPMI_SI=m +CONFIG_IPMI_WATCHDOG=m +CONFIG_IPMI_POWEROFF=m + +## +## file: drivers/char/tpm/Kconfig +## +# CONFIG_TCG_TPM is not set + +## +## file: drivers/gpu/drm/Kconfig +## +CONFIG_DRM=m +CONFIG_DRM_TDFX=m +CONFIG_DRM_R128=m +CONFIG_DRM_RADEON=m +CONFIG_DRM_MGA=m +CONFIG_DRM_VIA=m +CONFIG_DRM_SAVAGE=m + +## +## file: drivers/gpu/drm/nouveau/Kconfig +## +CONFIG_DRM_NOUVEAU=m +# CONFIG_DRM_NOUVEAU_BACKLIGHT is not set +# CONFIG_DRM_NOUVEAU_DEBUG is not set +CONFIG_DRM_I2C_CH7006=m +CONFIG_DRM_I2C_SIL164=m + +## +## file: drivers/hwmon/Kconfig +## +CONFIG_HWMON=y +# CONFIG_HWMON_DEBUG_CHIP is not set +# CONFIG_SENSORS_ABITUGURU is not set +CONFIG_SENSORS_AD7418=m +CONFIG_SENSORS_ADM1021=m +CONFIG_SENSORS_ADM1025=m +CONFIG_SENSORS_ADM1026=m +CONFIG_SENSORS_ADM1029=m +CONFIG_SENSORS_ADM1031=m +CONFIG_SENSORS_ADM9240=m +# CONFIG_SENSORS_ASB100 is not set +# CONFIG_SENSORS_ATXP1 is not set +CONFIG_SENSORS_DS1621=m +# CONFIG_SENSORS_F71805F is not set +# CONFIG_SENSORS_GL518SM is not set +# CONFIG_SENSORS_GL520SM is not set +# CONFIG_SENSORS_IT87 is not set +CONFIG_SENSORS_LM63=m +CONFIG_SENSORS_LM70=m +CONFIG_SENSORS_LM75=m +CONFIG_SENSORS_LM77=m +CONFIG_SENSORS_LM78=m +CONFIG_SENSORS_LM80=m +CONFIG_SENSORS_LM83=m +CONFIG_SENSORS_LM85=m +CONFIG_SENSORS_LM87=m +CONFIG_SENSORS_LM90=m +CONFIG_SENSORS_LM92=m +CONFIG_SENSORS_MAX1619=m +CONFIG_SENSORS_MAX6650=m +# CONFIG_SENSORS_PC87360 is not set +# CONFIG_SENSORS_PC87427 is not set +CONFIG_SENSORS_PCF8591=m +# CONFIG_SENSORS_SIS5595 is not set +# CONFIG_SENSORS_SMSC47M1 is not set +# CONFIG_SENSORS_SMSC47M192 is not set +# CONFIG_SENSORS_SMSC47B397 is not set +# CONFIG_SENSORS_VIA686A is not set +# CONFIG_SENSORS_VT1211 is not set +# CONFIG_SENSORS_VT8231 is not set +# CONFIG_SENSORS_W83781D is not set +# CONFIG_SENSORS_W83791D is not set +# CONFIG_SENSORS_W83792D is not set +# CONFIG_SENSORS_W83793 is not set +# CONFIG_SENSORS_W83L785TS is not set +# CONFIG_SENSORS_W83627HF is not set +# CONFIG_SENSORS_W83627EHF is not set + +## +## file: drivers/i2c/Kconfig +## +CONFIG_I2C=m +CONFIG_I2C_CHARDEV=m +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set + +## +## file: drivers/i2c/busses/Kconfig +## +# CONFIG_I2C_ALI1535 is not set +# CONFIG_I2C_ALI1563 is not set +# CONFIG_I2C_ALI15X3 is not set +# CONFIG_I2C_AMD756 is not set +# CONFIG_I2C_AMD8111 is not set +# CONFIG_I2C_I801 is not set +CONFIG_I2C_PIIX4=m +# CONFIG_I2C_NFORCE2 is not set +# CONFIG_I2C_SIS5595 is not set +# CONFIG_I2C_SIS630 is not set +# CONFIG_I2C_SIS96X is not set +# CONFIG_I2C_VIA is not set +# CONFIG_I2C_VIAPRO is not set +# CONFIG_I2C_OCORES is not set +CONFIG_I2C_SIMTEC=m +CONFIG_I2C_PARPORT=m +CONFIG_I2C_PARPORT_LIGHT=m +CONFIG_I2C_TINY_USB=m +# CONFIG_I2C_STUB is not set + +## +## file: drivers/ide/Kconfig +## +# CONFIG_IDE is not set + +## +## file: drivers/input/gameport/Kconfig +## +CONFIG_GAMEPORT=m +# CONFIG_GAMEPORT_NS558 is not set +# CONFIG_GAMEPORT_L4 is not set +CONFIG_GAMEPORT_EMU10K1=m +CONFIG_GAMEPORT_FM801=m + +## +## file: drivers/input/joystick/Kconfig +## +CONFIG_INPUT_JOYSTICK=y + +## +## file: drivers/input/keyboard/Kconfig +## +CONFIG_INPUT_KEYBOARD=y +CONFIG_KEYBOARD_ATKBD=y +CONFIG_KEYBOARD_LKKBD=m +CONFIG_KEYBOARD_NEWTON=m +CONFIG_KEYBOARD_STOWAWAY=m +CONFIG_KEYBOARD_SUNKBD=m +CONFIG_KEYBOARD_XTKBD=m + +## +## file: drivers/input/misc/Kconfig +## +# CONFIG_INPUT_MISC is not set + +## +## file: drivers/input/mouse/Kconfig +## +CONFIG_INPUT_MOUSE=y +CONFIG_MOUSE_PS2=m +CONFIG_MOUSE_PS2_LOGIPS2PP=y +CONFIG_MOUSE_PS2_SYNAPTICS=y +CONFIG_MOUSE_PS2_LIFEBOOK=y +CONFIG_MOUSE_PS2_TRACKPOINT=y +# CONFIG_MOUSE_PS2_TOUCHKIT is not set +CONFIG_MOUSE_SERIAL=m +CONFIG_MOUSE_APPLETOUCH=m +CONFIG_MOUSE_VSXXXAA=m + +## +## file: drivers/input/serio/Kconfig +## +CONFIG_SERIO=y +CONFIG_SERIO_I8042=y +CONFIG_SERIO_SERPORT=m +CONFIG_SERIO_PARKBD=m +CONFIG_SERIO_PCIPS2=y +CONFIG_SERIO_LIBPS2=y +CONFIG_SERIO_RAW=m + +## +## file: drivers/input/touchscreen/Kconfig +## +CONFIG_INPUT_TOUCHSCREEN=y + +## +## file: drivers/isdn/Kconfig +## +CONFIG_ISDN=y +CONFIG_ISDN_CAPI=m + +## +## file: drivers/isdn/capi/Kconfig +## +CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON=y +CONFIG_ISDN_CAPI_MIDDLEWARE=y +CONFIG_ISDN_CAPI_CAPI20=m +CONFIG_ISDN_CAPI_CAPIDRV=m + +## +## file: drivers/isdn/gigaset/Kconfig +## +CONFIG_ISDN_DRV_GIGASET=m +CONFIG_GIGASET_BASE=m +CONFIG_GIGASET_M105=m +CONFIG_GIGASET_M101=m +# CONFIG_GIGASET_DEBUG is not set + +## +## file: drivers/isdn/hardware/avm/Kconfig +## +CONFIG_CAPI_AVM=y +CONFIG_ISDN_DRV_AVMB1_B1PCI=m +CONFIG_ISDN_DRV_AVMB1_B1PCIV4=y +CONFIG_ISDN_DRV_AVMB1_B1PCMCIA=m +CONFIG_ISDN_DRV_AVMB1_T1PCI=m +CONFIG_ISDN_DRV_AVMB1_C4=m + +## +## file: drivers/isdn/hardware/eicon/Kconfig +## +CONFIG_CAPI_EICON=y +CONFIG_ISDN_DIVAS=m +CONFIG_ISDN_DIVAS_BRIPCI=y +CONFIG_ISDN_DIVAS_PRIPCI=y +CONFIG_ISDN_DIVAS_DIVACAPI=m +CONFIG_ISDN_DIVAS_USERIDI=m +CONFIG_ISDN_DIVAS_MAINT=m + +## +## file: drivers/leds/Kconfig +## +# CONFIG_NEW_LEDS is not set + +## +## file: drivers/message/i2o/Kconfig +## +CONFIG_I2O=m +CONFIG_I2O_LCT_NOTIFY_ON_CHANGES=y +CONFIG_I2O_EXT_ADAPTEC=y +CONFIG_I2O_CONFIG=m +CONFIG_I2O_CONFIG_OLD_IOCTL=y +CONFIG_I2O_BUS=m +CONFIG_I2O_BLOCK=m +CONFIG_I2O_SCSI=m +CONFIG_I2O_PROC=m + +## +## file: drivers/mfd/Kconfig +## +CONFIG_MFD_SM501=m + +## +## file: drivers/misc/Kconfig +## +# CONFIG_PHANTOM is not set +# CONFIG_SGI_IOC4 is not set +CONFIG_TIFM_CORE=m +CONFIG_TIFM_7XX1=m + +## +## file: drivers/mmc/Kconfig +## +CONFIG_MMC=m +# CONFIG_MMC_DEBUG is not set + +## +## file: drivers/mmc/card/Kconfig +## +CONFIG_MMC_BLOCK=m + +## +## file: drivers/mmc/core/Kconfig +## +# CONFIG_MMC_UNSAFE_RESUME is not set + +## +## file: drivers/mtd/Kconfig +## +CONFIG_MTD=m +# CONFIG_MTD_DEBUG is not set +CONFIG_MTD_REDBOOT_PARTS=y +CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1 +# CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED is not set +# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set +CONFIG_MTD_CHAR=m +CONFIG_MTD_BLKDEVS=m +CONFIG_MTD_BLOCK=m +CONFIG_MTD_BLOCK_RO=m +CONFIG_FTL=m +CONFIG_NFTL=m +CONFIG_NFTL_RW=y +CONFIG_INFTL=m +CONFIG_RFD_FTL=m +CONFIG_SSFDC=m + +## +## file: drivers/mtd/chips/Kconfig +## +CONFIG_MTD_CFI=m +CONFIG_MTD_JEDECPROBE=m +# CONFIG_MTD_CFI_ADV_OPTIONS is not set +CONFIG_MTD_MAP_BANK_WIDTH_1=y +CONFIG_MTD_MAP_BANK_WIDTH_2=y +CONFIG_MTD_MAP_BANK_WIDTH_4=y +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set +CONFIG_MTD_CFI_I1=y +CONFIG_MTD_CFI_I2=y +# CONFIG_MTD_CFI_I4 is not set +# CONFIG_MTD_CFI_I8 is not set +CONFIG_MTD_CFI_INTELEXT=m +CONFIG_MTD_CFI_AMDSTD=m +CONFIG_MTD_CFI_STAA=m +CONFIG_MTD_RAM=m +CONFIG_MTD_ROM=m +CONFIG_MTD_ABSENT=m + +## +## file: drivers/mtd/devices/Kconfig +## +CONFIG_MTD_PMC551=m +# CONFIG_MTD_PMC551_BUGFIX is not set +# CONFIG_MTD_PMC551_DEBUG is not set +CONFIG_MTD_DATAFLASH=m +CONFIG_MTD_M25P80=m +CONFIG_MTD_SLRAM=m +CONFIG_MTD_PHRAM=m +CONFIG_MTD_MTDRAM=m +CONFIG_MTDRAM_TOTAL_SIZE=4096 +CONFIG_MTDRAM_ERASE_SIZE=128 +CONFIG_MTD_BLOCK2MTD=m +CONFIG_MTD_DOC2000=m +CONFIG_MTD_DOC2001=m +CONFIG_MTD_DOC2001PLUS=m +# CONFIG_MTD_DOCPROBE_ADVANCED is not set +CONFIG_MTD_DOCPROBE_ADDRESS=0 + +## +## file: drivers/mtd/maps/Kconfig +## +CONFIG_MTD_COMPLEX_MAPPINGS=y +CONFIG_MTD_PHYSMAP=m +CONFIG_MTD_PHYSMAP_START=0x8000000 +CONFIG_MTD_PHYSMAP_LEN=0x0 +CONFIG_MTD_PHYSMAP_BANKWIDTH=2 +CONFIG_MTD_PCI=m +CONFIG_MTD_PLATRAM=m + +## +## file: drivers/mtd/nand/Kconfig +## +# CONFIG_MTD_NAND_ECC_SMC is not set +CONFIG_MTD_NAND=m +# CONFIG_MTD_NAND_VERIFY_WRITE is not set +# CONFIG_MTD_NAND_MUSEUM_IDS is not set +CONFIG_MTD_NAND_DISKONCHIP=m +# CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADVANCED is not set +CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADDRESS=0 +# CONFIG_MTD_NAND_DISKONCHIP_BBTWRITE is not set +CONFIG_MTD_NAND_CAFE=m +# CONFIG_MTD_NAND_PLATFORM is not set + +## +## file: drivers/mtd/onenand/Kconfig +## +CONFIG_MTD_ONENAND=m +CONFIG_MTD_ONENAND_VERIFY_WRITE=y +# CONFIG_MTD_ONENAND_OTP is not set + +## +## file: drivers/mtd/ubi/Kconfig +## +CONFIG_MTD_UBI=m +CONFIG_MTD_UBI_WL_THRESHOLD=4096 +CONFIG_MTD_UBI_BEB_RESERVE=1 +# CONFIG_MTD_UBI_GLUEBI is not set +# CONFIG_MTD_UBI_DEBUG is not set + +## +## file: drivers/net/Kconfig +## +# CONFIG_HAPPYMEAL is not set +# CONFIG_SUNGEM is not set +# CONFIG_CASSINI is not set +CONFIG_NET_VENDOR_3COM=y +CONFIG_VORTEX=m +CONFIG_TYPHOON=m +# CONFIG_DM9000 is not set +# CONFIG_HP100 is not set +CONFIG_NET_PCI=y +CONFIG_PCNET32=y +CONFIG_AMD8111_ETH=m +CONFIG_ADAPTEC_STARFIRE=m +CONFIG_B44=m +# CONFIG_FORCEDETH is not set +# CONFIG_TC35815 is not set +CONFIG_E100=m +CONFIG_FEALNX=m +CONFIG_NATSEMI=m +CONFIG_NE2K_PCI=m +CONFIG_8139CP=m +CONFIG_8139TOO=m +# CONFIG_8139TOO_PIO is not set +CONFIG_8139TOO_TUNE_TWISTER=y +CONFIG_8139TOO_8129=y +# CONFIG_8139_OLD_RX_RESET is not set +CONFIG_SIS900=m +CONFIG_EPIC100=m +CONFIG_SUNDANCE=m +# CONFIG_SUNDANCE_MMIO is not set +CONFIG_VIA_RHINE=m +# CONFIG_VIA_RHINE_MMIO is not set +CONFIG_SC92031=m +CONFIG_NET_POCKET=y +CONFIG_DE600=m +CONFIG_DE620=m +CONFIG_NETDEV_1000=y +CONFIG_FDDI=y +CONFIG_SKFP=m +CONFIG_HIPPI=y +CONFIG_ROADRUNNER=m +# CONFIG_ROADRUNNER_LARGE_RINGS is not set +CONFIG_PLIP=m +CONFIG_NET_FC=y +# CONFIG_NETPOLL_TRAP is not set + +## +## file: drivers/net/arcnet/Kconfig +## +CONFIG_ARCNET=m +CONFIG_ARCNET_1201=m +CONFIG_ARCNET_1051=m +CONFIG_ARCNET_RAW=m +CONFIG_ARCNET_CAP=m +CONFIG_ARCNET_COM90xx=m +CONFIG_ARCNET_COM90xxIO=m +CONFIG_ARCNET_RIM_I=m +CONFIG_ARCNET_COM20020=m +CONFIG_ARCNET_COM20020_PCI=m + +## +## file: drivers/net/irda/Kconfig +## +CONFIG_IRTTY_SIR=m +CONFIG_USB_IRDA=m +CONFIG_SIGMATEL_FIR=m +CONFIG_VLSI_FIR=m +CONFIG_MCS_FIR=m + +## +## file: drivers/net/phy/Kconfig +## +CONFIG_PHYLIB=m +CONFIG_MARVELL_PHY=m +CONFIG_DAVICOM_PHY=m +# CONFIG_QSEMI_PHY is not set +CONFIG_LXT_PHY=m +# CONFIG_CICADA_PHY is not set +# CONFIG_VITESSE_PHY is not set +CONFIG_SMSC_PHY=m +CONFIG_BROADCOM_PHY=m + +## +## file: drivers/net/tokenring/Kconfig +## +# CONFIG_TR is not set + +## +## file: drivers/net/tulip/Kconfig +## +CONFIG_NET_TULIP=y +CONFIG_DE2104X=m +CONFIG_TULIP=m +# CONFIG_TULIP_MWI is not set +# CONFIG_TULIP_MMIO is not set +# CONFIG_TULIP_NAPI is not set +CONFIG_DE4X5=m +# CONFIG_WINBOND_840 is not set +CONFIG_DM9102=m +# CONFIG_ULI526X is not set + +## +## file: drivers/net/wan/Kconfig +## +# CONFIG_WAN is not set + +## +## file: drivers/net/wireless/Kconfig +## +CONFIG_ATMEL=m +CONFIG_PCI_ATMEL=m +CONFIG_USB_ZD1201=m + +## +## file: drivers/net/wireless/ipw2x00/Kconfig +## +CONFIG_IPW2100=m +CONFIG_IPW2100_MONITOR=y +# CONFIG_IPW2100_DEBUG is not set +CONFIG_IPW2200=m +# CONFIG_IPW2200_MONITOR is not set +CONFIG_IPW2200_QOS=y +# CONFIG_IPW2200_DEBUG is not set + +## +## file: drivers/net/wireless/libertas/Kconfig +## +CONFIG_LIBERTAS=m +CONFIG_LIBERTAS_USB=m +# CONFIG_LIBERTAS_DEBUG is not set + +## +## file: drivers/net/wireless/mwifiex/Kconfig +## +CONFIG_MWIFIEX=m +CONFIG_MWIFIEX_SDIO=m + +## +## file: drivers/net/wireless/orinoco/Kconfig +## +CONFIG_HERMES=m +CONFIG_PLX_HERMES=m +CONFIG_TMD_HERMES=m +CONFIG_NORTEL_HERMES=m +CONFIG_PCI_HERMES=m + +## +## file: drivers/net/wireless/zd1211rw/Kconfig +## +CONFIG_ZD1211RW=m +# CONFIG_ZD1211RW_DEBUG is not set + +## +## file: drivers/parport/Kconfig +## +# CONFIG_PARPORT_AX88796 is not set + +## +## file: drivers/pci/hotplug/Kconfig +## +# CONFIG_HOTPLUG_PCI is not set + +## +## file: drivers/pcmcia/Kconfig +## +# CONFIG_PCCARD is not set + +## +## file: drivers/rtc/Kconfig +## +CONFIG_RTC_DRV_DS1307=m +CONFIG_RTC_DRV_DS1672=m +CONFIG_RTC_DRV_MAX6900=m +CONFIG_RTC_DRV_RS5C372=m +CONFIG_RTC_DRV_ISL1208=m +CONFIG_RTC_DRV_X1205=m +CONFIG_RTC_DRV_PCF8563=m +CONFIG_RTC_DRV_PCF8583=m +CONFIG_RTC_DRV_MAX6902=m +CONFIG_RTC_DRV_RS5C348=m +CONFIG_RTC_DRV_CMOS=y +# CONFIG_RTC_DRV_DS1553 is not set +# CONFIG_RTC_DRV_DS1742 is not set +CONFIG_RTC_DRV_M48T86=m +# CONFIG_RTC_DRV_V3020 is not set + +## +## file: drivers/scsi/Kconfig +## +CONFIG_SCSI=y +CONFIG_BLK_DEV_SD=y +CONFIG_SCSI_ARCMSR=m +CONFIG_SCSI_HPTIOP=m +CONFIG_SCSI_DMX3191D=m +CONFIG_SCSI_FUTURE_DOMAIN=m +CONFIG_SCSI_IPS=m +CONFIG_SCSI_INITIO=m +CONFIG_SCSI_INIA100=m +CONFIG_SCSI_STEX=m +CONFIG_SCSI_SYM53C8XX_2=m +CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1 +CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16 +CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 +CONFIG_SCSI_SYM53C8XX_MMIO=y +# CONFIG_SCSI_IPR is not set +CONFIG_SCSI_QLOGIC_1280=m +CONFIG_SCSI_DC395x=m +CONFIG_SCSI_DC390T=m +CONFIG_SCSI_DEBUG=m +CONFIG_SCSI_SRP=m + +## +## file: drivers/scsi/aic7xxx/Kconfig.aic79xx +## +CONFIG_SCSI_AIC79XX=m +CONFIG_AIC79XX_CMDS_PER_DEVICE=32 +CONFIG_AIC79XX_RESET_DELAY_MS=15000 +CONFIG_AIC79XX_DEBUG_ENABLE=y +CONFIG_AIC79XX_DEBUG_MASK=0 +CONFIG_AIC79XX_REG_PRETTY_PRINT=y + +## +## file: drivers/scsi/aic7xxx/Kconfig.aic7xxx +## +CONFIG_SCSI_AIC7XXX=m +CONFIG_AIC7XXX_CMDS_PER_DEVICE=8 +CONFIG_AIC7XXX_RESET_DELAY_MS=15000 +CONFIG_AIC7XXX_DEBUG_ENABLE=y +CONFIG_AIC7XXX_DEBUG_MASK=0 +CONFIG_AIC7XXX_REG_PRETTY_PRINT=y + +## +## file: drivers/scsi/aic94xx/Kconfig +## +CONFIG_SCSI_AIC94XX=m +# CONFIG_AIC94XX_DEBUG is not set + +## +## file: drivers/scsi/libsas/Kconfig +## +CONFIG_SCSI_SAS_LIBSAS=m + +## +## file: drivers/scsi/megaraid/Kconfig.megaraid +## +CONFIG_MEGARAID_NEWGEN=y +CONFIG_MEGARAID_MM=m +CONFIG_MEGARAID_MAILBOX=m +CONFIG_MEGARAID_LEGACY=m +CONFIG_MEGARAID_SAS=m + +## +## file: drivers/scsi/qla2xxx/Kconfig +## +CONFIG_SCSI_QLA_FC=m + +## +## file: drivers/scsi/qla4xxx/Kconfig +## +CONFIG_SCSI_QLA_ISCSI=m + +## +## file: drivers/spi/Kconfig +## +CONFIG_SPI=y +CONFIG_SPI_BITBANG=m +CONFIG_SPI_BUTTERFLY=m +# CONFIG_SPI_SPIDEV is not set + +## +## file: drivers/telephony/Kconfig +## +CONFIG_PHONE=m +CONFIG_PHONE_IXJ=m + +## +## file: drivers/tty/Kconfig +## +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +# CONFIG_VT_HW_CONSOLE_BINDING is not set +# CONFIG_SERIAL_NONSTANDARD is not set + +## +## file: drivers/tty/serial/Kconfig +## +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_SERIAL_8250_PCI=y +CONFIG_SERIAL_8250_NR_UARTS=4 +CONFIG_SERIAL_8250_RUNTIME_UARTS=4 +CONFIG_SERIAL_8250_EXTENDED=y +# CONFIG_SERIAL_8250_MANY_PORTS is not set +CONFIG_SERIAL_8250_SHARE_IRQ=y +# CONFIG_SERIAL_8250_DETECT_IRQ is not set +CONFIG_SERIAL_8250_RSA=y +CONFIG_SERIAL_JSM=m + +## +## file: drivers/usb/Kconfig +## +CONFIG_USB=m +CONFIG_USB_USS720=m + +## +## file: drivers/usb/atm/Kconfig +## +CONFIG_USB_ATM=m +CONFIG_USB_SPEEDTOUCH=m +CONFIG_USB_CXACRU=m +CONFIG_USB_UEAGLEATM=m +CONFIG_USB_XUSBATM=m + +## +## file: drivers/usb/host/Kconfig +## +CONFIG_USB_EHCI_HCD=m +CONFIG_USB_EHCI_ROOT_HUB_TT=y +# CONFIG_USB_EHCI_TT_NEWSCHED is not set +CONFIG_USB_ISP116X_HCD=m +CONFIG_USB_OHCI_HCD=m +CONFIG_USB_UHCI_HCD=y +CONFIG_USB_U132_HCD=m +CONFIG_USB_SL811_HCD=m + +## +## file: drivers/usb/mon/Kconfig +## +CONFIG_USB_MON=y + +## +## file: drivers/video/Kconfig +## +CONFIG_FB=y +CONFIG_FIRMWARE_EDID=y +CONFIG_FB_MODE_HELPERS=y +CONFIG_FB_TILEBLITTING=y +CONFIG_FB_CIRRUS=y +CONFIG_FB_PM2=m +CONFIG_FB_PM2_FIFO_DISCONNECT=y +CONFIG_FB_CYBER2000=m +# CONFIG_FB_ASILIANT is not set +# CONFIG_FB_IMSTT is not set +CONFIG_FB_S1D13XXX=m +CONFIG_FB_NVIDIA=m +# CONFIG_FB_NVIDIA_I2C is not set +# CONFIG_FB_NVIDIA_DEBUG is not set +CONFIG_FB_NVIDIA_BACKLIGHT=y +# CONFIG_FB_RIVA is not set +CONFIG_FB_MATROX=m +CONFIG_FB_MATROX_MILLENIUM=y +CONFIG_FB_MATROX_MYSTIQUE=y +CONFIG_FB_MATROX_G=y +CONFIG_FB_MATROX_I2C=m +CONFIG_FB_MATROX_MAVEN=m +CONFIG_FB_RADEON=m +CONFIG_FB_RADEON_I2C=y +CONFIG_FB_RADEON_BACKLIGHT=y +# CONFIG_FB_RADEON_DEBUG is not set +CONFIG_FB_ATY128=m +CONFIG_FB_ATY128_BACKLIGHT=y +CONFIG_FB_ATY=m +CONFIG_FB_ATY_CT=y +# CONFIG_FB_ATY_GENERIC_LCD is not set +CONFIG_FB_ATY_GX=y +CONFIG_FB_ATY_BACKLIGHT=y +CONFIG_FB_SAVAGE=m +# CONFIG_FB_SAVAGE_I2C is not set +# CONFIG_FB_SAVAGE_ACCEL is not set +CONFIG_FB_SIS=m +CONFIG_FB_SIS_300=y +CONFIG_FB_SIS_315=y +CONFIG_FB_NEOMAGIC=m +CONFIG_FB_KYRO=m +CONFIG_FB_VOODOO1=m +CONFIG_FB_VT8623=m +CONFIG_FB_TRIDENT=m +CONFIG_FB_ARK=m +CONFIG_FB_PM3=m +CONFIG_FB_SM501=m +CONFIG_FB_VIRTUAL=m + +## +## file: drivers/video/console/Kconfig +## +CONFIG_VGA_CONSOLE=y +# CONFIG_VGACON_SOFT_SCROLLBACK is not set +CONFIG_FRAMEBUFFER_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y +# CONFIG_FONTS is not set +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y + +## +## file: drivers/video/display/Kconfig +## +CONFIG_DISPLAY_SUPPORT=m + +## +## file: drivers/video/logo/Kconfig +## +CONFIG_LOGO=y + +## +## file: drivers/watchdog/Kconfig +## +CONFIG_PCIPCWATCHDOG=m +CONFIG_WDTPCI=m +CONFIG_USBPCWATCHDOG=m + +## +## file: fs/cramfs/Kconfig +## +CONFIG_CRAMFS=y + +## +## file: fs/dlm/Kconfig +## +CONFIG_DLM=m +# CONFIG_DLM_DEBUG is not set + +## +## file: fs/ext2/Kconfig +## +CONFIG_EXT2_FS=y + +## +## file: fs/ext3/Kconfig +## +CONFIG_EXT3_FS=y + +## +## file: fs/nfs/Kconfig +## +CONFIG_NFS_FS=y + +## +## file: fs/partitions/Kconfig +## +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y + +## +## file: init/Kconfig +## +# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set + +## +## file: lib/Kconfig.debug +## +CONFIG_ENABLE_MUST_CHECK=y +CONFIG_UNUSED_SYMBOLS=y +# CONFIG_HEADERS_CHECK is not set + +## +## file: mm/Kconfig +## +## choice: Memory model +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +## end choice + +## +## file: net/ax25/Kconfig +## +CONFIG_HAMRADIO=y +CONFIG_AX25=m +# CONFIG_AX25_DAMA_SLAVE is not set +CONFIG_NETROM=m +CONFIG_ROSE=m + +## +## file: net/decnet/Kconfig +## +CONFIG_DECNET=m +# CONFIG_DECNET_ROUTER is not set + +## +## file: net/decnet/netfilter/Kconfig +## +CONFIG_DECNET_NF_GRABULATOR=m + +## +## file: net/ipx/Kconfig +## +CONFIG_IPX=m +# CONFIG_IPX_INTERN is not set + +## +## file: net/irda/Kconfig +## +CONFIG_IRDA=m +# CONFIG_IRDA_ULTRA is not set +CONFIG_IRDA_CACHE_LAST_LSAP=y +CONFIG_IRDA_FAST_RR=y +# CONFIG_IRDA_DEBUG is not set + +## +## file: net/irda/ircomm/Kconfig +## +CONFIG_IRCOMM=m + +## +## file: net/irda/irlan/Kconfig +## +CONFIG_IRLAN=m + +## +## file: net/irda/irnet/Kconfig +## +CONFIG_IRNET=m + +## +## file: net/lapb/Kconfig +## +CONFIG_LAPB=m + +## +## file: net/netlabel/Kconfig +## +# CONFIG_NETLABEL is not set + +## +## file: net/wanrouter/Kconfig +## +CONFIG_WAN_ROUTER=m + +## +## file: net/x25/Kconfig +## +CONFIG_X25=m + +## +## file: sound/drivers/Kconfig +## +CONFIG_SND_DUMMY=m +CONFIG_SND_VIRMIDI=m +CONFIG_SND_MTPAV=m +CONFIG_SND_MTS64=m +CONFIG_SND_SERIAL_U16550=m +CONFIG_SND_MPU401=m +CONFIG_SND_PORTMAN2X4=m +CONFIG_SND_AC97_POWER_SAVE=y + +## +## file: sound/pci/Kconfig +## +CONFIG_SND_AD1889=m +CONFIG_SND_ALS300=m +CONFIG_SND_ALI5451=m +CONFIG_SND_ATIIXP=m +CONFIG_SND_ATIIXP_MODEM=m +CONFIG_SND_AU8810=m +CONFIG_SND_AU8820=m +CONFIG_SND_AU8830=m +CONFIG_SND_AZT3328=m +CONFIG_SND_BT87X=m +# CONFIG_SND_BT87X_OVERCLOCK is not set +CONFIG_SND_CA0106=m +CONFIG_SND_CMIPCI=m +CONFIG_SND_CS4281=m +CONFIG_SND_CS46XX=m +CONFIG_SND_CS46XX_NEW_DSP=y +CONFIG_SND_DARLA20=m +CONFIG_SND_GINA20=m +CONFIG_SND_LAYLA20=m +CONFIG_SND_DARLA24=m +CONFIG_SND_GINA24=m +CONFIG_SND_LAYLA24=m +CONFIG_SND_MONA=m +CONFIG_SND_MIA=m +CONFIG_SND_ECHO3G=m +CONFIG_SND_INDIGO=m +CONFIG_SND_INDIGOIO=m +CONFIG_SND_INDIGODJ=m +CONFIG_SND_EMU10K1=m +CONFIG_SND_EMU10K1X=m +CONFIG_SND_ENS1370=m +CONFIG_SND_ENS1371=m +CONFIG_SND_ES1938=m +CONFIG_SND_ES1968=m +CONFIG_SND_FM801=m +CONFIG_SND_FM801_TEA575X_BOOL=y +CONFIG_SND_HDSP=m +CONFIG_SND_HDSPM=m +CONFIG_SND_ICE1712=m +CONFIG_SND_ICE1724=m +CONFIG_SND_INTEL8X0=m +CONFIG_SND_INTEL8X0M=m +CONFIG_SND_KORG1212=m +CONFIG_SND_MAESTRO3=m +CONFIG_SND_MIXART=m +CONFIG_SND_NM256=m +CONFIG_SND_PCXHR=m +CONFIG_SND_RIPTIDE=m +CONFIG_SND_RME32=m +CONFIG_SND_RME96=m +CONFIG_SND_RME9652=m +CONFIG_SND_SONICVIBES=m +CONFIG_SND_TRIDENT=m +CONFIG_SND_VIA82XX=m +CONFIG_SND_VIA82XX_MODEM=m +CONFIG_SND_VX222=m +CONFIG_SND_YMFPCI=m + +## +## file: sound/pci/hda/Kconfig +## +CONFIG_SND_HDA_INTEL=m + +## +## file: unknown +## +# CONFIG_BASLER_EXCITE is not set +# CONFIG_SCSI_SAS_LIBSAS_DEBUG is not set + --- linux-2.6-3.0.0~rc6.orig/debian/config/mips/config.octeon +++ linux-2.6-3.0.0~rc6/debian/config/mips/config.octeon @@ -0,0 +1,133 @@ +## +## file: arch/mips/Kconfig +## +## choice: System type +CONFIG_CAVIUM_OCTEON_REFERENCE_BOARD=y +## end choice +# CONFIG_HOTPLUG_CPU is not set +## choice: Kernel code model +# CONFIG_32BIT is not set +CONFIG_64BIT=y +## end choice +CONFIG_SMP=y +CONFIG_PCI=y +CONFIG_MIPS32_COMPAT=y +CONFIG_MIPS32_O32=y +CONFIG_MIPS32_N32=y + +## +## file: arch/mips/cavium-octeon/Kconfig +## +# CONFIG_CAVIUM_OCTEON_2ND_KERNEL is not set +CONFIG_CAVIUM_OCTEON_HW_FIX_UNALIGNED=y +CONFIG_CAVIUM_OCTEON_CVMSEG_SIZE=1 +CONFIG_CAVIUM_OCTEON_LOCK_L2=y +CONFIG_CAVIUM_OCTEON_LOCK_L2_TLB=y +CONFIG_CAVIUM_OCTEON_LOCK_L2_EXCEPTION=y +CONFIG_CAVIUM_OCTEON_LOCK_L2_LOW_LEVEL_INTERRUPT=y +CONFIG_CAVIUM_OCTEON_LOCK_L2_INTERRUPT=y +CONFIG_CAVIUM_OCTEON_LOCK_L2_MEMCPY=y + +## +## file: drivers/ata/Kconfig +## +CONFIG_ATA=y +CONFIG_ATA_SFF=y +CONFIG_PATA_OCTEON_CF=y + +## +## file: drivers/i2c/Kconfig +## +CONFIG_I2C=y + +## +## file: drivers/i2c/busses/Kconfig +## +CONFIG_I2C_OCTEON=y + +## +## file: drivers/input/keyboard/Kconfig +## +CONFIG_INPUT_KEYBOARD=y +CONFIG_KEYBOARD_ATKBD=y + +## +## file: drivers/input/mouse/Kconfig +## +CONFIG_INPUT_MOUSE=y +CONFIG_MOUSE_PS2=y + +## +## file: drivers/mtd/Kconfig +## +CONFIG_MTD=y +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y + +## +## file: drivers/mtd/chips/Kconfig +## +CONFIG_MTD_CFI=y +CONFIG_MTD_CFI_AMDSTD=y + +## +## file: drivers/mtd/maps/Kconfig +## +CONFIG_MTD_PHYSMAP=y + +## +## file: drivers/net/octeon/Kconfig +## +CONFIG_OCTEON_MGMT_ETHERNET=m + +## +## file: drivers/rtc/Kconfig +## +CONFIG_RTC_DRV_DS1307=y + +## +## file: drivers/scsi/Kconfig +## +CONFIG_SCSI=y +CONFIG_BLK_DEV_SD=y + +## +## file: drivers/scsi/megaraid/Kconfig.megaraid +## +CONFIG_MEGARAID_SAS=y + +## +## file: drivers/staging/octeon/Kconfig +## +CONFIG_OCTEON_ETHERNET=m + +## +## file: drivers/tty/serial/Kconfig +## +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_SERIAL_8250_NR_UARTS=2 +CONFIG_SERIAL_8250_RUNTIME_UARTS=2 + +## +## file: fs/ext2/Kconfig +## +CONFIG_EXT2_FS=y + +## +## file: fs/ext3/Kconfig +## +CONFIG_EXT3_FS=y + +## +## file: mm/Kconfig +## +## choice: Memory model +CONFIG_SPARSEMEM_MANUAL=y +## end choice + +## +## file: unknown +## +CONFIG_CAVIUM_OCTEON_SPECIFIC_OPTIONS=y + --- linux-2.6-3.0.0~rc6.orig/debian/config/mips/config.r5k-ip32 +++ linux-2.6-3.0.0~rc6/debian/config/mips/config.r5k-ip32 @@ -0,0 +1,683 @@ +## +## file: arch/Kconfig +## +# CONFIG_OPROFILE is not set + +## +## file: arch/mips/Kconfig +## +## choice: System type +# CONFIG_MIPS_COBALT is not set +# CONFIG_MACH_DECSTATION is not set +# CONFIG_MACH_JAZZ is not set +# CONFIG_LASAT is not set +# CONFIG_MIPS_MALTA is not set +# CONFIG_MIPS_SIM is not set +# CONFIG_MACH_VR41XX is not set +# CONFIG_PNX8550_JBS is not set +# CONFIG_PMC_YOSEMITE is not set +# CONFIG_SGI_IP22 is not set +# CONFIG_SGI_IP27 is not set +CONFIG_SGI_IP32=y +# CONFIG_SIBYTE_CRHINE is not set +# CONFIG_SIBYTE_CARMEL is not set +# CONFIG_SIBYTE_CRHONE is not set +# CONFIG_SIBYTE_RHONE is not set +# CONFIG_SIBYTE_SWARM is not set +# CONFIG_SIBYTE_LITTLESUR is not set +# CONFIG_SIBYTE_SENTOSA is not set +# CONFIG_SIBYTE_BIGSUR is not set +## end choice +## choice: CPU type +# CONFIG_CPU_MIPS32_R1 is not set +# CONFIG_CPU_MIPS32_R2 is not set +# CONFIG_CPU_MIPS64_R1 is not set +# CONFIG_CPU_MIPS64_R2 is not set +# CONFIG_CPU_R3000 is not set +# CONFIG_CPU_TX39XX is not set +# CONFIG_CPU_VR41XX is not set +# CONFIG_CPU_R4300 is not set +# CONFIG_CPU_R4X00 is not set +# CONFIG_CPU_TX49XX is not set +CONFIG_CPU_R5000=y +# CONFIG_CPU_R5432 is not set +# CONFIG_CPU_R6000 is not set +# CONFIG_CPU_NEVADA is not set +# CONFIG_CPU_R8000 is not set +# CONFIG_CPU_R10000 is not set +# CONFIG_CPU_RM7000 is not set +# CONFIG_CPU_RM9000 is not set +# CONFIG_CPU_SB1 is not set +## end choice +## choice: Kernel code model +# CONFIG_32BIT is not set +CONFIG_64BIT=y +## end choice +## choice: Kernel page size +CONFIG_PAGE_SIZE_4KB=y +# CONFIG_PAGE_SIZE_8KB is not set +# CONFIG_PAGE_SIZE_16KB is not set +# CONFIG_PAGE_SIZE_64KB is not set +## end choice +CONFIG_PCI=y +CONFIG_MIPS32_COMPAT=y +CONFIG_MIPS32_O32=y +CONFIG_MIPS32_N32=y + +## +## file: arch/mips/alchemy/Kconfig +## +## choice: Machine type +# CONFIG_MIPS_MTX1 is not set +# CONFIG_MIPS_BOSPORUS is not set +# CONFIG_MIPS_DB1000 is not set +# CONFIG_MIPS_DB1100 is not set +# CONFIG_MIPS_DB1200 is not set +# CONFIG_MIPS_DB1500 is not set +# CONFIG_MIPS_DB1550 is not set +# CONFIG_MIPS_MIRAGE is not set +# CONFIG_MIPS_PB1000 is not set +# CONFIG_MIPS_PB1100 is not set +# CONFIG_MIPS_PB1200 is not set +# CONFIG_MIPS_PB1500 is not set +# CONFIG_MIPS_PB1550 is not set +# CONFIG_MIPS_XXS1500 is not set +## end choice + +## +## file: arch/mips/Kconfig.debug +## +CONFIG_CMDLINE="" + +## +## file: arch/mips/txx9/Kconfig +## +# CONFIG_TOSHIBA_JMR3927 is not set +# CONFIG_TOSHIBA_RBTX4927 is not set +# CONFIG_TOSHIBA_RBTX4938 is not set + +## +## file: drivers/ata/Kconfig +## +# CONFIG_ATA is not set + +## +## file: drivers/block/Kconfig +## +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_COUNT=16 +CONFIG_BLK_DEV_RAM_SIZE=8192 +# CONFIG_CDROM_PKTCDVD is not set + +## +## file: drivers/char/Kconfig +## +CONFIG_PRINTER=m +# CONFIG_LP_CONSOLE is not set +# CONFIG_PPDEV is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set +# CONFIG_TELCLOCK is not set + +## +## file: drivers/char/ipmi/Kconfig +## +# CONFIG_IPMI_HANDLER is not set + +## +## file: drivers/char/tpm/Kconfig +## +# CONFIG_TCG_TPM is not set + +## +## file: drivers/firewire/Kconfig +## +# CONFIG_FIREWIRE is not set + +## +## file: drivers/gpu/drm/Kconfig +## +# CONFIG_DRM is not set + +## +## file: drivers/hid/usbhid/Kconfig +## +CONFIG_USB_KBD=m +CONFIG_USB_MOUSE=m + +## +## file: drivers/hwmon/Kconfig +## +CONFIG_HWMON=y +# CONFIG_HWMON_DEBUG_CHIP is not set +# CONFIG_SENSORS_ADM1021 is not set +# CONFIG_SENSORS_ADM1025 is not set +# CONFIG_SENSORS_ADM1026 is not set +# CONFIG_SENSORS_ADM1031 is not set +# CONFIG_SENSORS_ADM9240 is not set +# CONFIG_SENSORS_ASB100 is not set +# CONFIG_SENSORS_ATXP1 is not set +# CONFIG_SENSORS_DS1621 is not set +# CONFIG_SENSORS_F71805F is not set +# CONFIG_SENSORS_GL518SM is not set +# CONFIG_SENSORS_GL520SM is not set +# CONFIG_SENSORS_IT87 is not set +# CONFIG_SENSORS_LM63 is not set +# CONFIG_SENSORS_LM75 is not set +# CONFIG_SENSORS_LM77 is not set +# CONFIG_SENSORS_LM78 is not set +# CONFIG_SENSORS_LM80 is not set +# CONFIG_SENSORS_LM83 is not set +# CONFIG_SENSORS_LM85 is not set +# CONFIG_SENSORS_LM87 is not set +# CONFIG_SENSORS_LM90 is not set +# CONFIG_SENSORS_LM92 is not set +# CONFIG_SENSORS_MAX1619 is not set +# CONFIG_SENSORS_PC87360 is not set +# CONFIG_SENSORS_PCF8591 is not set +# CONFIG_SENSORS_SIS5595 is not set +# CONFIG_SENSORS_SMSC47M1 is not set +# CONFIG_SENSORS_SMSC47B397 is not set +# CONFIG_SENSORS_VIA686A is not set +# CONFIG_SENSORS_VT8231 is not set +# CONFIG_SENSORS_W83781D is not set +# CONFIG_SENSORS_W83792D is not set +# CONFIG_SENSORS_W83L785TS is not set +# CONFIG_SENSORS_W83627HF is not set +# CONFIG_SENSORS_W83627EHF is not set + +## +## file: drivers/i2c/Kconfig +## +CONFIG_I2C=m +CONFIG_I2C_CHARDEV=m +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set + +## +## file: drivers/i2c/busses/Kconfig +## +# CONFIG_I2C_ALI1535 is not set +# CONFIG_I2C_ALI1563 is not set +# CONFIG_I2C_ALI15X3 is not set +# CONFIG_I2C_AMD756 is not set +# CONFIG_I2C_AMD8111 is not set +# CONFIG_I2C_I801 is not set +# CONFIG_I2C_PIIX4 is not set +# CONFIG_I2C_NFORCE2 is not set +# CONFIG_I2C_SIS5595 is not set +# CONFIG_I2C_SIS630 is not set +# CONFIG_I2C_SIS96X is not set +# CONFIG_I2C_VIA is not set +# CONFIG_I2C_VIAPRO is not set +# CONFIG_I2C_PARPORT is not set +# CONFIG_I2C_PARPORT_LIGHT is not set +# CONFIG_I2C_PCA_ISA is not set +# CONFIG_I2C_STUB is not set +# CONFIG_SCx200_ACB is not set + +## +## file: drivers/ide/Kconfig +## +# CONFIG_IDE is not set + +## +## file: drivers/infiniband/Kconfig +## +# CONFIG_INFINIBAND is not set + +## +## file: drivers/input/Kconfig +## +# CONFIG_INPUT_JOYDEV is not set + +## +## file: drivers/input/gameport/Kconfig +## +# CONFIG_GAMEPORT is not set + +## +## file: drivers/input/joystick/Kconfig +## +# CONFIG_INPUT_JOYSTICK is not set + +## +## file: drivers/input/keyboard/Kconfig +## +CONFIG_INPUT_KEYBOARD=y +CONFIG_KEYBOARD_ATKBD=y +# CONFIG_KEYBOARD_LKKBD is not set +# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set + +## +## file: drivers/input/misc/Kconfig +## +CONFIG_INPUT_MISC=y + +## +## file: drivers/input/mouse/Kconfig +## +CONFIG_INPUT_MOUSE=y +CONFIG_MOUSE_PS2=y +# CONFIG_MOUSE_SERIAL is not set +# CONFIG_MOUSE_VSXXXAA is not set + +## +## file: drivers/input/serio/Kconfig +## +CONFIG_SERIO=y +# CONFIG_SERIO_I8042 is not set +CONFIG_SERIO_SERPORT=y +# CONFIG_SERIO_PARKBD is not set +# CONFIG_SERIO_PCIPS2 is not set +CONFIG_SERIO_MACEPS2=y +CONFIG_SERIO_LIBPS2=y +CONFIG_SERIO_RAW=y + +## +## file: drivers/input/touchscreen/Kconfig +## +# CONFIG_INPUT_TOUCHSCREEN is not set + +## +## file: drivers/media/radio/Kconfig +## +# CONFIG_RADIO_MAXIRADIO is not set + +## +## file: drivers/media/video/Kconfig +## +# CONFIG_VIDEO_ADV_DEBUG is not set +# CONFIG_VIDEO_BWQCAM is not set +# CONFIG_VIDEO_CQCAM is not set +# CONFIG_VIDEO_W9966 is not set +# CONFIG_VIDEO_MXB is not set +# CONFIG_VIDEO_HEXIUM_ORION is not set +# CONFIG_VIDEO_HEXIUM_GEMINI is not set + +## +## file: drivers/media/video/bt8xx/Kconfig +## +# CONFIG_VIDEO_BT848 is not set + +## +## file: drivers/media/video/cx88/Kconfig +## +# CONFIG_VIDEO_CX88 is not set + +## +## file: drivers/media/video/saa7134/Kconfig +## +# CONFIG_VIDEO_SAA7134 is not set + +## +## file: drivers/message/fusion/Kconfig +## +# CONFIG_FUSION is not set +# CONFIG_FUSION_SPI is not set +# CONFIG_FUSION_FC is not set +# CONFIG_FUSION_SAS is not set + +## +## file: drivers/message/i2o/Kconfig +## +# CONFIG_I2O is not set + +## +## file: drivers/mmc/Kconfig +## +# CONFIG_MMC is not set + +## +## file: drivers/mtd/Kconfig +## +# CONFIG_MTD is not set + +## +## file: drivers/net/Kconfig +## +CONFIG_SGI_O2MACE_ETH=y +# CONFIG_HAPPYMEAL is not set +# CONFIG_SUNGEM is not set +# CONFIG_CASSINI is not set +# CONFIG_NET_VENDOR_3COM is not set +# CONFIG_DM9000 is not set +CONFIG_NET_PCI=y +CONFIG_E100=m +# CONFIG_DL2K is not set +# CONFIG_E1000 is not set +# CONFIG_NS83820 is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_SIS190 is not set +# CONFIG_SKGE is not set +# CONFIG_SKY2 is not set +# CONFIG_TIGON3 is not set +# CONFIG_BNX2 is not set +# CONFIG_CHELSIO_T1 is not set +# CONFIG_IXGB is not set +# CONFIG_S2IO is not set +# CONFIG_BNX2X is not set + +## +## file: drivers/net/arcnet/Kconfig +## +# CONFIG_ARCNET is not set + +## +## file: drivers/net/phy/Kconfig +## +# CONFIG_PHYLIB is not set + +## +## file: drivers/net/tokenring/Kconfig +## +# CONFIG_TR is not set + +## +## file: drivers/net/tulip/Kconfig +## +CONFIG_NET_TULIP=y +CONFIG_DE2104X=m +CONFIG_TULIP=m +CONFIG_DE4X5=m +CONFIG_WINBOND_840=m +CONFIG_DM9102=m +CONFIG_ULI526X=m + +## +## file: drivers/parport/Kconfig +## +CONFIG_PARPORT_IP32=m + +## +## file: drivers/pci/hotplug/Kconfig +## +# CONFIG_HOTPLUG_PCI is not set + +## +## file: drivers/pcmcia/Kconfig +## +# CONFIG_PCCARD is not set + +## +## file: drivers/rtc/Kconfig +## +CONFIG_RTC_DRV_CMOS=y + +## +## file: drivers/scsi/Kconfig +## +CONFIG_SCSI=y +CONFIG_BLK_DEV_SD=y +# CONFIG_CHR_DEV_OSST is not set +CONFIG_BLK_DEV_SR=y +# CONFIG_SCSI_LOGGING is not set +# CONFIG_BLK_DEV_3W_XXXX_RAID is not set +# CONFIG_SCSI_3W_9XXX is not set +# CONFIG_SCSI_ACARD is not set +# CONFIG_SCSI_AACRAID is not set +# CONFIG_SCSI_AIC7XXX_OLD is not set +# CONFIG_SCSI_DMX3191D is not set +# CONFIG_SCSI_FUTURE_DOMAIN is not set +# CONFIG_SCSI_IPS is not set +# CONFIG_SCSI_INITIO is not set +# CONFIG_SCSI_INIA100 is not set +# CONFIG_SCSI_SYM53C8XX_2 is not set +# CONFIG_SCSI_IPR is not set +# CONFIG_SCSI_QLOGIC_1280 is not set +# CONFIG_SCSI_LPFC is not set +# CONFIG_SCSI_DC395x is not set +# CONFIG_SCSI_DC390T is not set + +## +## file: drivers/scsi/aic7xxx/Kconfig.aic79xx +## +# CONFIG_SCSI_AIC79XX is not set + +## +## file: drivers/scsi/aic7xxx/Kconfig.aic7xxx +## +CONFIG_SCSI_AIC7XXX=y +CONFIG_AIC7XXX_CMDS_PER_DEVICE=32 +CONFIG_AIC7XXX_RESET_DELAY_MS=15000 +CONFIG_AIC7XXX_DEBUG_ENABLE=y +CONFIG_AIC7XXX_DEBUG_MASK=0 +CONFIG_AIC7XXX_REG_PRETTY_PRINT=y + +## +## file: drivers/scsi/megaraid/Kconfig.megaraid +## +# CONFIG_MEGARAID_NEWGEN is not set +# CONFIG_MEGARAID_LEGACY is not set +# CONFIG_MEGARAID_SAS is not set + +## +## file: drivers/scsi/qla2xxx/Kconfig +## +# CONFIG_SCSI_QLA_FC is not set + +## +## file: drivers/spi/Kconfig +## +CONFIG_SPI=y +CONFIG_SPI_BITBANG=m +CONFIG_SPI_BUTTERFLY=m + +## +## file: drivers/telephony/Kconfig +## +# CONFIG_PHONE is not set + +## +## file: drivers/tty/Kconfig +## +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +# CONFIG_SERIAL_NONSTANDARD is not set + +## +## file: drivers/tty/serial/Kconfig +## +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_SERIAL_8250_NR_UARTS=4 +CONFIG_SERIAL_8250_RUNTIME_UARTS=4 +# CONFIG_SERIAL_8250_EXTENDED is not set +# CONFIG_SERIAL_JSM is not set + +## +## file: drivers/usb/Kconfig +## +CONFIG_USB=m + +## +## file: drivers/usb/host/Kconfig +## +CONFIG_USB_EHCI_HCD=m +CONFIG_USB_OHCI_HCD=m +CONFIG_USB_UHCI_HCD=m + +## +## file: drivers/video/Kconfig +## +CONFIG_FB=y +# CONFIG_FB_MODE_HELPERS is not set +# CONFIG_FB_TILEBLITTING is not set +# CONFIG_FB_CIRRUS is not set +# CONFIG_FB_PM2 is not set +# CONFIG_FB_CYBER2000 is not set +# CONFIG_FB_ASILIANT is not set +# CONFIG_FB_IMSTT is not set +CONFIG_FB_GBE=y +CONFIG_FB_GBE_MEM=4 +# CONFIG_FB_S1D13XXX is not set +# CONFIG_FB_NVIDIA is not set +# CONFIG_FB_RIVA is not set +# CONFIG_FB_MATROX is not set +# CONFIG_FB_RADEON is not set +# CONFIG_FB_ATY128 is not set +# CONFIG_FB_ATY is not set +# CONFIG_FB_SAVAGE is not set +# CONFIG_FB_SIS is not set +# CONFIG_FB_NEOMAGIC is not set +# CONFIG_FB_KYRO is not set +# CONFIG_FB_3DFX is not set +# CONFIG_FB_VOODOO1 is not set +# CONFIG_FB_TRIDENT is not set +# CONFIG_FB_VIRTUAL is not set + +## +## file: drivers/video/console/Kconfig +## +# CONFIG_VGA_CONSOLE is not set +CONFIG_FRAMEBUFFER_CONSOLE=y +# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set +# CONFIG_FONTS is not set +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y + +## +## file: drivers/video/logo/Kconfig +## +CONFIG_LOGO=y +# CONFIG_LOGO_LINUX_MONO is not set +# CONFIG_LOGO_LINUX_VGA16 is not set +# CONFIG_LOGO_LINUX_CLUT224 is not set +CONFIG_LOGO_SGI_CLUT224=y + +## +## file: drivers/w1/Kconfig +## +# CONFIG_W1 is not set + +## +## file: drivers/watchdog/Kconfig +## +# CONFIG_PCIPCWATCHDOG is not set +# CONFIG_WDTPCI is not set + +## +## file: fs/cramfs/Kconfig +## +CONFIG_CRAMFS=y + +## +## file: fs/ext2/Kconfig +## +CONFIG_EXT2_FS=y + +## +## file: fs/ext3/Kconfig +## +CONFIG_EXT3_FS=y + +## +## file: fs/partitions/Kconfig +## +CONFIG_SGI_PARTITION=y +CONFIG_KARMA_PARTITION=y + +## +## file: init/Kconfig +## +# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set + +## +## file: mm/Kconfig +## +## choice: Memory model +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +## end choice + +## +## file: net/ipv4/Kconfig +## +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +CONFIG_IP_PNP_BOOTP=y + +## +## file: sound/drivers/Kconfig +## +# CONFIG_SND_DUMMY is not set +# CONFIG_SND_MTPAV is not set +# CONFIG_SND_SERIAL_U16550 is not set +# CONFIG_SND_MPU401 is not set + +## +## file: sound/mips/Kconfig +## +CONFIG_SND_MIPS=y +CONFIG_SND_SGI_O2=m + +## +## file: sound/pci/Kconfig +## +# CONFIG_SND_AD1889 is not set +# CONFIG_SND_ALI5451 is not set +# CONFIG_SND_ATIIXP is not set +# CONFIG_SND_ATIIXP_MODEM is not set +# CONFIG_SND_AU8810 is not set +# CONFIG_SND_AU8820 is not set +# CONFIG_SND_AU8830 is not set +# CONFIG_SND_AZT3328 is not set +# CONFIG_SND_BT87X is not set +CONFIG_SND_BT87X_OVERCLOCK=y +# CONFIG_SND_CA0106 is not set +# CONFIG_SND_CMIPCI is not set +# CONFIG_SND_CS4281 is not set +# CONFIG_SND_CS46XX is not set +CONFIG_SND_CS46XX_NEW_DSP=y +# CONFIG_SND_EMU10K1 is not set +# CONFIG_SND_EMU10K1X is not set +# CONFIG_SND_ENS1370 is not set +# CONFIG_SND_ENS1371 is not set +# CONFIG_SND_ES1938 is not set +# CONFIG_SND_ES1968 is not set +# CONFIG_SND_FM801 is not set +CONFIG_SND_FM801_TEA575X_BOOL=y +# CONFIG_SND_HDSP is not set +# CONFIG_SND_HDSPM is not set +# CONFIG_SND_ICE1712 is not set +# CONFIG_SND_ICE1724 is not set +# CONFIG_SND_INTEL8X0 is not set +# CONFIG_SND_INTEL8X0M is not set +CONFIG_SND_KORG1212=m +# CONFIG_SND_MAESTRO3 is not set +# CONFIG_SND_MIXART is not set +# CONFIG_SND_NM256 is not set +# CONFIG_SND_PCXHR is not set +# CONFIG_SND_RME32 is not set +# CONFIG_SND_RME96 is not set +# CONFIG_SND_RME9652 is not set +# CONFIG_SND_SONICVIBES is not set +# CONFIG_SND_TRIDENT is not set +# CONFIG_SND_VIA82XX is not set +# CONFIG_SND_VIA82XX_MODEM is not set +# CONFIG_SND_VX222 is not set +# CONFIG_SND_YMFPCI is not set + +## +## file: sound/pci/hda/Kconfig +## +# CONFIG_SND_HDA_INTEL is not set + +## +## file: unknown +## +CONFIG_INPUT_SGIO2_BTNS=m +# CONFIG_MIPS_ATLAS is not set +# CONFIG_MIPS_SEAD is not set +# CONFIG_VIDEO_CPIA is not set +# CONFIG_VIDEO_OVCAMCHIP is not set +# CONFIG_VIDEO_SAA5246A is not set +# CONFIG_VIDEO_SAA5249 is not set +# CONFIG_VIDEO_STRADIS is not set + --- linux-2.6-3.0.0~rc6.orig/debian/config/mips/config.sb1-bcm91250a +++ linux-2.6-3.0.0~rc6/debian/config/mips/config.sb1-bcm91250a @@ -0,0 +1,768 @@ +## +## file: arch/Kconfig +## +# CONFIG_OPROFILE is not set + +## +## file: arch/mips/Kconfig +## +## choice: System type +# CONFIG_MIPS_COBALT is not set +# CONFIG_MACH_DECSTATION is not set +# CONFIG_MACH_JAZZ is not set +# CONFIG_LASAT is not set +# CONFIG_MIPS_MALTA is not set +# CONFIG_MIPS_SIM is not set +# CONFIG_MACH_VR41XX is not set +# CONFIG_PNX8550_JBS is not set +# CONFIG_PMC_YOSEMITE is not set +# CONFIG_SGI_IP22 is not set +# CONFIG_SGI_IP27 is not set +# CONFIG_SGI_IP32 is not set +# CONFIG_SIBYTE_CRHINE is not set +# CONFIG_SIBYTE_CARMEL is not set +# CONFIG_SIBYTE_CRHONE is not set +# CONFIG_SIBYTE_RHONE is not set +CONFIG_SIBYTE_SWARM=y +# CONFIG_SIBYTE_LITTLESUR is not set +# CONFIG_SIBYTE_SENTOSA is not set +# CONFIG_SIBYTE_BIGSUR is not set +## end choice +## choice: CPU type +# CONFIG_CPU_MIPS32_R1 is not set +# CONFIG_CPU_MIPS32_R2 is not set +# CONFIG_CPU_MIPS64_R1 is not set +# CONFIG_CPU_MIPS64_R2 is not set +# CONFIG_CPU_R3000 is not set +# CONFIG_CPU_TX39XX is not set +# CONFIG_CPU_VR41XX is not set +# CONFIG_CPU_R4300 is not set +# CONFIG_CPU_R4X00 is not set +# CONFIG_CPU_TX49XX is not set +# CONFIG_CPU_R5000 is not set +# CONFIG_CPU_R5432 is not set +# CONFIG_CPU_R6000 is not set +# CONFIG_CPU_NEVADA is not set +# CONFIG_CPU_R8000 is not set +# CONFIG_CPU_R10000 is not set +# CONFIG_CPU_RM7000 is not set +# CONFIG_CPU_RM9000 is not set +CONFIG_CPU_SB1=y +## end choice +## choice: Kernel code model +# CONFIG_32BIT is not set +CONFIG_64BIT=y +## end choice +## choice: Kernel page size +CONFIG_PAGE_SIZE_4KB=y +# CONFIG_PAGE_SIZE_8KB is not set +# CONFIG_PAGE_SIZE_16KB is not set +# CONFIG_PAGE_SIZE_64KB is not set +## end choice +# CONFIG_SIBYTE_DMA_PAGEOPS is not set +CONFIG_SMP=y +CONFIG_NR_CPUS=2 +CONFIG_PCI=y +CONFIG_MIPS32_COMPAT=y +CONFIG_MIPS32_O32=y +CONFIG_MIPS32_N32=y + +## +## file: arch/mips/alchemy/Kconfig +## +## choice: Machine type +# CONFIG_MIPS_MTX1 is not set +# CONFIG_MIPS_BOSPORUS is not set +# CONFIG_MIPS_DB1000 is not set +# CONFIG_MIPS_DB1100 is not set +# CONFIG_MIPS_DB1200 is not set +# CONFIG_MIPS_DB1500 is not set +# CONFIG_MIPS_DB1550 is not set +# CONFIG_MIPS_MIRAGE is not set +# CONFIG_MIPS_PB1000 is not set +# CONFIG_MIPS_PB1100 is not set +# CONFIG_MIPS_PB1200 is not set +# CONFIG_MIPS_PB1500 is not set +# CONFIG_MIPS_PB1550 is not set +# CONFIG_MIPS_XXS1500 is not set +## end choice + +## +## file: arch/mips/Kconfig.debug +## +CONFIG_CMDLINE="" +# CONFIG_SB1XXX_CORELIS is not set + +## +## file: arch/mips/sibyte/Kconfig +## +## choice: SiByte SOC Stepping +# CONFIG_CPU_SB1_PASS_1 is not set +# CONFIG_CPU_SB1_PASS_2_1250 is not set +CONFIG_CPU_SB1_PASS_2_2=y +# CONFIG_CPU_SB1_PASS_4 is not set +# CONFIG_CPU_SB1_PASS_2_112x is not set +# CONFIG_CPU_SB1_PASS_3 is not set +## end choice +# CONFIG_SB1_CEX_ALWAYS_FATAL is not set +# CONFIG_SB1_CERR_STALL is not set +# CONFIG_SIBYTE_CFE_CONSOLE is not set +# CONFIG_SIBYTE_BUS_WATCHER is not set +# CONFIG_SIBYTE_TBPROF is not set + +## +## file: arch/mips/txx9/Kconfig +## +# CONFIG_TOSHIBA_JMR3927 is not set +# CONFIG_TOSHIBA_RBTX4927 is not set +# CONFIG_TOSHIBA_RBTX4938 is not set + +## +## file: drivers/ata/Kconfig +## +CONFIG_ATA=y +CONFIG_SATA_AHCI=m +CONFIG_SATA_SIL24=m +CONFIG_PDC_ADMA=m +CONFIG_SATA_QSTOR=m +CONFIG_SATA_SX4=m +CONFIG_ATA_PIIX=m +CONFIG_SATA_MV=m +CONFIG_SATA_NV=m +CONFIG_SATA_PROMISE=m +CONFIG_SATA_SIL=m +CONFIG_SATA_SIS=m +CONFIG_SATA_SVW=m +CONFIG_SATA_ULI=m +CONFIG_SATA_VIA=m +CONFIG_SATA_VITESSE=m +CONFIG_PATA_ALI=m +CONFIG_PATA_AMD=m +CONFIG_PATA_CMD64X=m +CONFIG_PATA_CS5530=m +CONFIG_PATA_CYPRESS=y +CONFIG_PATA_EFAR=m +CONFIG_PATA_NS87415=m +CONFIG_PATA_OLDPIIX=m +CONFIG_PATA_PDC2027X=m +CONFIG_PATA_PDC_OLD=m +CONFIG_PATA_SC1200=m +CONFIG_PATA_SERVERWORKS=m +CONFIG_PATA_SIL680=m +CONFIG_PATA_TRIFLEX=m +CONFIG_PATA_VIA=m +CONFIG_PATA_MPIIX=m +CONFIG_PATA_PLATFORM=y + +## +## file: drivers/block/Kconfig +## +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_UMEM is not set +# CONFIG_BLK_DEV_SX8 is not set +# CONFIG_BLK_DEV_UB is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_COUNT=16 +CONFIG_BLK_DEV_RAM_SIZE=8192 +# CONFIG_CDROM_PKTCDVD is not set + +## +## file: drivers/char/Kconfig +## +CONFIG_PRINTER=m +# CONFIG_LP_CONSOLE is not set +# CONFIG_PPDEV is not set +CONFIG_RTC=m +CONFIG_GEN_RTC=y +CONFIG_GEN_RTC_X=y +# CONFIG_DTLK is not set +# CONFIG_APPLICOM is not set +# CONFIG_TELCLOCK is not set + +## +## file: drivers/char/ipmi/Kconfig +## +# CONFIG_IPMI_HANDLER is not set + +## +## file: drivers/char/tpm/Kconfig +## +# CONFIG_TCG_TPM is not set + +## +## file: drivers/firewire/Kconfig +## +# CONFIG_FIREWIRE is not set + +## +## file: drivers/gpu/drm/Kconfig +## +# CONFIG_DRM is not set + +## +## file: drivers/hid/usbhid/Kconfig +## +CONFIG_USB_HID=m +# CONFIG_USB_KBD is not set +# CONFIG_USB_MOUSE is not set + +## +## file: drivers/hwmon/Kconfig +## +CONFIG_HWMON=y +# CONFIG_HWMON_DEBUG_CHIP is not set +# CONFIG_SENSORS_ASB100 is not set +# CONFIG_SENSORS_ATXP1 is not set +# CONFIG_SENSORS_DS1621 is not set +# CONFIG_SENSORS_F71805F is not set +# CONFIG_SENSORS_GL518SM is not set +# CONFIG_SENSORS_GL520SM is not set +# CONFIG_SENSORS_IT87 is not set +# CONFIG_SENSORS_LM63 is not set +# CONFIG_SENSORS_LM75 is not set +# CONFIG_SENSORS_LM77 is not set +# CONFIG_SENSORS_LM78 is not set +# CONFIG_SENSORS_LM80 is not set +# CONFIG_SENSORS_LM83 is not set +# CONFIG_SENSORS_LM85 is not set +# CONFIG_SENSORS_LM87 is not set +# CONFIG_SENSORS_LM90 is not set +# CONFIG_SENSORS_LM92 is not set +# CONFIG_SENSORS_MAX1619 is not set +# CONFIG_SENSORS_PC87360 is not set +# CONFIG_SENSORS_PCF8591 is not set +# CONFIG_SENSORS_SIS5595 is not set +# CONFIG_SENSORS_SMSC47M1 is not set +# CONFIG_SENSORS_SMSC47B397 is not set +# CONFIG_SENSORS_VIA686A is not set +CONFIG_SENSORS_VT8231=m +# CONFIG_SENSORS_W83781D is not set +# CONFIG_SENSORS_W83792D is not set +# CONFIG_SENSORS_W83L785TS is not set +# CONFIG_SENSORS_W83627HF is not set +# CONFIG_SENSORS_W83627EHF is not set + +## +## file: drivers/i2c/Kconfig +## +CONFIG_I2C=m +CONFIG_I2C_CHARDEV=m +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set + +## +## file: drivers/i2c/busses/Kconfig +## +# CONFIG_I2C_ALI1535 is not set +# CONFIG_I2C_ALI1563 is not set +# CONFIG_I2C_ALI15X3 is not set +# CONFIG_I2C_AMD756 is not set +# CONFIG_I2C_AMD8111 is not set +# CONFIG_I2C_I801 is not set +# CONFIG_I2C_PIIX4 is not set +# CONFIG_I2C_NFORCE2 is not set +# CONFIG_I2C_SIS5595 is not set +# CONFIG_I2C_SIS630 is not set +# CONFIG_I2C_SIS96X is not set +# CONFIG_I2C_VIA is not set +# CONFIG_I2C_VIAPRO is not set +# CONFIG_I2C_PARPORT is not set +# CONFIG_I2C_PARPORT_LIGHT is not set +# CONFIG_I2C_PCA_ISA is not set +CONFIG_I2C_SIBYTE=m +CONFIG_I2C_STUB=m +# CONFIG_SCx200_ACB is not set + +## +## file: drivers/ide/Kconfig +## +# CONFIG_IDE is not set + +## +## file: drivers/infiniband/Kconfig +## +# CONFIG_INFINIBAND is not set + +## +## file: drivers/input/Kconfig +## +# CONFIG_INPUT_JOYDEV is not set + +## +## file: drivers/input/gameport/Kconfig +## +# CONFIG_GAMEPORT is not set + +## +## file: drivers/input/joystick/Kconfig +## +# CONFIG_INPUT_JOYSTICK is not set + +## +## file: drivers/input/keyboard/Kconfig +## +CONFIG_INPUT_KEYBOARD=y +CONFIG_KEYBOARD_ATKBD=y +# CONFIG_KEYBOARD_LKKBD is not set +# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set + +## +## file: drivers/input/misc/Kconfig +## +# CONFIG_INPUT_MISC is not set + +## +## file: drivers/input/mouse/Kconfig +## +CONFIG_INPUT_MOUSE=y +CONFIG_MOUSE_PS2=y +# CONFIG_MOUSE_SERIAL is not set +# CONFIG_MOUSE_VSXXXAA is not set + +## +## file: drivers/input/serio/Kconfig +## +CONFIG_SERIO=y +# CONFIG_SERIO_I8042 is not set +# CONFIG_SERIO_SERPORT is not set +# CONFIG_SERIO_PARKBD is not set +# CONFIG_SERIO_PCIPS2 is not set +CONFIG_SERIO_LIBPS2=y +# CONFIG_SERIO_RAW is not set + +## +## file: drivers/input/touchscreen/Kconfig +## +# CONFIG_INPUT_TOUCHSCREEN is not set + +## +## file: drivers/media/radio/Kconfig +## +# CONFIG_RADIO_MAXIRADIO is not set +# CONFIG_USB_DSBR is not set + +## +## file: drivers/media/video/Kconfig +## +# CONFIG_VIDEO_ADV_DEBUG is not set +# CONFIG_VIDEO_BWQCAM is not set +# CONFIG_VIDEO_CQCAM is not set +# CONFIG_VIDEO_W9966 is not set +# CONFIG_VIDEO_MXB is not set +# CONFIG_VIDEO_HEXIUM_ORION is not set +# CONFIG_VIDEO_HEXIUM_GEMINI is not set + +## +## file: drivers/media/video/bt8xx/Kconfig +## +# CONFIG_VIDEO_BT848 is not set + +## +## file: drivers/media/video/cx88/Kconfig +## +# CONFIG_VIDEO_CX88 is not set + +## +## file: drivers/media/video/em28xx/Kconfig +## +# CONFIG_VIDEO_EM28XX is not set + +## +## file: drivers/media/video/et61x251/Kconfig +## +CONFIG_USB_ET61X251=m + +## +## file: drivers/media/video/pwc/Kconfig +## +# CONFIG_USB_PWC is not set + +## +## file: drivers/media/video/saa7134/Kconfig +## +# CONFIG_VIDEO_SAA7134 is not set + +## +## file: drivers/media/video/sn9c102/Kconfig +## +# CONFIG_USB_SN9C102 is not set + +## +## file: drivers/media/video/zoran/Kconfig +## +# CONFIG_VIDEO_ZORAN is not set + +## +## file: drivers/message/fusion/Kconfig +## +# CONFIG_FUSION is not set +# CONFIG_FUSION_SPI is not set +# CONFIG_FUSION_FC is not set +# CONFIG_FUSION_SAS is not set + +## +## file: drivers/message/i2o/Kconfig +## +# CONFIG_I2O is not set + +## +## file: drivers/mmc/Kconfig +## +# CONFIG_MMC is not set + +## +## file: drivers/mtd/Kconfig +## +# CONFIG_MTD is not set + +## +## file: drivers/net/Kconfig +## +# CONFIG_HAPPYMEAL is not set +# CONFIG_SUNGEM is not set +# CONFIG_CASSINI is not set +# CONFIG_NET_VENDOR_3COM is not set +# CONFIG_DM9000 is not set +# CONFIG_HP100 is not set +CONFIG_NET_PCI=y +CONFIG_AMD8111_ETH=m +CONFIG_ADAPTEC_STARFIRE=m +CONFIG_B44=m +CONFIG_FORCEDETH=m +CONFIG_E100=m +CONFIG_FEALNX=m +CONFIG_NATSEMI=m +CONFIG_NE2K_PCI=m +CONFIG_8139CP=m +CONFIG_8139TOO=m +CONFIG_8139TOO_PIO=y +# CONFIG_8139TOO_TUNE_TWISTER is not set +CONFIG_8139TOO_8129=y +# CONFIG_8139_OLD_RX_RESET is not set +CONFIG_SIS900=m +CONFIG_EPIC100=m +CONFIG_SUNDANCE=m +# CONFIG_SUNDANCE_MMIO is not set +CONFIG_VIA_RHINE=m +# CONFIG_VIA_RHINE_MMIO is not set +# CONFIG_NET_POCKET is not set +CONFIG_NETDEV_1000=y +CONFIG_SB1250_MAC=y +# CONFIG_CHELSIO_T1 is not set +# CONFIG_IXGB is not set +# CONFIG_S2IO is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PLIP is not set +# CONFIG_NET_FC is not set + +## +## file: drivers/net/appletalk/Kconfig +## +# CONFIG_ATALK is not set + +## +## file: drivers/net/arcnet/Kconfig +## +# CONFIG_ARCNET is not set + +## +## file: drivers/net/phy/Kconfig +## +CONFIG_BROADCOM_PHY=y +# CONFIG_FIXED_PHY is not set + +## +## file: drivers/net/tokenring/Kconfig +## +# CONFIG_TR is not set + +## +## file: drivers/net/tulip/Kconfig +## +# CONFIG_NET_TULIP is not set + +## +## file: drivers/net/wan/Kconfig +## +# CONFIG_WAN is not set + +## +## file: drivers/pci/hotplug/Kconfig +## +# CONFIG_HOTPLUG_PCI is not set + +## +## file: drivers/pcmcia/Kconfig +## +# CONFIG_PCCARD is not set + +## +## file: drivers/scsi/Kconfig +## +CONFIG_SCSI=y +CONFIG_BLK_DEV_SD=y +# CONFIG_SCSI_MULTI_LUN is not set +# CONFIG_SCSI_CONSTANTS is not set +# CONFIG_SCSI_LOGGING is not set +# CONFIG_SCSI_SAS_ATTRS is not set +CONFIG_SCSI_DMX3191D=m +CONFIG_SCSI_FUTURE_DOMAIN=m +CONFIG_SCSI_IPS=m +CONFIG_SCSI_INITIO=m +CONFIG_SCSI_INIA100=m +CONFIG_SCSI_SYM53C8XX_2=m +CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1 +CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16 +CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 +# CONFIG_SCSI_IPR is not set +CONFIG_SCSI_QLOGIC_1280=m +CONFIG_SCSI_DC395x=m +CONFIG_SCSI_DC390T=m +CONFIG_SCSI_DEBUG=m + +## +## file: drivers/scsi/aic7xxx/Kconfig.aic79xx +## +CONFIG_SCSI_AIC79XX=m +CONFIG_AIC79XX_CMDS_PER_DEVICE=32 +CONFIG_AIC79XX_RESET_DELAY_MS=15000 +CONFIG_AIC79XX_DEBUG_ENABLE=y +CONFIG_AIC79XX_DEBUG_MASK=0 +CONFIG_AIC79XX_REG_PRETTY_PRINT=y + +## +## file: drivers/scsi/aic7xxx/Kconfig.aic7xxx +## +CONFIG_SCSI_AIC7XXX=y +CONFIG_AIC7XXX_CMDS_PER_DEVICE=32 +CONFIG_AIC7XXX_RESET_DELAY_MS=15000 +CONFIG_AIC7XXX_DEBUG_ENABLE=y +CONFIG_AIC7XXX_DEBUG_MASK=0 +CONFIG_AIC7XXX_REG_PRETTY_PRINT=y + +## +## file: drivers/scsi/megaraid/Kconfig.megaraid +## +# CONFIG_MEGARAID_NEWGEN is not set +CONFIG_MEGARAID_LEGACY=m +CONFIG_MEGARAID_SAS=m + +## +## file: drivers/scsi/qla2xxx/Kconfig +## +CONFIG_SCSI_QLA_FC=m + +## +## file: drivers/spi/Kconfig +## +CONFIG_SPI=y +CONFIG_SPI_BITBANG=m +CONFIG_SPI_BUTTERFLY=m + +## +## file: drivers/telephony/Kconfig +## +# CONFIG_PHONE is not set + +## +## file: drivers/tty/Kconfig +## +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +# CONFIG_SERIAL_NONSTANDARD is not set + +## +## file: drivers/tty/serial/Kconfig +## +# CONFIG_SERIAL_8250 is not set +CONFIG_SERIAL_SB1250_DUART=y +CONFIG_SERIAL_SB1250_DUART_CONSOLE=y +# CONFIG_SERIAL_JSM is not set + +## +## file: drivers/usb/Kconfig +## +CONFIG_USB=m +# CONFIG_USB_USS720 is not set + +## +## file: drivers/usb/host/Kconfig +## +CONFIG_USB_EHCI_HCD=m +# CONFIG_USB_EHCI_ROOT_HUB_TT is not set +CONFIG_USB_ISP116X_HCD=m +CONFIG_USB_OHCI_HCD=m +CONFIG_USB_UHCI_HCD=m +CONFIG_USB_SL811_HCD=m + +## +## file: drivers/usb/mon/Kconfig +## +CONFIG_USB_MON=y + +## +## file: drivers/video/Kconfig +## +CONFIG_FB=y +CONFIG_FB_MODE_HELPERS=y +CONFIG_FB_TILEBLITTING=y +# CONFIG_FB_CIRRUS is not set +CONFIG_FB_PM2=m +# CONFIG_FB_PM2_FIFO_DISCONNECT is not set +CONFIG_FB_CYBER2000=m +# CONFIG_FB_ASILIANT is not set +# CONFIG_FB_IMSTT is not set +# CONFIG_FB_S1D13XXX is not set +CONFIG_FB_NVIDIA=m +# CONFIG_FB_NVIDIA_I2C is not set +CONFIG_FB_RIVA=m +# CONFIG_FB_RIVA_I2C is not set +# CONFIG_FB_RIVA_DEBUG is not set +CONFIG_FB_MATROX=m +CONFIG_FB_MATROX_MILLENIUM=y +CONFIG_FB_MATROX_MYSTIQUE=y +CONFIG_FB_MATROX_G=y +# CONFIG_FB_MATROX_I2C is not set +CONFIG_FB_RADEON=m +CONFIG_FB_RADEON_I2C=y +# CONFIG_FB_RADEON_DEBUG is not set +CONFIG_FB_ATY128=m +CONFIG_FB_ATY=m +# CONFIG_FB_ATY_CT is not set +# CONFIG_FB_ATY_GX is not set +CONFIG_FB_SAVAGE=m +# CONFIG_FB_SAVAGE_I2C is not set +# CONFIG_FB_SAVAGE_ACCEL is not set +CONFIG_FB_SIS=m +CONFIG_FB_SIS_300=y +CONFIG_FB_SIS_315=y +CONFIG_FB_NEOMAGIC=m +CONFIG_FB_KYRO=m +CONFIG_FB_VOODOO1=m +CONFIG_FB_TRIDENT=m +# CONFIG_FB_VIRTUAL is not set + +## +## file: drivers/video/console/Kconfig +## +# CONFIG_VGA_CONSOLE is not set +CONFIG_FRAMEBUFFER_CONSOLE=y +# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set +# CONFIG_FONTS is not set +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y + +## +## file: drivers/video/logo/Kconfig +## +CONFIG_LOGO=y +# CONFIG_LOGO_LINUX_MONO is not set +# CONFIG_LOGO_LINUX_VGA16 is not set +# CONFIG_LOGO_LINUX_CLUT224 is not set + +## +## file: drivers/w1/Kconfig +## +# CONFIG_W1 is not set + +## +## file: drivers/watchdog/Kconfig +## +# CONFIG_PCIPCWATCHDOG is not set +# CONFIG_WDTPCI is not set +# CONFIG_USBPCWATCHDOG is not set + +## +## file: fs/cramfs/Kconfig +## +CONFIG_CRAMFS=y + +## +## file: fs/ext2/Kconfig +## +CONFIG_EXT2_FS=y + +## +## file: fs/ext3/Kconfig +## +CONFIG_EXT3_FS=y + +## +## file: fs/nfs/Kconfig +## +CONFIG_NFS_FS=y +CONFIG_ROOT_NFS=y + +## +## file: fs/partitions/Kconfig +## +CONFIG_SGI_PARTITION=y +CONFIG_KARMA_PARTITION=y + +## +## file: init/Kconfig +## +# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set + +## +## file: mm/Kconfig +## +## choice: Memory model +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +## end choice + +## +## file: net/ax25/Kconfig +## +# CONFIG_HAMRADIO is not set + +## +## file: net/decnet/Kconfig +## +# CONFIG_DECNET is not set + +## +## file: net/ipv4/Kconfig +## +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +CONFIG_IP_PNP_BOOTP=y + +## +## file: net/ipx/Kconfig +## +# CONFIG_IPX is not set + +## +## file: net/irda/Kconfig +## +# CONFIG_IRDA is not set + +## +## file: net/lapb/Kconfig +## +# CONFIG_LAPB is not set + +## +## file: net/wanrouter/Kconfig +## +# CONFIG_WAN_ROUTER is not set + +## +## file: unknown +## +CONFIG_BLK_DEV_IDE_SWARM=y +# CONFIG_LAN_SAA9730 is not set +# CONFIG_MIPS_ATLAS is not set +# CONFIG_MIPS_SEAD is not set +CONFIG_SIBYTE_CFE=y +# CONFIG_SIMULATION is not set + --- linux-2.6-3.0.0~rc6.orig/debian/config/mips/config.5kc-malta +++ linux-2.6-3.0.0~rc6/debian/config/mips/config.5kc-malta @@ -0,0 +1,1202 @@ +## +## file: arch/Kconfig +## +CONFIG_OPROFILE=m + +## +## file: arch/mips/Kconfig +## +## choice: System type +# CONFIG_MIPS_COBALT is not set +# CONFIG_MACH_DECSTATION is not set +# CONFIG_MACH_JAZZ is not set +# CONFIG_LASAT is not set +CONFIG_MIPS_MALTA=y +# CONFIG_MIPS_SIM is not set +# CONFIG_MACH_VR41XX is not set +# CONFIG_PNX8550_JBS is not set +# CONFIG_PNX8550_STB810 is not set +# CONFIG_PMC_YOSEMITE is not set +# CONFIG_SGI_IP22 is not set +# CONFIG_SGI_IP27 is not set +# CONFIG_SGI_IP32 is not set +# CONFIG_SIBYTE_CRHINE is not set +# CONFIG_SIBYTE_CARMEL is not set +# CONFIG_SIBYTE_CRHONE is not set +# CONFIG_SIBYTE_RHONE is not set +# CONFIG_SIBYTE_SWARM is not set +# CONFIG_SIBYTE_LITTLESUR is not set +# CONFIG_SIBYTE_SENTOSA is not set +# CONFIG_SIBYTE_BIGSUR is not set +# CONFIG_SNI_RM is not set +# CONFIG_WR_PPMC is not set +## end choice +## choice: CPU type +# CONFIG_CPU_MIPS32_R1 is not set +# CONFIG_CPU_MIPS32_R2 is not set +CONFIG_CPU_MIPS64_R1=y +# CONFIG_CPU_MIPS64_R2 is not set +# CONFIG_CPU_R3000 is not set +# CONFIG_CPU_TX39XX is not set +# CONFIG_CPU_VR41XX is not set +# CONFIG_CPU_R4300 is not set +# CONFIG_CPU_R4X00 is not set +# CONFIG_CPU_TX49XX is not set +# CONFIG_CPU_R5000 is not set +# CONFIG_CPU_R5432 is not set +# CONFIG_CPU_R6000 is not set +# CONFIG_CPU_NEVADA is not set +# CONFIG_CPU_R8000 is not set +# CONFIG_CPU_R10000 is not set +# CONFIG_CPU_RM7000 is not set +# CONFIG_CPU_RM9000 is not set +# CONFIG_CPU_SB1 is not set +## end choice +## choice: Kernel code model +# CONFIG_32BIT is not set +CONFIG_64BIT=y +## end choice +## choice: Kernel page size +CONFIG_PAGE_SIZE_4KB=y +# CONFIG_PAGE_SIZE_8KB is not set +# CONFIG_PAGE_SIZE_16KB is not set +# CONFIG_PAGE_SIZE_64KB is not set +## end choice +## choice: MIPS MT options +CONFIG_MIPS_MT_DISABLED=y +# CONFIG_MIPS_MT_SMP is not set +# CONFIG_MIPS_MT_SMTC is not set +## end choice +# CONFIG_MIPS_VPE_LOADER is not set +# CONFIG_CPU_HAS_SMARTMIPS is not set +## choice: Timer frequency +# CONFIG_HZ_48 is not set +# CONFIG_HZ_100 is not set +# CONFIG_HZ_128 is not set +CONFIG_HZ_250=y +# CONFIG_HZ_256 is not set +# CONFIG_HZ_1000 is not set +# CONFIG_HZ_1024 is not set +## end choice +# CONFIG_KEXEC is not set +CONFIG_PCI=y +CONFIG_MIPS32_COMPAT=y +CONFIG_MIPS32_O32=y +CONFIG_MIPS32_N32=y +CONFIG_VIRTUALIZATION=y + +## +## file: arch/mips/Kconfig.debug +## +CONFIG_CMDLINE="" + +## +## file: arch/mips/txx9/Kconfig +## +# CONFIG_TOSHIBA_JMR3927 is not set +# CONFIG_TOSHIBA_RBTX4927 is not set +# CONFIG_TOSHIBA_RBTX4938 is not set + +## +## file: drivers/ata/Kconfig +## +CONFIG_ATA=y +CONFIG_SATA_AHCI=y +CONFIG_SATA_INIC162X=m +CONFIG_SATA_SIL24=y +# CONFIG_PDC_ADMA is not set +# CONFIG_SATA_QSTOR is not set +CONFIG_SATA_SX4=y +CONFIG_ATA_PIIX=y +CONFIG_SATA_MV=y +# CONFIG_SATA_NV is not set +CONFIG_SATA_PROMISE=y +CONFIG_SATA_SIL=y +# CONFIG_SATA_SIS is not set +# CONFIG_SATA_SVW is not set +# CONFIG_SATA_ULI is not set +# CONFIG_SATA_VIA is not set +# CONFIG_SATA_VITESSE is not set +CONFIG_PATA_CMD64X=y +CONFIG_PATA_HPT366=y +CONFIG_PATA_NETCELL=y +CONFIG_PATA_OLDPIIX=y +CONFIG_PATA_PDC2027X=y +CONFIG_PATA_PDC_OLD=y +CONFIG_PATA_SIL680=y +CONFIG_PATA_MPIIX=y +CONFIG_PATA_NS87410=y +CONFIG_PATA_PLATFORM=y +CONFIG_ATA_GENERIC=y + +## +## file: drivers/atm/Kconfig +## +# CONFIG_ATM_DRIVERS is not set + +## +## file: drivers/auxdisplay/Kconfig +## +# CONFIG_KS0108 is not set + +## +## file: drivers/block/Kconfig +## +CONFIG_BLK_DEV_FD=m +CONFIG_PARIDE=m +# CONFIG_BLK_CPQ_DA is not set +CONFIG_BLK_CPQ_CISS_DA=m +CONFIG_CISS_SCSI_TAPE=y +CONFIG_BLK_DEV_DAC960=m +CONFIG_BLK_DEV_UMEM=m +CONFIG_BLK_DEV_SX8=m +# CONFIG_BLK_DEV_UB is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_COUNT=16 +CONFIG_BLK_DEV_RAM_SIZE=65536 +CONFIG_CDROM_PKTCDVD=m +CONFIG_CDROM_PKTCDVD_BUFFERS=8 +# CONFIG_CDROM_PKTCDVD_WCACHE is not set + +## +## file: drivers/block/paride/Kconfig +## +CONFIG_PARIDE_PD=m +CONFIG_PARIDE_PCD=m +CONFIG_PARIDE_PF=m +CONFIG_PARIDE_PT=m +CONFIG_PARIDE_PG=m +CONFIG_PARIDE_ATEN=m +CONFIG_PARIDE_BPCK=m +CONFIG_PARIDE_COMM=m +CONFIG_PARIDE_DSTR=m +CONFIG_PARIDE_FIT2=m +CONFIG_PARIDE_FIT3=m +CONFIG_PARIDE_EPAT=m +# CONFIG_PARIDE_EPATC8 is not set +CONFIG_PARIDE_EPIA=m +CONFIG_PARIDE_FRIQ=m +CONFIG_PARIDE_FRPW=m +CONFIG_PARIDE_KBIC=m +CONFIG_PARIDE_KTTI=m +CONFIG_PARIDE_ON20=m +CONFIG_PARIDE_ON26=m + +## +## file: drivers/bluetooth/Kconfig +## +CONFIG_BT_HCIUART=m +CONFIG_BT_HCIUART_H4=y +CONFIG_BT_HCIUART_BCSP=y +CONFIG_BT_HCIBCM203X=m +CONFIG_BT_HCIBPA10X=m +CONFIG_BT_HCIBFUSB=m +CONFIG_BT_HCIVHCI=m + +## +## file: drivers/char/Kconfig +## +CONFIG_PRINTER=m +# CONFIG_LP_CONSOLE is not set +CONFIG_PPDEV=m +CONFIG_R3964=m +CONFIG_APPLICOM=m + +## +## file: drivers/char/ipmi/Kconfig +## +CONFIG_IPMI_HANDLER=m +# CONFIG_IPMI_PANIC_EVENT is not set +# CONFIG_IPMI_DEVICE_INTERFACE is not set +CONFIG_IPMI_SI=m +CONFIG_IPMI_WATCHDOG=m +CONFIG_IPMI_POWEROFF=m + +## +## file: drivers/char/tpm/Kconfig +## +# CONFIG_TCG_TPM is not set + +## +## file: drivers/gpu/drm/Kconfig +## +CONFIG_DRM=m +CONFIG_DRM_TDFX=m +CONFIG_DRM_R128=m +CONFIG_DRM_RADEON=m +CONFIG_DRM_MGA=m +CONFIG_DRM_VIA=m +CONFIG_DRM_SAVAGE=m + +## +## file: drivers/gpu/drm/nouveau/Kconfig +## +CONFIG_DRM_NOUVEAU=m +# CONFIG_DRM_NOUVEAU_BACKLIGHT is not set +# CONFIG_DRM_NOUVEAU_DEBUG is not set +CONFIG_DRM_I2C_CH7006=m +CONFIG_DRM_I2C_SIL164=m + +## +## file: drivers/hwmon/Kconfig +## +CONFIG_HWMON=y +# CONFIG_HWMON_DEBUG_CHIP is not set +# CONFIG_SENSORS_ABITUGURU is not set +CONFIG_SENSORS_AD7418=m +CONFIG_SENSORS_ADM1021=m +CONFIG_SENSORS_ADM1025=m +CONFIG_SENSORS_ADM1026=m +CONFIG_SENSORS_ADM1029=m +CONFIG_SENSORS_ADM1031=m +CONFIG_SENSORS_ADM9240=m +# CONFIG_SENSORS_ASB100 is not set +# CONFIG_SENSORS_ATXP1 is not set +CONFIG_SENSORS_DS1621=m +# CONFIG_SENSORS_F71805F is not set +# CONFIG_SENSORS_GL518SM is not set +# CONFIG_SENSORS_GL520SM is not set +# CONFIG_SENSORS_IT87 is not set +CONFIG_SENSORS_LM63=m +CONFIG_SENSORS_LM70=m +CONFIG_SENSORS_LM75=m +CONFIG_SENSORS_LM77=m +CONFIG_SENSORS_LM78=m +CONFIG_SENSORS_LM80=m +CONFIG_SENSORS_LM83=m +CONFIG_SENSORS_LM85=m +CONFIG_SENSORS_LM87=m +CONFIG_SENSORS_LM90=m +CONFIG_SENSORS_LM92=m +CONFIG_SENSORS_MAX1619=m +CONFIG_SENSORS_MAX6650=m +# CONFIG_SENSORS_PC87360 is not set +# CONFIG_SENSORS_PC87427 is not set +CONFIG_SENSORS_PCF8591=m +# CONFIG_SENSORS_SIS5595 is not set +# CONFIG_SENSORS_SMSC47M1 is not set +# CONFIG_SENSORS_SMSC47M192 is not set +# CONFIG_SENSORS_SMSC47B397 is not set +# CONFIG_SENSORS_VIA686A is not set +# CONFIG_SENSORS_VT1211 is not set +# CONFIG_SENSORS_VT8231 is not set +# CONFIG_SENSORS_W83781D is not set +# CONFIG_SENSORS_W83791D is not set +# CONFIG_SENSORS_W83792D is not set +# CONFIG_SENSORS_W83793 is not set +# CONFIG_SENSORS_W83L785TS is not set +# CONFIG_SENSORS_W83627HF is not set +# CONFIG_SENSORS_W83627EHF is not set + +## +## file: drivers/i2c/Kconfig +## +CONFIG_I2C=m +CONFIG_I2C_CHARDEV=m +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set + +## +## file: drivers/i2c/busses/Kconfig +## +# CONFIG_I2C_ALI1535 is not set +# CONFIG_I2C_ALI1563 is not set +# CONFIG_I2C_ALI15X3 is not set +# CONFIG_I2C_AMD756 is not set +# CONFIG_I2C_AMD8111 is not set +# CONFIG_I2C_I801 is not set +CONFIG_I2C_PIIX4=m +# CONFIG_I2C_NFORCE2 is not set +# CONFIG_I2C_SIS5595 is not set +# CONFIG_I2C_SIS630 is not set +# CONFIG_I2C_SIS96X is not set +# CONFIG_I2C_VIA is not set +# CONFIG_I2C_VIAPRO is not set +# CONFIG_I2C_OCORES is not set +CONFIG_I2C_SIMTEC=m +CONFIG_I2C_PARPORT=m +CONFIG_I2C_PARPORT_LIGHT=m +CONFIG_I2C_TINY_USB=m +# CONFIG_I2C_STUB is not set + +## +## file: drivers/ide/Kconfig +## +# CONFIG_IDE is not set + +## +## file: drivers/input/gameport/Kconfig +## +CONFIG_GAMEPORT=m +# CONFIG_GAMEPORT_NS558 is not set +# CONFIG_GAMEPORT_L4 is not set +CONFIG_GAMEPORT_EMU10K1=m +CONFIG_GAMEPORT_FM801=m + +## +## file: drivers/input/joystick/Kconfig +## +CONFIG_INPUT_JOYSTICK=y + +## +## file: drivers/input/keyboard/Kconfig +## +CONFIG_INPUT_KEYBOARD=y +CONFIG_KEYBOARD_ATKBD=y +CONFIG_KEYBOARD_LKKBD=m +CONFIG_KEYBOARD_NEWTON=m +CONFIG_KEYBOARD_STOWAWAY=m +CONFIG_KEYBOARD_SUNKBD=m +CONFIG_KEYBOARD_XTKBD=m + +## +## file: drivers/input/misc/Kconfig +## +# CONFIG_INPUT_MISC is not set + +## +## file: drivers/input/mouse/Kconfig +## +CONFIG_INPUT_MOUSE=y +CONFIG_MOUSE_PS2=m +CONFIG_MOUSE_PS2_LOGIPS2PP=y +CONFIG_MOUSE_PS2_SYNAPTICS=y +CONFIG_MOUSE_PS2_LIFEBOOK=y +CONFIG_MOUSE_PS2_TRACKPOINT=y +# CONFIG_MOUSE_PS2_TOUCHKIT is not set +CONFIG_MOUSE_SERIAL=m +CONFIG_MOUSE_APPLETOUCH=m +CONFIG_MOUSE_VSXXXAA=m + +## +## file: drivers/input/serio/Kconfig +## +CONFIG_SERIO=y +CONFIG_SERIO_I8042=y +CONFIG_SERIO_SERPORT=m +CONFIG_SERIO_PARKBD=m +CONFIG_SERIO_PCIPS2=y +CONFIG_SERIO_LIBPS2=y +CONFIG_SERIO_RAW=m + +## +## file: drivers/input/touchscreen/Kconfig +## +CONFIG_INPUT_TOUCHSCREEN=y + +## +## file: drivers/isdn/Kconfig +## +CONFIG_ISDN=y +CONFIG_ISDN_CAPI=m + +## +## file: drivers/isdn/capi/Kconfig +## +CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON=y +CONFIG_ISDN_CAPI_MIDDLEWARE=y +CONFIG_ISDN_CAPI_CAPI20=m +CONFIG_ISDN_CAPI_CAPIDRV=m + +## +## file: drivers/isdn/gigaset/Kconfig +## +CONFIG_ISDN_DRV_GIGASET=m +CONFIG_GIGASET_BASE=m +CONFIG_GIGASET_M105=m +CONFIG_GIGASET_M101=m +# CONFIG_GIGASET_DEBUG is not set + +## +## file: drivers/isdn/hardware/avm/Kconfig +## +CONFIG_CAPI_AVM=y +CONFIG_ISDN_DRV_AVMB1_B1PCI=m +CONFIG_ISDN_DRV_AVMB1_B1PCIV4=y +CONFIG_ISDN_DRV_AVMB1_B1PCMCIA=m +CONFIG_ISDN_DRV_AVMB1_T1PCI=m +CONFIG_ISDN_DRV_AVMB1_C4=m + +## +## file: drivers/isdn/hardware/eicon/Kconfig +## +CONFIG_CAPI_EICON=y +CONFIG_ISDN_DIVAS=m +CONFIG_ISDN_DIVAS_BRIPCI=y +CONFIG_ISDN_DIVAS_PRIPCI=y +CONFIG_ISDN_DIVAS_DIVACAPI=m +CONFIG_ISDN_DIVAS_USERIDI=m +CONFIG_ISDN_DIVAS_MAINT=m + +## +## file: drivers/leds/Kconfig +## +# CONFIG_NEW_LEDS is not set + +## +## file: drivers/message/i2o/Kconfig +## +CONFIG_I2O=m +CONFIG_I2O_LCT_NOTIFY_ON_CHANGES=y +CONFIG_I2O_EXT_ADAPTEC=y +CONFIG_I2O_EXT_ADAPTEC_DMA64=y +CONFIG_I2O_CONFIG=m +CONFIG_I2O_CONFIG_OLD_IOCTL=y +CONFIG_I2O_BUS=m +CONFIG_I2O_BLOCK=m +CONFIG_I2O_SCSI=m +CONFIG_I2O_PROC=m + +## +## file: drivers/mfd/Kconfig +## +CONFIG_MFD_SM501=m + +## +## file: drivers/misc/Kconfig +## +# CONFIG_PHANTOM is not set +# CONFIG_SGI_IOC4 is not set +CONFIG_TIFM_CORE=m +CONFIG_TIFM_7XX1=m + +## +## file: drivers/mmc/Kconfig +## +CONFIG_MMC=m +# CONFIG_MMC_DEBUG is not set + +## +## file: drivers/mmc/card/Kconfig +## +CONFIG_MMC_BLOCK=m + +## +## file: drivers/mmc/core/Kconfig +## +# CONFIG_MMC_UNSAFE_RESUME is not set + +## +## file: drivers/mtd/Kconfig +## +CONFIG_MTD=m +# CONFIG_MTD_DEBUG is not set +CONFIG_MTD_REDBOOT_PARTS=y +CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1 +# CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED is not set +# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set +CONFIG_MTD_CHAR=m +CONFIG_MTD_BLKDEVS=m +CONFIG_MTD_BLOCK=m +CONFIG_MTD_BLOCK_RO=m +CONFIG_FTL=m +CONFIG_NFTL=m +CONFIG_NFTL_RW=y +CONFIG_INFTL=m +CONFIG_RFD_FTL=m +CONFIG_SSFDC=m + +## +## file: drivers/mtd/chips/Kconfig +## +CONFIG_MTD_CFI=m +CONFIG_MTD_JEDECPROBE=m +# CONFIG_MTD_CFI_ADV_OPTIONS is not set +CONFIG_MTD_MAP_BANK_WIDTH_1=y +CONFIG_MTD_MAP_BANK_WIDTH_2=y +CONFIG_MTD_MAP_BANK_WIDTH_4=y +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set +CONFIG_MTD_CFI_I1=y +CONFIG_MTD_CFI_I2=y +# CONFIG_MTD_CFI_I4 is not set +# CONFIG_MTD_CFI_I8 is not set +CONFIG_MTD_CFI_INTELEXT=m +CONFIG_MTD_CFI_AMDSTD=m +CONFIG_MTD_CFI_STAA=m +CONFIG_MTD_RAM=m +CONFIG_MTD_ROM=m +CONFIG_MTD_ABSENT=m + +## +## file: drivers/mtd/devices/Kconfig +## +CONFIG_MTD_PMC551=m +# CONFIG_MTD_PMC551_BUGFIX is not set +# CONFIG_MTD_PMC551_DEBUG is not set +CONFIG_MTD_DATAFLASH=m +CONFIG_MTD_M25P80=m +CONFIG_MTD_SLRAM=m +CONFIG_MTD_PHRAM=m +CONFIG_MTD_MTDRAM=m +CONFIG_MTDRAM_TOTAL_SIZE=4096 +CONFIG_MTDRAM_ERASE_SIZE=128 +CONFIG_MTD_BLOCK2MTD=m +CONFIG_MTD_DOC2000=m +CONFIG_MTD_DOC2001=m +CONFIG_MTD_DOC2001PLUS=m +# CONFIG_MTD_DOCPROBE_ADVANCED is not set +CONFIG_MTD_DOCPROBE_ADDRESS=0 + +## +## file: drivers/mtd/maps/Kconfig +## +CONFIG_MTD_COMPLEX_MAPPINGS=y +CONFIG_MTD_PHYSMAP=m +CONFIG_MTD_PHYSMAP_START=0x8000000 +CONFIG_MTD_PHYSMAP_LEN=0x0 +CONFIG_MTD_PHYSMAP_BANKWIDTH=2 +CONFIG_MTD_PCI=m +CONFIG_MTD_PLATRAM=m + +## +## file: drivers/mtd/nand/Kconfig +## +# CONFIG_MTD_NAND_ECC_SMC is not set +CONFIG_MTD_NAND=m +# CONFIG_MTD_NAND_VERIFY_WRITE is not set +# CONFIG_MTD_NAND_MUSEUM_IDS is not set +CONFIG_MTD_NAND_DISKONCHIP=m +# CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADVANCED is not set +CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADDRESS=0 +# CONFIG_MTD_NAND_DISKONCHIP_BBTWRITE is not set +CONFIG_MTD_NAND_CAFE=m +# CONFIG_MTD_NAND_PLATFORM is not set + +## +## file: drivers/mtd/onenand/Kconfig +## +CONFIG_MTD_ONENAND=m +CONFIG_MTD_ONENAND_VERIFY_WRITE=y +# CONFIG_MTD_ONENAND_OTP is not set + +## +## file: drivers/mtd/ubi/Kconfig +## +CONFIG_MTD_UBI=m +CONFIG_MTD_UBI_WL_THRESHOLD=4096 +CONFIG_MTD_UBI_BEB_RESERVE=1 +# CONFIG_MTD_UBI_GLUEBI is not set +# CONFIG_MTD_UBI_DEBUG is not set + +## +## file: drivers/net/Kconfig +## +# CONFIG_HAPPYMEAL is not set +# CONFIG_SUNGEM is not set +# CONFIG_CASSINI is not set +CONFIG_NET_VENDOR_3COM=y +CONFIG_VORTEX=m +CONFIG_TYPHOON=m +# CONFIG_DM9000 is not set +# CONFIG_HP100 is not set +CONFIG_NET_PCI=y +CONFIG_PCNET32=y +CONFIG_AMD8111_ETH=m +CONFIG_ADAPTEC_STARFIRE=m +CONFIG_B44=m +# CONFIG_FORCEDETH is not set +# CONFIG_TC35815 is not set +CONFIG_E100=m +CONFIG_FEALNX=m +CONFIG_NATSEMI=m +CONFIG_NE2K_PCI=m +CONFIG_8139CP=m +CONFIG_8139TOO=m +# CONFIG_8139TOO_PIO is not set +CONFIG_8139TOO_TUNE_TWISTER=y +CONFIG_8139TOO_8129=y +# CONFIG_8139_OLD_RX_RESET is not set +CONFIG_SIS900=m +CONFIG_EPIC100=m +CONFIG_SUNDANCE=m +# CONFIG_SUNDANCE_MMIO is not set +CONFIG_VIA_RHINE=m +# CONFIG_VIA_RHINE_MMIO is not set +CONFIG_SC92031=m +CONFIG_NET_POCKET=y +CONFIG_DE600=m +CONFIG_DE620=m +CONFIG_NETDEV_1000=y +CONFIG_FDDI=y +CONFIG_SKFP=m +CONFIG_HIPPI=y +CONFIG_ROADRUNNER=m +# CONFIG_ROADRUNNER_LARGE_RINGS is not set +CONFIG_PLIP=m +CONFIG_NET_FC=y +# CONFIG_NETPOLL_TRAP is not set + +## +## file: drivers/net/arcnet/Kconfig +## +CONFIG_ARCNET=m +CONFIG_ARCNET_1201=m +CONFIG_ARCNET_1051=m +CONFIG_ARCNET_RAW=m +CONFIG_ARCNET_CAP=m +CONFIG_ARCNET_COM90xx=m +CONFIG_ARCNET_COM90xxIO=m +CONFIG_ARCNET_RIM_I=m +CONFIG_ARCNET_COM20020=m +CONFIG_ARCNET_COM20020_PCI=m + +## +## file: drivers/net/irda/Kconfig +## +CONFIG_IRTTY_SIR=m +CONFIG_USB_IRDA=m +CONFIG_SIGMATEL_FIR=m +CONFIG_VLSI_FIR=m +CONFIG_MCS_FIR=m + +## +## file: drivers/net/phy/Kconfig +## +CONFIG_PHYLIB=m +CONFIG_MARVELL_PHY=m +CONFIG_DAVICOM_PHY=m +# CONFIG_QSEMI_PHY is not set +CONFIG_LXT_PHY=m +# CONFIG_CICADA_PHY is not set +# CONFIG_VITESSE_PHY is not set +CONFIG_SMSC_PHY=m +CONFIG_BROADCOM_PHY=m + +## +## file: drivers/net/tokenring/Kconfig +## +# CONFIG_TR is not set + +## +## file: drivers/net/tulip/Kconfig +## +CONFIG_NET_TULIP=y +CONFIG_DE2104X=m +CONFIG_TULIP=m +# CONFIG_TULIP_MWI is not set +# CONFIG_TULIP_MMIO is not set +# CONFIG_TULIP_NAPI is not set +CONFIG_DE4X5=m +# CONFIG_WINBOND_840 is not set +CONFIG_DM9102=m +# CONFIG_ULI526X is not set + +## +## file: drivers/net/wan/Kconfig +## +# CONFIG_WAN is not set + +## +## file: drivers/net/wireless/Kconfig +## +CONFIG_ATMEL=m +CONFIG_PCI_ATMEL=m +CONFIG_USB_ZD1201=m + +## +## file: drivers/net/wireless/ipw2x00/Kconfig +## +CONFIG_IPW2100=m +CONFIG_IPW2100_MONITOR=y +# CONFIG_IPW2100_DEBUG is not set +CONFIG_IPW2200=m +# CONFIG_IPW2200_MONITOR is not set +CONFIG_IPW2200_QOS=y +# CONFIG_IPW2200_DEBUG is not set + +## +## file: drivers/net/wireless/libertas/Kconfig +## +CONFIG_LIBERTAS=m +CONFIG_LIBERTAS_USB=m +# CONFIG_LIBERTAS_DEBUG is not set + +## +## file: drivers/net/wireless/mwifiex/Kconfig +## +CONFIG_MWIFIEX=m +CONFIG_MWIFIEX_SDIO=m + +## +## file: drivers/net/wireless/orinoco/Kconfig +## +CONFIG_HERMES=m +CONFIG_PLX_HERMES=m +CONFIG_TMD_HERMES=m +CONFIG_NORTEL_HERMES=m +CONFIG_PCI_HERMES=m + +## +## file: drivers/net/wireless/zd1211rw/Kconfig +## +CONFIG_ZD1211RW=m +# CONFIG_ZD1211RW_DEBUG is not set + +## +## file: drivers/parport/Kconfig +## +# CONFIG_PARPORT_AX88796 is not set + +## +## file: drivers/pci/hotplug/Kconfig +## +# CONFIG_HOTPLUG_PCI is not set + +## +## file: drivers/pcmcia/Kconfig +## +# CONFIG_PCCARD is not set + +## +## file: drivers/rtc/Kconfig +## +CONFIG_RTC_DRV_DS1307=m +CONFIG_RTC_DRV_DS1672=m +CONFIG_RTC_DRV_MAX6900=m +CONFIG_RTC_DRV_RS5C372=m +CONFIG_RTC_DRV_ISL1208=m +CONFIG_RTC_DRV_X1205=m +CONFIG_RTC_DRV_PCF8563=m +CONFIG_RTC_DRV_PCF8583=m +CONFIG_RTC_DRV_MAX6902=m +CONFIG_RTC_DRV_RS5C348=m +CONFIG_RTC_DRV_CMOS=y +# CONFIG_RTC_DRV_DS1553 is not set +# CONFIG_RTC_DRV_DS1742 is not set +CONFIG_RTC_DRV_M48T86=m +# CONFIG_RTC_DRV_V3020 is not set + +## +## file: drivers/scsi/Kconfig +## +CONFIG_SCSI=y +CONFIG_BLK_DEV_SD=y +CONFIG_SCSI_ARCMSR=m +CONFIG_SCSI_HPTIOP=m +CONFIG_SCSI_DMX3191D=m +CONFIG_SCSI_FUTURE_DOMAIN=m +CONFIG_SCSI_IPS=m +CONFIG_SCSI_INITIO=m +CONFIG_SCSI_INIA100=m +CONFIG_SCSI_STEX=m +CONFIG_SCSI_SYM53C8XX_2=m +CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1 +CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16 +CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 +CONFIG_SCSI_SYM53C8XX_MMIO=y +# CONFIG_SCSI_IPR is not set +CONFIG_SCSI_QLOGIC_1280=m +CONFIG_SCSI_DC395x=m +CONFIG_SCSI_DC390T=m +CONFIG_SCSI_DEBUG=m +CONFIG_SCSI_SRP=m + +## +## file: drivers/scsi/aic7xxx/Kconfig.aic79xx +## +CONFIG_SCSI_AIC79XX=m +CONFIG_AIC79XX_CMDS_PER_DEVICE=32 +CONFIG_AIC79XX_RESET_DELAY_MS=15000 +CONFIG_AIC79XX_DEBUG_ENABLE=y +CONFIG_AIC79XX_DEBUG_MASK=0 +CONFIG_AIC79XX_REG_PRETTY_PRINT=y + +## +## file: drivers/scsi/aic7xxx/Kconfig.aic7xxx +## +CONFIG_SCSI_AIC7XXX=m +CONFIG_AIC7XXX_CMDS_PER_DEVICE=8 +CONFIG_AIC7XXX_RESET_DELAY_MS=15000 +CONFIG_AIC7XXX_DEBUG_ENABLE=y +CONFIG_AIC7XXX_DEBUG_MASK=0 +CONFIG_AIC7XXX_REG_PRETTY_PRINT=y + +## +## file: drivers/scsi/aic94xx/Kconfig +## +CONFIG_SCSI_AIC94XX=m +# CONFIG_AIC94XX_DEBUG is not set + +## +## file: drivers/scsi/libsas/Kconfig +## +CONFIG_SCSI_SAS_LIBSAS=m + +## +## file: drivers/scsi/megaraid/Kconfig.megaraid +## +CONFIG_MEGARAID_NEWGEN=y +CONFIG_MEGARAID_MM=m +CONFIG_MEGARAID_MAILBOX=m +CONFIG_MEGARAID_LEGACY=m +CONFIG_MEGARAID_SAS=m + +## +## file: drivers/scsi/qla2xxx/Kconfig +## +CONFIG_SCSI_QLA_FC=m + +## +## file: drivers/scsi/qla4xxx/Kconfig +## +CONFIG_SCSI_QLA_ISCSI=m + +## +## file: drivers/spi/Kconfig +## +CONFIG_SPI=y +CONFIG_SPI_BITBANG=m +CONFIG_SPI_BUTTERFLY=m +# CONFIG_SPI_SPIDEV is not set + +## +## file: drivers/telephony/Kconfig +## +CONFIG_PHONE=m +CONFIG_PHONE_IXJ=m + +## +## file: drivers/tty/Kconfig +## +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +# CONFIG_VT_HW_CONSOLE_BINDING is not set +# CONFIG_SERIAL_NONSTANDARD is not set + +## +## file: drivers/tty/serial/Kconfig +## +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_SERIAL_8250_PCI=y +CONFIG_SERIAL_8250_NR_UARTS=4 +CONFIG_SERIAL_8250_RUNTIME_UARTS=4 +CONFIG_SERIAL_8250_EXTENDED=y +# CONFIG_SERIAL_8250_MANY_PORTS is not set +CONFIG_SERIAL_8250_SHARE_IRQ=y +# CONFIG_SERIAL_8250_DETECT_IRQ is not set +CONFIG_SERIAL_8250_RSA=y +CONFIG_SERIAL_JSM=m + +## +## file: drivers/usb/Kconfig +## +CONFIG_USB=m +CONFIG_USB_USS720=m + +## +## file: drivers/usb/atm/Kconfig +## +CONFIG_USB_ATM=m +CONFIG_USB_SPEEDTOUCH=m +CONFIG_USB_CXACRU=m +CONFIG_USB_UEAGLEATM=m +CONFIG_USB_XUSBATM=m + +## +## file: drivers/usb/host/Kconfig +## +CONFIG_USB_EHCI_HCD=m +CONFIG_USB_EHCI_ROOT_HUB_TT=y +# CONFIG_USB_EHCI_TT_NEWSCHED is not set +CONFIG_USB_ISP116X_HCD=m +CONFIG_USB_OHCI_HCD=m +CONFIG_USB_UHCI_HCD=y +CONFIG_USB_U132_HCD=m +CONFIG_USB_SL811_HCD=m + +## +## file: drivers/usb/mon/Kconfig +## +CONFIG_USB_MON=y + +## +## file: drivers/video/Kconfig +## +CONFIG_FB=y +CONFIG_FIRMWARE_EDID=y +CONFIG_FB_MODE_HELPERS=y +CONFIG_FB_TILEBLITTING=y +CONFIG_FB_CIRRUS=y +CONFIG_FB_PM2=m +CONFIG_FB_PM2_FIFO_DISCONNECT=y +CONFIG_FB_CYBER2000=m +# CONFIG_FB_ASILIANT is not set +# CONFIG_FB_IMSTT is not set +CONFIG_FB_S1D13XXX=m +CONFIG_FB_NVIDIA=m +# CONFIG_FB_NVIDIA_I2C is not set +# CONFIG_FB_NVIDIA_DEBUG is not set +CONFIG_FB_NVIDIA_BACKLIGHT=y +# CONFIG_FB_RIVA is not set +CONFIG_FB_MATROX=m +CONFIG_FB_MATROX_MILLENIUM=y +CONFIG_FB_MATROX_MYSTIQUE=y +CONFIG_FB_MATROX_G=y +CONFIG_FB_MATROX_I2C=m +CONFIG_FB_MATROX_MAVEN=m +CONFIG_FB_RADEON=m +CONFIG_FB_RADEON_I2C=y +CONFIG_FB_RADEON_BACKLIGHT=y +# CONFIG_FB_RADEON_DEBUG is not set +CONFIG_FB_ATY128=m +CONFIG_FB_ATY128_BACKLIGHT=y +CONFIG_FB_ATY=m +CONFIG_FB_ATY_CT=y +# CONFIG_FB_ATY_GENERIC_LCD is not set +CONFIG_FB_ATY_GX=y +CONFIG_FB_ATY_BACKLIGHT=y +CONFIG_FB_SAVAGE=m +# CONFIG_FB_SAVAGE_I2C is not set +# CONFIG_FB_SAVAGE_ACCEL is not set +CONFIG_FB_SIS=m +CONFIG_FB_SIS_300=y +CONFIG_FB_SIS_315=y +CONFIG_FB_NEOMAGIC=m +CONFIG_FB_KYRO=m +CONFIG_FB_VOODOO1=m +CONFIG_FB_VT8623=m +CONFIG_FB_TRIDENT=m +CONFIG_FB_ARK=m +CONFIG_FB_PM3=m +CONFIG_FB_SM501=m +CONFIG_FB_VIRTUAL=m + +## +## file: drivers/video/console/Kconfig +## +CONFIG_VGA_CONSOLE=y +# CONFIG_VGACON_SOFT_SCROLLBACK is not set +CONFIG_FRAMEBUFFER_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y +# CONFIG_FONTS is not set +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y + +## +## file: drivers/video/display/Kconfig +## +CONFIG_DISPLAY_SUPPORT=m + +## +## file: drivers/video/logo/Kconfig +## +CONFIG_LOGO=y + +## +## file: drivers/watchdog/Kconfig +## +CONFIG_PCIPCWATCHDOG=m +CONFIG_WDTPCI=m +CONFIG_USBPCWATCHDOG=m + +## +## file: fs/cramfs/Kconfig +## +CONFIG_CRAMFS=y + +## +## file: fs/dlm/Kconfig +## +CONFIG_DLM=m +# CONFIG_DLM_DEBUG is not set + +## +## file: fs/ext2/Kconfig +## +CONFIG_EXT2_FS=y + +## +## file: fs/ext3/Kconfig +## +CONFIG_EXT3_FS=y + +## +## file: fs/nfs/Kconfig +## +CONFIG_NFS_FS=y + +## +## file: fs/partitions/Kconfig +## +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y + +## +## file: init/Kconfig +## +# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set + +## +## file: lib/Kconfig.debug +## +CONFIG_ENABLE_MUST_CHECK=y +CONFIG_UNUSED_SYMBOLS=y +# CONFIG_HEADERS_CHECK is not set + +## +## file: mm/Kconfig +## +## choice: Memory model +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +## end choice + +## +## file: net/ax25/Kconfig +## +CONFIG_HAMRADIO=y +CONFIG_AX25=m +# CONFIG_AX25_DAMA_SLAVE is not set +CONFIG_NETROM=m +CONFIG_ROSE=m + +## +## file: net/decnet/Kconfig +## +CONFIG_DECNET=m +# CONFIG_DECNET_ROUTER is not set + +## +## file: net/decnet/netfilter/Kconfig +## +CONFIG_DECNET_NF_GRABULATOR=m + +## +## file: net/ipx/Kconfig +## +CONFIG_IPX=m +# CONFIG_IPX_INTERN is not set + +## +## file: net/irda/Kconfig +## +CONFIG_IRDA=m +# CONFIG_IRDA_ULTRA is not set +CONFIG_IRDA_CACHE_LAST_LSAP=y +CONFIG_IRDA_FAST_RR=y +# CONFIG_IRDA_DEBUG is not set + +## +## file: net/irda/ircomm/Kconfig +## +CONFIG_IRCOMM=m + +## +## file: net/irda/irlan/Kconfig +## +CONFIG_IRLAN=m + +## +## file: net/irda/irnet/Kconfig +## +CONFIG_IRNET=m + +## +## file: net/lapb/Kconfig +## +CONFIG_LAPB=m + +## +## file: net/netlabel/Kconfig +## +# CONFIG_NETLABEL is not set + +## +## file: net/wanrouter/Kconfig +## +CONFIG_WAN_ROUTER=m + +## +## file: net/x25/Kconfig +## +CONFIG_X25=m + +## +## file: sound/drivers/Kconfig +## +CONFIG_SND_DUMMY=m +CONFIG_SND_VIRMIDI=m +CONFIG_SND_MTPAV=m +CONFIG_SND_MTS64=m +CONFIG_SND_SERIAL_U16550=m +CONFIG_SND_MPU401=m +CONFIG_SND_PORTMAN2X4=m +CONFIG_SND_AC97_POWER_SAVE=y + +## +## file: sound/pci/Kconfig +## +CONFIG_SND_AD1889=m +CONFIG_SND_ALS300=m +CONFIG_SND_ALI5451=m +CONFIG_SND_ATIIXP=m +CONFIG_SND_ATIIXP_MODEM=m +CONFIG_SND_AU8810=m +CONFIG_SND_AU8820=m +CONFIG_SND_AU8830=m +CONFIG_SND_AZT3328=m +CONFIG_SND_BT87X=m +# CONFIG_SND_BT87X_OVERCLOCK is not set +CONFIG_SND_CA0106=m +CONFIG_SND_CMIPCI=m +CONFIG_SND_CS4281=m +CONFIG_SND_CS46XX=m +CONFIG_SND_CS46XX_NEW_DSP=y +CONFIG_SND_DARLA20=m +CONFIG_SND_GINA20=m +CONFIG_SND_LAYLA20=m +CONFIG_SND_DARLA24=m +CONFIG_SND_GINA24=m +CONFIG_SND_LAYLA24=m +CONFIG_SND_MONA=m +CONFIG_SND_MIA=m +CONFIG_SND_ECHO3G=m +CONFIG_SND_INDIGO=m +CONFIG_SND_INDIGOIO=m +CONFIG_SND_INDIGODJ=m +CONFIG_SND_EMU10K1=m +CONFIG_SND_EMU10K1X=m +CONFIG_SND_ENS1370=m +CONFIG_SND_ENS1371=m +CONFIG_SND_ES1938=m +CONFIG_SND_ES1968=m +CONFIG_SND_FM801=m +CONFIG_SND_FM801_TEA575X_BOOL=y +CONFIG_SND_HDSP=m +CONFIG_SND_HDSPM=m +CONFIG_SND_ICE1712=m +CONFIG_SND_ICE1724=m +CONFIG_SND_INTEL8X0=m +CONFIG_SND_INTEL8X0M=m +CONFIG_SND_KORG1212=m +CONFIG_SND_MAESTRO3=m +CONFIG_SND_MIXART=m +CONFIG_SND_NM256=m +CONFIG_SND_PCXHR=m +CONFIG_SND_RIPTIDE=m +CONFIG_SND_RME32=m +CONFIG_SND_RME96=m +CONFIG_SND_RME9652=m +CONFIG_SND_SONICVIBES=m +CONFIG_SND_TRIDENT=m +CONFIG_SND_VIA82XX=m +CONFIG_SND_VIA82XX_MODEM=m +CONFIG_SND_VX222=m +CONFIG_SND_YMFPCI=m + +## +## file: sound/pci/hda/Kconfig +## +CONFIG_SND_HDA_INTEL=m + +## +## file: unknown +## +# CONFIG_BASLER_EXCITE is not set +# CONFIG_SCSI_SAS_LIBSAS_DEBUG is not set + --- linux-2.6-3.0.0~rc6.orig/debian/config/mips/config.sb1a-bcm91480b +++ linux-2.6-3.0.0~rc6/debian/config/mips/config.sb1a-bcm91480b @@ -0,0 +1,774 @@ +## +## file: arch/Kconfig +## +# CONFIG_OPROFILE is not set + +## +## file: arch/mips/Kconfig +## +## choice: System type +# CONFIG_MIPS_COBALT is not set +# CONFIG_MACH_DECSTATION is not set +# CONFIG_MACH_JAZZ is not set +# CONFIG_LASAT is not set +# CONFIG_MIPS_MALTA is not set +# CONFIG_MIPS_SIM is not set +# CONFIG_MACH_VR41XX is not set +# CONFIG_PNX8550_JBS is not set +# CONFIG_PMC_YOSEMITE is not set +# CONFIG_SGI_IP22 is not set +# CONFIG_SGI_IP27 is not set +# CONFIG_SGI_IP32 is not set +# CONFIG_SIBYTE_CRHINE is not set +# CONFIG_SIBYTE_CARMEL is not set +# CONFIG_SIBYTE_CRHONE is not set +# CONFIG_SIBYTE_RHONE is not set +# CONFIG_SIBYTE_SWARM is not set +# CONFIG_SIBYTE_LITTLESUR is not set +# CONFIG_SIBYTE_SENTOSA is not set +CONFIG_SIBYTE_BIGSUR=y +## end choice +## choice: CPU type +# CONFIG_CPU_MIPS32_R1 is not set +# CONFIG_CPU_MIPS32_R2 is not set +# CONFIG_CPU_MIPS64_R1 is not set +# CONFIG_CPU_MIPS64_R2 is not set +# CONFIG_CPU_R3000 is not set +# CONFIG_CPU_TX39XX is not set +# CONFIG_CPU_VR41XX is not set +# CONFIG_CPU_R4300 is not set +# CONFIG_CPU_R4X00 is not set +# CONFIG_CPU_TX49XX is not set +# CONFIG_CPU_R5000 is not set +# CONFIG_CPU_R5432 is not set +# CONFIG_CPU_R6000 is not set +# CONFIG_CPU_NEVADA is not set +# CONFIG_CPU_R8000 is not set +# CONFIG_CPU_R10000 is not set +# CONFIG_CPU_RM7000 is not set +# CONFIG_CPU_RM9000 is not set +CONFIG_CPU_SB1=y +## end choice +## choice: Kernel code model +# CONFIG_32BIT is not set +CONFIG_64BIT=y +## end choice +## choice: Kernel page size +CONFIG_PAGE_SIZE_4KB=y +# CONFIG_PAGE_SIZE_8KB is not set +# CONFIG_PAGE_SIZE_16KB is not set +# CONFIG_PAGE_SIZE_64KB is not set +## end choice +# CONFIG_SIBYTE_DMA_PAGEOPS is not set +CONFIG_SMP=y +CONFIG_NR_CPUS=4 +CONFIG_PCI=y +CONFIG_MIPS32_COMPAT=y +CONFIG_MIPS32_O32=y +CONFIG_MIPS32_N32=y + +## +## file: arch/mips/alchemy/Kconfig +## +## choice: Machine type +# CONFIG_MIPS_MTX1 is not set +# CONFIG_MIPS_BOSPORUS is not set +# CONFIG_MIPS_DB1000 is not set +# CONFIG_MIPS_DB1100 is not set +# CONFIG_MIPS_DB1200 is not set +# CONFIG_MIPS_DB1500 is not set +# CONFIG_MIPS_DB1550 is not set +# CONFIG_MIPS_MIRAGE is not set +# CONFIG_MIPS_PB1000 is not set +# CONFIG_MIPS_PB1100 is not set +# CONFIG_MIPS_PB1200 is not set +# CONFIG_MIPS_PB1500 is not set +# CONFIG_MIPS_PB1550 is not set +# CONFIG_MIPS_XXS1500 is not set +## end choice + +## +## file: arch/mips/Kconfig.debug +## +CONFIG_CMDLINE="" +# CONFIG_SB1XXX_CORELIS is not set + +## +## file: arch/mips/sibyte/Kconfig +## +## choice: SiByte SOC Stepping +# CONFIG_CPU_SB1_PASS_1 is not set +# CONFIG_CPU_SB1_PASS_2_1250 is not set +# CONFIG_CPU_SB1_PASS_2_2 is not set +# CONFIG_CPU_SB1_PASS_4 is not set +# CONFIG_CPU_SB1_PASS_2_112x is not set +# CONFIG_CPU_SB1_PASS_3 is not set +## end choice +# CONFIG_SB1_CEX_ALWAYS_FATAL is not set +# CONFIG_SB1_CERR_STALL is not set +# CONFIG_SIBYTE_CFE_CONSOLE is not set +# CONFIG_SIBYTE_BUS_WATCHER is not set +# CONFIG_SIBYTE_TBPROF is not set + +## +## file: arch/mips/txx9/Kconfig +## +# CONFIG_TOSHIBA_JMR3927 is not set +# CONFIG_TOSHIBA_RBTX4927 is not set +# CONFIG_TOSHIBA_RBTX4938 is not set + +## +## file: drivers/ata/Kconfig +## +CONFIG_ATA=y +CONFIG_SATA_AHCI=m +CONFIG_SATA_SIL24=m +CONFIG_PDC_ADMA=m +CONFIG_SATA_QSTOR=m +CONFIG_SATA_SX4=m +CONFIG_ATA_PIIX=m +CONFIG_SATA_MV=m +CONFIG_SATA_NV=m +CONFIG_SATA_PROMISE=m +CONFIG_SATA_SIL=m +CONFIG_SATA_SIS=m +CONFIG_SATA_SVW=m +CONFIG_SATA_ULI=m +CONFIG_SATA_VIA=m +CONFIG_SATA_VITESSE=m +CONFIG_PATA_ALI=m +CONFIG_PATA_AMD=m +CONFIG_PATA_CMD64X=m +CONFIG_PATA_CS5530=m +CONFIG_PATA_CYPRESS=y +CONFIG_PATA_EFAR=m +CONFIG_PATA_NS87415=m +CONFIG_PATA_OLDPIIX=m +CONFIG_PATA_PDC2027X=m +CONFIG_PATA_PDC_OLD=m +CONFIG_PATA_SC1200=m +CONFIG_PATA_SERVERWORKS=m +CONFIG_PATA_SIL680=m +CONFIG_PATA_TRIFLEX=m +CONFIG_PATA_VIA=m +CONFIG_PATA_MPIIX=m +CONFIG_PATA_PLATFORM=y + +## +## file: drivers/block/Kconfig +## +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_UMEM is not set +# CONFIG_BLK_DEV_SX8 is not set +# CONFIG_BLK_DEV_UB is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_COUNT=16 +CONFIG_BLK_DEV_RAM_SIZE=8192 +# CONFIG_CDROM_PKTCDVD is not set + +## +## file: drivers/char/Kconfig +## +CONFIG_PRINTER=m +# CONFIG_LP_CONSOLE is not set +# CONFIG_PPDEV is not set +CONFIG_RTC=m +CONFIG_GEN_RTC=y +CONFIG_GEN_RTC_X=y +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set +# CONFIG_TELCLOCK is not set + +## +## file: drivers/char/ipmi/Kconfig +## +# CONFIG_IPMI_HANDLER is not set + +## +## file: drivers/char/tpm/Kconfig +## +# CONFIG_TCG_TPM is not set + +## +## file: drivers/firewire/Kconfig +## +# CONFIG_FIREWIRE is not set + +## +## file: drivers/gpu/drm/Kconfig +## +# CONFIG_DRM is not set + +## +## file: drivers/hid/usbhid/Kconfig +## +CONFIG_USB_HID=m +# CONFIG_USB_KBD is not set +# CONFIG_USB_MOUSE is not set + +## +## file: drivers/hwmon/Kconfig +## +CONFIG_HWMON=y +# CONFIG_HWMON_DEBUG_CHIP is not set +# CONFIG_SENSORS_ADM1021 is not set +# CONFIG_SENSORS_ADM1025 is not set +# CONFIG_SENSORS_ADM1026 is not set +# CONFIG_SENSORS_ADM1031 is not set +# CONFIG_SENSORS_ADM9240 is not set +# CONFIG_SENSORS_ASB100 is not set +# CONFIG_SENSORS_ATXP1 is not set +# CONFIG_SENSORS_DS1621 is not set +# CONFIG_SENSORS_F71805F is not set +# CONFIG_SENSORS_GL518SM is not set +# CONFIG_SENSORS_GL520SM is not set +# CONFIG_SENSORS_IT87 is not set +# CONFIG_SENSORS_LM63 is not set +# CONFIG_SENSORS_LM75 is not set +# CONFIG_SENSORS_LM77 is not set +# CONFIG_SENSORS_LM78 is not set +# CONFIG_SENSORS_LM80 is not set +# CONFIG_SENSORS_LM83 is not set +# CONFIG_SENSORS_LM85 is not set +# CONFIG_SENSORS_LM87 is not set +# CONFIG_SENSORS_LM90 is not set +# CONFIG_SENSORS_LM92 is not set +# CONFIG_SENSORS_MAX1619 is not set +# CONFIG_SENSORS_PC87360 is not set +# CONFIG_SENSORS_PCF8591 is not set +# CONFIG_SENSORS_SIS5595 is not set +# CONFIG_SENSORS_SMSC47M1 is not set +# CONFIG_SENSORS_SMSC47B397 is not set +# CONFIG_SENSORS_VIA686A is not set +CONFIG_SENSORS_VT8231=m +# CONFIG_SENSORS_W83781D is not set +# CONFIG_SENSORS_W83792D is not set +# CONFIG_SENSORS_W83L785TS is not set +# CONFIG_SENSORS_W83627HF is not set +# CONFIG_SENSORS_W83627EHF is not set + +## +## file: drivers/i2c/Kconfig +## +CONFIG_I2C=m +CONFIG_I2C_CHARDEV=m +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set + +## +## file: drivers/i2c/busses/Kconfig +## +# CONFIG_I2C_ALI1535 is not set +# CONFIG_I2C_ALI1563 is not set +# CONFIG_I2C_ALI15X3 is not set +# CONFIG_I2C_AMD756 is not set +# CONFIG_I2C_AMD8111 is not set +# CONFIG_I2C_I801 is not set +# CONFIG_I2C_PIIX4 is not set +# CONFIG_I2C_NFORCE2 is not set +# CONFIG_I2C_SIS5595 is not set +# CONFIG_I2C_SIS630 is not set +# CONFIG_I2C_SIS96X is not set +# CONFIG_I2C_VIA is not set +# CONFIG_I2C_VIAPRO is not set +# CONFIG_I2C_PARPORT is not set +# CONFIG_I2C_PARPORT_LIGHT is not set +# CONFIG_I2C_PCA_ISA is not set +CONFIG_I2C_SIBYTE=m +CONFIG_I2C_STUB=m +# CONFIG_SCx200_ACB is not set + +## +## file: drivers/ide/Kconfig +## +# CONFIG_IDE is not set + +## +## file: drivers/infiniband/Kconfig +## +# CONFIG_INFINIBAND is not set + +## +## file: drivers/input/Kconfig +## +# CONFIG_INPUT_JOYDEV is not set + +## +## file: drivers/input/gameport/Kconfig +## +# CONFIG_GAMEPORT is not set + +## +## file: drivers/input/joystick/Kconfig +## +# CONFIG_INPUT_JOYSTICK is not set + +## +## file: drivers/input/keyboard/Kconfig +## +CONFIG_INPUT_KEYBOARD=y +CONFIG_KEYBOARD_ATKBD=y +# CONFIG_KEYBOARD_LKKBD is not set +# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set + +## +## file: drivers/input/misc/Kconfig +## +# CONFIG_INPUT_MISC is not set + +## +## file: drivers/input/mouse/Kconfig +## +CONFIG_INPUT_MOUSE=y +CONFIG_MOUSE_PS2=y +# CONFIG_MOUSE_SERIAL is not set +# CONFIG_MOUSE_VSXXXAA is not set + +## +## file: drivers/input/serio/Kconfig +## +CONFIG_SERIO=y +# CONFIG_SERIO_I8042 is not set +# CONFIG_SERIO_SERPORT is not set +# CONFIG_SERIO_PARKBD is not set +# CONFIG_SERIO_PCIPS2 is not set +CONFIG_SERIO_LIBPS2=y +# CONFIG_SERIO_RAW is not set + +## +## file: drivers/input/touchscreen/Kconfig +## +# CONFIG_INPUT_TOUCHSCREEN is not set + +## +## file: drivers/media/radio/Kconfig +## +# CONFIG_RADIO_MAXIRADIO is not set +# CONFIG_USB_DSBR is not set + +## +## file: drivers/media/video/Kconfig +## +# CONFIG_VIDEO_ADV_DEBUG is not set +# CONFIG_VIDEO_BWQCAM is not set +# CONFIG_VIDEO_CQCAM is not set +# CONFIG_VIDEO_W9966 is not set +# CONFIG_VIDEO_MXB is not set +# CONFIG_VIDEO_HEXIUM_ORION is not set +# CONFIG_VIDEO_HEXIUM_GEMINI is not set + +## +## file: drivers/media/video/bt8xx/Kconfig +## +# CONFIG_VIDEO_BT848 is not set + +## +## file: drivers/media/video/cx88/Kconfig +## +# CONFIG_VIDEO_CX88 is not set + +## +## file: drivers/media/video/em28xx/Kconfig +## +# CONFIG_VIDEO_EM28XX is not set + +## +## file: drivers/media/video/et61x251/Kconfig +## +CONFIG_USB_ET61X251=m + +## +## file: drivers/media/video/pwc/Kconfig +## +# CONFIG_USB_PWC is not set + +## +## file: drivers/media/video/saa7134/Kconfig +## +# CONFIG_VIDEO_SAA7134 is not set + +## +## file: drivers/media/video/sn9c102/Kconfig +## +# CONFIG_USB_SN9C102 is not set + +## +## file: drivers/media/video/zoran/Kconfig +## +# CONFIG_VIDEO_ZORAN is not set + +## +## file: drivers/message/fusion/Kconfig +## +# CONFIG_FUSION is not set +# CONFIG_FUSION_SPI is not set +# CONFIG_FUSION_FC is not set +# CONFIG_FUSION_SAS is not set + +## +## file: drivers/message/i2o/Kconfig +## +# CONFIG_I2O is not set + +## +## file: drivers/mmc/Kconfig +## +# CONFIG_MMC is not set + +## +## file: drivers/mtd/Kconfig +## +# CONFIG_MTD is not set + +## +## file: drivers/net/Kconfig +## +# CONFIG_HAPPYMEAL is not set +# CONFIG_SUNGEM is not set +# CONFIG_CASSINI is not set +# CONFIG_NET_VENDOR_3COM is not set +# CONFIG_DM9000 is not set +# CONFIG_HP100 is not set +CONFIG_NET_PCI=y +CONFIG_AMD8111_ETH=m +CONFIG_ADAPTEC_STARFIRE=m +CONFIG_B44=m +CONFIG_FORCEDETH=m +CONFIG_E100=m +CONFIG_FEALNX=m +CONFIG_NATSEMI=m +CONFIG_NE2K_PCI=m +CONFIG_8139CP=m +CONFIG_8139TOO=m +CONFIG_8139TOO_PIO=y +# CONFIG_8139TOO_TUNE_TWISTER is not set +CONFIG_8139TOO_8129=y +# CONFIG_8139_OLD_RX_RESET is not set +CONFIG_SIS900=m +CONFIG_EPIC100=m +CONFIG_SUNDANCE=m +# CONFIG_SUNDANCE_MMIO is not set +CONFIG_VIA_RHINE=m +# CONFIG_VIA_RHINE_MMIO is not set +# CONFIG_NET_POCKET is not set +CONFIG_NETDEV_1000=y +CONFIG_SB1250_MAC=y +# CONFIG_CHELSIO_T1 is not set +# CONFIG_IXGB is not set +# CONFIG_S2IO is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PLIP is not set +# CONFIG_NET_FC is not set + +## +## file: drivers/net/appletalk/Kconfig +## +# CONFIG_ATALK is not set + +## +## file: drivers/net/arcnet/Kconfig +## +# CONFIG_ARCNET is not set + +## +## file: drivers/net/phy/Kconfig +## +CONFIG_BROADCOM_PHY=y +# CONFIG_FIXED_PHY is not set + +## +## file: drivers/net/tokenring/Kconfig +## +# CONFIG_TR is not set + +## +## file: drivers/net/tulip/Kconfig +## +# CONFIG_NET_TULIP is not set + +## +## file: drivers/net/wan/Kconfig +## +# CONFIG_WAN is not set + +## +## file: drivers/pci/hotplug/Kconfig +## +# CONFIG_HOTPLUG_PCI is not set + +## +## file: drivers/pcmcia/Kconfig +## +# CONFIG_PCCARD is not set + +## +## file: drivers/scsi/Kconfig +## +CONFIG_SCSI=y +CONFIG_BLK_DEV_SD=y +# CONFIG_SCSI_MULTI_LUN is not set +# CONFIG_SCSI_CONSTANTS is not set +# CONFIG_SCSI_LOGGING is not set +# CONFIG_SCSI_SAS_ATTRS is not set +CONFIG_SCSI_DMX3191D=m +CONFIG_SCSI_FUTURE_DOMAIN=m +CONFIG_SCSI_IPS=m +CONFIG_SCSI_INITIO=m +CONFIG_SCSI_INIA100=m +CONFIG_SCSI_SYM53C8XX_2=m +CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1 +CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16 +CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 +# CONFIG_SCSI_IPR is not set +CONFIG_SCSI_QLOGIC_1280=m +CONFIG_SCSI_DC395x=m +CONFIG_SCSI_DC390T=m +CONFIG_SCSI_DEBUG=m + +## +## file: drivers/scsi/aic7xxx/Kconfig.aic79xx +## +CONFIG_SCSI_AIC79XX=m +CONFIG_AIC79XX_CMDS_PER_DEVICE=32 +CONFIG_AIC79XX_RESET_DELAY_MS=15000 +CONFIG_AIC79XX_DEBUG_ENABLE=y +CONFIG_AIC79XX_DEBUG_MASK=0 +CONFIG_AIC79XX_REG_PRETTY_PRINT=y + +## +## file: drivers/scsi/aic7xxx/Kconfig.aic7xxx +## +CONFIG_SCSI_AIC7XXX=m +CONFIG_AIC7XXX_CMDS_PER_DEVICE=32 +CONFIG_AIC7XXX_RESET_DELAY_MS=15000 +CONFIG_AIC7XXX_DEBUG_ENABLE=y +CONFIG_AIC7XXX_DEBUG_MASK=0 +CONFIG_AIC7XXX_REG_PRETTY_PRINT=y + +## +## file: drivers/scsi/megaraid/Kconfig.megaraid +## +# CONFIG_MEGARAID_NEWGEN is not set +CONFIG_MEGARAID_LEGACY=m +CONFIG_MEGARAID_SAS=m + +## +## file: drivers/scsi/qla2xxx/Kconfig +## +CONFIG_SCSI_QLA_FC=m + +## +## file: drivers/spi/Kconfig +## +CONFIG_SPI=y +CONFIG_SPI_BITBANG=m +CONFIG_SPI_BUTTERFLY=m + +## +## file: drivers/telephony/Kconfig +## +# CONFIG_PHONE is not set + +## +## file: drivers/tty/Kconfig +## +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +# CONFIG_SERIAL_NONSTANDARD is not set + +## +## file: drivers/tty/serial/Kconfig +## +# CONFIG_SERIAL_8250 is not set +CONFIG_SERIAL_SB1250_DUART=y +CONFIG_SERIAL_SB1250_DUART_CONSOLE=y +# CONFIG_SERIAL_JSM is not set + +## +## file: drivers/usb/Kconfig +## +CONFIG_USB=m +# CONFIG_USB_USS720 is not set + +## +## file: drivers/usb/host/Kconfig +## +CONFIG_USB_EHCI_HCD=m +# CONFIG_USB_EHCI_ROOT_HUB_TT is not set +CONFIG_USB_ISP116X_HCD=m +CONFIG_USB_OHCI_HCD=m +CONFIG_USB_UHCI_HCD=m +CONFIG_USB_SL811_HCD=m + +## +## file: drivers/usb/mon/Kconfig +## +CONFIG_USB_MON=y + +## +## file: drivers/video/Kconfig +## +CONFIG_FB=y +CONFIG_FB_MODE_HELPERS=y +CONFIG_FB_TILEBLITTING=y +# CONFIG_FB_CIRRUS is not set +CONFIG_FB_PM2=m +# CONFIG_FB_PM2_FIFO_DISCONNECT is not set +CONFIG_FB_CYBER2000=m +# CONFIG_FB_ASILIANT is not set +# CONFIG_FB_IMSTT is not set +# CONFIG_FB_S1D13XXX is not set +CONFIG_FB_NVIDIA=m +# CONFIG_FB_NVIDIA_I2C is not set +CONFIG_FB_RIVA=m +# CONFIG_FB_RIVA_I2C is not set +# CONFIG_FB_RIVA_DEBUG is not set +CONFIG_FB_MATROX=m +CONFIG_FB_MATROX_MILLENIUM=y +CONFIG_FB_MATROX_MYSTIQUE=y +CONFIG_FB_MATROX_G=y +# CONFIG_FB_MATROX_I2C is not set +CONFIG_FB_RADEON=m +CONFIG_FB_RADEON_I2C=y +# CONFIG_FB_RADEON_DEBUG is not set +CONFIG_FB_ATY128=m +CONFIG_FB_ATY=m +# CONFIG_FB_ATY_CT is not set +# CONFIG_FB_ATY_GX is not set +CONFIG_FB_SAVAGE=m +# CONFIG_FB_SAVAGE_I2C is not set +# CONFIG_FB_SAVAGE_ACCEL is not set +CONFIG_FB_SIS=m +CONFIG_FB_SIS_300=y +CONFIG_FB_SIS_315=y +CONFIG_FB_NEOMAGIC=m +CONFIG_FB_KYRO=m +CONFIG_FB_VOODOO1=m +CONFIG_FB_TRIDENT=m +# CONFIG_FB_VIRTUAL is not set + +## +## file: drivers/video/console/Kconfig +## +# CONFIG_VGA_CONSOLE is not set +CONFIG_FRAMEBUFFER_CONSOLE=y +# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set +# CONFIG_FONTS is not set +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y + +## +## file: drivers/video/logo/Kconfig +## +CONFIG_LOGO=y +# CONFIG_LOGO_LINUX_MONO is not set +# CONFIG_LOGO_LINUX_VGA16 is not set +# CONFIG_LOGO_LINUX_CLUT224 is not set + +## +## file: drivers/w1/Kconfig +## +# CONFIG_W1 is not set + +## +## file: drivers/watchdog/Kconfig +## +# CONFIG_PCIPCWATCHDOG is not set +# CONFIG_WDTPCI is not set +# CONFIG_USBPCWATCHDOG is not set + +## +## file: fs/cramfs/Kconfig +## +CONFIG_CRAMFS=y + +## +## file: fs/ext2/Kconfig +## +CONFIG_EXT2_FS=y + +## +## file: fs/ext3/Kconfig +## +CONFIG_EXT3_FS=y + +## +## file: fs/nfs/Kconfig +## +CONFIG_NFS_FS=y +CONFIG_ROOT_NFS=y + +## +## file: fs/partitions/Kconfig +## +CONFIG_SGI_PARTITION=y +CONFIG_KARMA_PARTITION=y + +## +## file: init/Kconfig +## +# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set + +## +## file: mm/Kconfig +## +## choice: Memory model +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +## end choice + +## +## file: net/ax25/Kconfig +## +# CONFIG_HAMRADIO is not set + +## +## file: net/decnet/Kconfig +## +# CONFIG_DECNET is not set + +## +## file: net/ipv4/Kconfig +## +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +CONFIG_IP_PNP_BOOTP=y + +## +## file: net/ipx/Kconfig +## +# CONFIG_IPX is not set + +## +## file: net/irda/Kconfig +## +# CONFIG_IRDA is not set + +## +## file: net/lapb/Kconfig +## +# CONFIG_LAPB is not set + +## +## file: net/wanrouter/Kconfig +## +# CONFIG_WAN_ROUTER is not set + +## +## file: unknown +## +# CONFIG_BLK_DEV_IDE_SWARM is not set +# CONFIG_LAN_SAA9730 is not set +# CONFIG_MIPS_ATLAS is not set +# CONFIG_MIPS_SEAD is not set +CONFIG_SIBYTE_CFE=y +# CONFIG_SIMULATION is not set + --- linux-2.6-3.0.0~rc6.orig/debian/config/sparc64/defines +++ linux-2.6-3.0.0~rc6/debian/config/sparc64/defines @@ -0,0 +1,21 @@ +[base] +flavours: + sparc64 + sparc64-smp +kernel-arch: sparc + +[image] +configs: sparc/config +suggests: silo, fdutils + +[sparc64_description] +hardware: uniprocessor 64-bit UltraSPARC + +[sparc64_image] +configs: sparc/config.sparc64 + +[sparc64-smp_description] +hardware: multiprocessor 64-bit UltraSPARC + +[sparc64-smp_image] +configs: sparc/config.sparc64-smp --- linux-2.6-3.0.0~rc6.orig/debian/config/hppa/config.parisc64-smp +++ linux-2.6-3.0.0~rc6/debian/config/hppa/config.parisc64-smp @@ -0,0 +1,18 @@ +## +## file: arch/parisc/Kconfig +## +## choice: Processor type +# CONFIG_PA7000 is not set +CONFIG_PA8X00=y +## end choice +CONFIG_64BIT=y +CONFIG_SMP=y +CONFIG_NR_CPUS=8 + +## +## file: mm/Kconfig +## +## choice: Memory model +# CONFIG_FLATMEM_MANUAL is not set +## end choice + --- linux-2.6-3.0.0~rc6.orig/debian/config/hppa/defines +++ linux-2.6-3.0.0~rc6/debian/config/hppa/defines @@ -0,0 +1,35 @@ +[base] +flavours: + parisc + parisc-smp + parisc64 + parisc64-smp +kernel-arch: parisc +compiler: gcc-4.4 + +[image] +suggests: palo + +[parisc_description] +hardware: 32-bit PA-RISC + +[parisc-smp_description] +hardware: multiprocessor 32-bit PA-RISC + +[parisc64_base] +cflags: -fno-cse-follow-jumps +override-host-type: hppa64-linux-gnu + +[parisc64_description] +hardware: 64-bit PA-RISC + +[parisc64-smp_base] +cflags: -fno-cse-follow-jumps +override-host-type: hppa64-linux-gnu + +[parisc64-smp_description] +hardware: multiprocessor 64-bit PA-RISC + +[relations] +gcc-4.4: gcc-4.4, binutils-hppa64, gcc-4.4-hppa64 + --- linux-2.6-3.0.0~rc6.orig/debian/config/hppa/config +++ linux-2.6-3.0.0~rc6/debian/config/hppa/config @@ -0,0 +1,736 @@ +## +## file: arch/Kconfig +## +# CONFIG_OPROFILE is not set + +## +## file: arch/parisc/Kconfig +## +## choice: Processor type +# CONFIG_PA7100LC is not set +# CONFIG_PA7200 is not set +# CONFIG_PA7300LC is not set +## end choice +## choice: Kernel page size +CONFIG_PARISC_PAGE_SIZE_4KB=y +# CONFIG_PARISC_PAGE_SIZE_16KB is not set +# CONFIG_PARISC_PAGE_SIZE_64KB is not set +## end choice + +## +## file: arch/parisc/Kconfig.debug +## +# CONFIG_DEBUG_RODATA is not set + +## +## file: drivers/block/Kconfig +## +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_UMEM is not set +# CONFIG_BLK_DEV_SX8 is not set +# CONFIG_BLK_DEV_UB is not set +CONFIG_BLK_DEV_RAM_SIZE=8192 +CONFIG_CDROM_PKTCDVD=m +CONFIG_CDROM_PKTCDVD_BUFFERS=8 +# CONFIG_CDROM_PKTCDVD_WCACHE is not set + +## +## file: drivers/char/Kconfig +## +CONFIG_PRINTER=m +# CONFIG_LP_CONSOLE is not set +# CONFIG_PPDEV is not set +CONFIG_GEN_RTC=y +# CONFIG_GEN_RTC_X is not set +# CONFIG_DTLK is not set +# CONFIG_APPLICOM is not set + +## +## file: drivers/char/ipmi/Kconfig +## +# CONFIG_IPMI_HANDLER is not set + +## +## file: drivers/eisa/Kconfig +## +CONFIG_EISA_NAMES=y + +## +## file: drivers/firewire/Kconfig +## +# CONFIG_FIREWIRE is not set + +## +## file: drivers/gpu/drm/Kconfig +## +# CONFIG_DRM is not set + +## +## file: drivers/hid/usbhid/Kconfig +## +CONFIG_USB_HID=m +CONFIG_USB_KBD=m +CONFIG_USB_MOUSE=m + +## +## file: drivers/hwmon/Kconfig +## +# CONFIG_SENSORS_F71805F is not set + +## +## file: drivers/i2c/Kconfig +## +# CONFIG_I2C is not set + +## +## file: drivers/ide/Kconfig +## +CONFIG_IDE=m +# CONFIG_BLK_DEV_IDE_SATA is not set +CONFIG_IDE_GD=m +# CONFIG_BLK_DEV_IDECS is not set +CONFIG_BLK_DEV_IDECD=m +# CONFIG_BLK_DEV_IDETAPE is not set +CONFIG_IDE_GENERIC=m +# CONFIG_BLK_DEV_OFFBOARD is not set +# CONFIG_BLK_DEV_GENERIC is not set +# CONFIG_BLK_DEV_OPTI621 is not set +# CONFIG_BLK_DEV_AEC62XX is not set +# CONFIG_BLK_DEV_ALI15X3 is not set +# CONFIG_BLK_DEV_AMD74XX is not set +# CONFIG_BLK_DEV_CMD64X is not set +# CONFIG_BLK_DEV_TRIFLEX is not set +# CONFIG_BLK_DEV_CY82C693 is not set +# CONFIG_BLK_DEV_CS5520 is not set +# CONFIG_BLK_DEV_CS5530 is not set +# CONFIG_BLK_DEV_HPT366 is not set +# CONFIG_BLK_DEV_SC1200 is not set +# CONFIG_BLK_DEV_PIIX is not set +CONFIG_BLK_DEV_NS87415=m +# CONFIG_BLK_DEV_PDC202XX_OLD is not set +# CONFIG_BLK_DEV_PDC202XX_NEW is not set +# CONFIG_BLK_DEV_SVWKS is not set +# CONFIG_BLK_DEV_SIIMAGE is not set +# CONFIG_BLK_DEV_SLC90E66 is not set +# CONFIG_BLK_DEV_TRM290 is not set +# CONFIG_BLK_DEV_VIA82CXXX is not set + +## +## file: drivers/input/Kconfig +## +# CONFIG_INPUT_JOYDEV is not set + +## +## file: drivers/input/gameport/Kconfig +## +# CONFIG_GAMEPORT is not set + +## +## file: drivers/input/joystick/Kconfig +## +# CONFIG_INPUT_JOYSTICK is not set + +## +## file: drivers/input/keyboard/Kconfig +## +CONFIG_INPUT_KEYBOARD=y +CONFIG_KEYBOARD_ATKBD=y +CONFIG_KEYBOARD_ATKBD_HP_KEYCODES=y +# CONFIG_KEYBOARD_ATKBD_RDI_KEYCODES is not set +# CONFIG_KEYBOARD_LKKBD is not set +CONFIG_KEYBOARD_HIL_OLD=m +CONFIG_KEYBOARD_HIL=m +# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set + +## +## file: drivers/input/misc/Kconfig +## +CONFIG_INPUT_MISC=y +# CONFIG_INPUT_UINPUT is not set +CONFIG_HP_SDC_RTC=m + +## +## file: drivers/input/mouse/Kconfig +## +CONFIG_INPUT_MOUSE=y +CONFIG_MOUSE_PS2=m +# CONFIG_MOUSE_SERIAL is not set +# CONFIG_MOUSE_INPORT is not set +# CONFIG_MOUSE_LOGIBM is not set +# CONFIG_MOUSE_PC110PAD is not set +# CONFIG_MOUSE_VSXXXAA is not set + +## +## file: drivers/input/serio/Kconfig +## +CONFIG_SERIO=y +# CONFIG_SERIO_SERPORT is not set +# CONFIG_SERIO_PARKBD is not set +CONFIG_SERIO_GSCPS2=y +CONFIG_HP_SDC=m +CONFIG_HIL_MLC=m +# CONFIG_SERIO_PCIPS2 is not set +CONFIG_SERIO_LIBPS2=y +CONFIG_SERIO_RAW=m + +## +## file: drivers/input/touchscreen/Kconfig +## +# CONFIG_INPUT_TOUCHSCREEN is not set + +## +## file: drivers/media/Kconfig +## +# CONFIG_VIDEO_DEV is not set + +## +## file: drivers/message/i2o/Kconfig +## +CONFIG_I2O=m +CONFIG_I2O_CONFIG=m +CONFIG_I2O_BLOCK=m +CONFIG_I2O_SCSI=m +CONFIG_I2O_PROC=m + +## +## file: drivers/mfd/Kconfig +## +# CONFIG_AB3100_CORE is not set + +## +## file: drivers/mmc/Kconfig +## +# CONFIG_MMC is not set + +## +## file: drivers/mtd/Kconfig +## +# CONFIG_MTD is not set + +## +## file: drivers/net/Kconfig +## +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +CONFIG_LASI_82596=m +CONFIG_HAPPYMEAL=m +CONFIG_SUNGEM=m +CONFIG_NET_VENDOR_3COM=y +CONFIG_EL1=m +CONFIG_EL2=m +CONFIG_ELPLUS=m +CONFIG_EL16=m +CONFIG_EL3=m +# CONFIG_3C515 is not set +CONFIG_VORTEX=m +CONFIG_TYPHOON=m +# CONFIG_LANCE is not set +CONFIG_NET_VENDOR_SMC=y +CONFIG_WD80x3=m +CONFIG_ULTRA=m +CONFIG_ULTRA32=m +CONFIG_SMC9194=m +CONFIG_NET_VENDOR_RACAL=y +# CONFIG_NI52 is not set +# CONFIG_NI65 is not set +CONFIG_AT1700=m +CONFIG_DEPCA=m +CONFIG_HP100=m +CONFIG_NET_ISA=y +CONFIG_E2100=m +CONFIG_EWRK3=m +CONFIG_EEXPRESS=m +CONFIG_EEXPRESS_PRO=m +CONFIG_HPLAN_PLUS=m +CONFIG_HPLAN=m +CONFIG_LP486E=m +CONFIG_ETH16I=m +CONFIG_NE2000=m +CONFIG_ZNET=m +CONFIG_SEEQ8005=m +CONFIG_NET_PCI=y +CONFIG_AMD8111_ETH=m +CONFIG_ADAPTEC_STARFIRE=m +CONFIG_AC3200=m +CONFIG_APRICOT=m +CONFIG_B44=m +CONFIG_FORCEDETH=m +CONFIG_CS89x0=m +CONFIG_E100=m +CONFIG_LNE390=m +CONFIG_FEALNX=m +CONFIG_NATSEMI=m +CONFIG_NE2K_PCI=m +CONFIG_NE3210=m +CONFIG_ES3210=m +CONFIG_8139CP=m +CONFIG_8139TOO=m +# CONFIG_8139TOO_PIO is not set +# CONFIG_8139TOO_TUNE_TWISTER is not set +# CONFIG_8139TOO_8129 is not set +# CONFIG_8139_OLD_RX_RESET is not set +CONFIG_SIS900=m +CONFIG_EPIC100=m +CONFIG_SUNDANCE=m +# CONFIG_SUNDANCE_MMIO is not set +CONFIG_VIA_RHINE=m +# CONFIG_VIA_RHINE_MMIO is not set +# CONFIG_VXGE is not set +# CONFIG_NIU is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +CONFIG_PLIP=m +# CONFIG_NET_FC is not set +# CONFIG_NETPOLL_TRAP is not set + +## +## file: drivers/net/appletalk/Kconfig +## +# CONFIG_ATALK is not set + +## +## file: drivers/net/arcnet/Kconfig +## +# CONFIG_ARCNET is not set + +## +## file: drivers/net/pcmcia/Kconfig +## +CONFIG_NET_PCMCIA=y +CONFIG_PCMCIA_3C589=m +CONFIG_PCMCIA_3C574=m +CONFIG_PCMCIA_FMVJ18X=m +CONFIG_PCMCIA_PCNET=m +CONFIG_PCMCIA_NMCLAN=m +CONFIG_PCMCIA_SMC91C92=m +CONFIG_PCMCIA_XIRC2PS=m +CONFIG_PCMCIA_AXNET=m + +## +## file: drivers/net/tokenring/Kconfig +## +# CONFIG_TR is not set + +## +## file: drivers/net/tulip/Kconfig +## +CONFIG_NET_TULIP=y +# CONFIG_DE2104X is not set +CONFIG_TULIP=m +# CONFIG_TULIP_MWI is not set +CONFIG_TULIP_MMIO=y +# CONFIG_DE4X5 is not set +# CONFIG_WINBOND_840 is not set +# CONFIG_DM9102 is not set +CONFIG_PCMCIA_XIRCOM=m + +## +## file: drivers/net/wan/Kconfig +## +# CONFIG_WAN is not set + +## +## file: drivers/net/wireless/Kconfig +## +CONFIG_PCMCIA_RAYCS=m +# CONFIG_ATMEL is not set +CONFIG_AIRO_CS=m +CONFIG_PCMCIA_WL3501=m +# CONFIG_USB_ZD1201 is not set + +## +## file: drivers/net/wireless/ipw2x00/Kconfig +## +# CONFIG_IPW2100 is not set + +## +## file: drivers/net/wireless/orinoco/Kconfig +## +CONFIG_HERMES=m +# CONFIG_PLX_HERMES is not set +# CONFIG_TMD_HERMES is not set +# CONFIG_PCI_HERMES is not set +CONFIG_PCMCIA_HERMES=m + +## +## file: drivers/parisc/Kconfig +## +CONFIG_GSC=y +CONFIG_HPPB=y +CONFIG_IOMMU_CCIO=y +CONFIG_GSC_LASI=y +CONFIG_GSC_WAX=y +CONFIG_EISA=y +CONFIG_ISA=y +CONFIG_PCI=y +CONFIG_GSC_DINO=y +CONFIG_PCI_LBA=y +CONFIG_SUPERIO=y +CONFIG_CHASSIS_LCD_LED=y +CONFIG_PDC_CHASSIS=y +CONFIG_PDC_CHASSIS_WARN=y +CONFIG_PDC_STABLE=y + +## +## file: drivers/pci/hotplug/Kconfig +## +# CONFIG_HOTPLUG_PCI is not set + +## +## file: drivers/pcmcia/Kconfig +## +CONFIG_PCCARD=m +CONFIG_PCMCIA=m +CONFIG_CARDBUS=y +CONFIG_YENTA=m +CONFIG_PD6729=m +CONFIG_I82092=m +CONFIG_I82365=m +# CONFIG_TCIC is not set +# CONFIG_PCMCIA_DEBUG is not set + +## +## file: drivers/pnp/Kconfig +## +# CONFIG_PNP is not set + +## +## file: drivers/rtc/Kconfig +## +# CONFIG_RTC_CLASS is not set + +## +## file: drivers/scsi/Kconfig +## +# CONFIG_SCSI_IN2000 is not set +# CONFIG_SCSI_BUSLOGIC is not set +# CONFIG_SCSI_DMX3191D is not set +# CONFIG_SCSI_DTC3280 is not set +# CONFIG_SCSI_EATA is not set +# CONFIG_SCSI_FUTURE_DOMAIN is not set +# CONFIG_SCSI_GDTH is not set +# CONFIG_SCSI_GENERIC_NCR5380 is not set +# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set +# CONFIG_SCSI_IPS is not set +CONFIG_SCSI_INITIO=m +# CONFIG_SCSI_INIA100 is not set +# CONFIG_SCSI_PPA is not set +# CONFIG_SCSI_IMM is not set +# CONFIG_SCSI_NCR53C406A is not set +CONFIG_SCSI_LASI700=m +CONFIG_SCSI_SYM53C8XX_2=m +CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1 +CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16 +CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 +# CONFIG_SCSI_IPR is not set +CONFIG_SCSI_ZALON=m +CONFIG_SCSI_NCR53C8XX_DEFAULT_TAGS=8 +CONFIG_SCSI_NCR53C8XX_MAX_TAGS=32 +CONFIG_SCSI_NCR53C8XX_SYNC=20 +# CONFIG_SCSI_PAS16 is not set +# CONFIG_SCSI_QLOGIC_FAS is not set +# CONFIG_SCSI_QLOGIC_1280 is not set +# CONFIG_SCSI_SIM710 is not set +# CONFIG_SCSI_SYM53C416 is not set +# CONFIG_SCSI_DC395x is not set +# CONFIG_SCSI_DC390T is not set +# CONFIG_SCSI_T128 is not set +# CONFIG_SCSI_U14_34F is not set + +## +## file: drivers/scsi/megaraid/Kconfig.megaraid +## +# CONFIG_MEGARAID_NEWGEN is not set +CONFIG_MEGARAID_MM=m +CONFIG_MEGARAID_MAILBOX=m +CONFIG_MEGARAID_LEGACY=m + +## +## file: drivers/scsi/pcmcia/Kconfig +## +CONFIG_PCMCIA_FDOMAIN=m +CONFIG_PCMCIA_QLOGIC=m +CONFIG_PCMCIA_SYM53C500=m + +## +## file: drivers/telephony/Kconfig +## +# CONFIG_PHONE is not set + +## +## file: drivers/tty/Kconfig +## +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +# CONFIG_SERIAL_NONSTANDARD is not set + +## +## file: drivers/tty/serial/Kconfig +## +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_SERIAL_8250_CS=m +CONFIG_SERIAL_8250_NR_UARTS=32 +CONFIG_SERIAL_8250_RUNTIME_UARTS=4 +CONFIG_SERIAL_8250_EXTENDED=y +CONFIG_SERIAL_8250_MANY_PORTS=y +CONFIG_SERIAL_8250_SHARE_IRQ=y +# CONFIG_SERIAL_8250_DETECT_IRQ is not set +# CONFIG_SERIAL_8250_RSA is not set +CONFIG_SERIAL_MUX=y +CONFIG_SERIAL_MUX_CONSOLE=y +CONFIG_SERIAL_JSM=m + +## +## file: drivers/usb/Kconfig +## +CONFIG_USB=m +# CONFIG_USB_USS720 is not set + +## +## file: drivers/usb/core/Kconfig +## +CONFIG_USB_DEBUG=y + +## +## file: drivers/usb/host/Kconfig +## +CONFIG_USB_EHCI_HCD=m +# CONFIG_USB_EHCI_ROOT_HUB_TT is not set +CONFIG_USB_OHCI_HCD=m +# CONFIG_USB_UHCI_HCD is not set +# CONFIG_USB_SL811_HCD is not set + +## +## file: drivers/video/Kconfig +## +CONFIG_FB=y +CONFIG_FB_MODE_HELPERS=y +# CONFIG_FB_TILEBLITTING is not set +# CONFIG_FB_CIRRUS is not set +# CONFIG_FB_PM2 is not set +# CONFIG_FB_CYBER2000 is not set +# CONFIG_FB_ASILIANT is not set +# CONFIG_FB_IMSTT is not set +CONFIG_FB_STI=y +# CONFIG_FB_S1D13XXX is not set +# CONFIG_FB_NVIDIA is not set +# CONFIG_FB_RIVA is not set +# CONFIG_FB_MATROX is not set +# CONFIG_FB_RADEON is not set +# CONFIG_FB_ATY128 is not set +# CONFIG_FB_ATY is not set +# CONFIG_FB_S3 is not set +# CONFIG_FB_SAVAGE is not set +# CONFIG_FB_SIS is not set +# CONFIG_FB_NEOMAGIC is not set +# CONFIG_FB_KYRO is not set +# CONFIG_FB_3DFX is not set +# CONFIG_FB_VOODOO1 is not set +# CONFIG_FB_VT8623 is not set +# CONFIG_FB_TRIDENT is not set +# CONFIG_FB_ARK is not set +# CONFIG_FB_PM3 is not set +# CONFIG_FB_VIRTUAL is not set + +## +## file: drivers/video/console/Kconfig +## +CONFIG_DUMMY_CONSOLE_COLUMNS=160 +CONFIG_DUMMY_CONSOLE_ROWS=64 +CONFIG_FRAMEBUFFER_CONSOLE=y +CONFIG_STI_CONSOLE=y +# CONFIG_FONTS is not set +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y + +## +## file: drivers/video/logo/Kconfig +## +CONFIG_LOGO=y +CONFIG_LOGO_LINUX_MONO=y +CONFIG_LOGO_LINUX_VGA16=y +CONFIG_LOGO_LINUX_CLUT224=y +CONFIG_LOGO_PARISC_CLUT224=y + +## +## file: drivers/w1/Kconfig +## +# CONFIG_W1 is not set + +## +## file: fs/cramfs/Kconfig +## +CONFIG_CRAMFS=y + +## +## file: fs/ext2/Kconfig +## +CONFIG_EXT2_FS=y + +## +## file: fs/nfs/Kconfig +## +CONFIG_ROOT_NFS=y + +## +## file: fs/partitions/Kconfig +## +# CONFIG_PARTITION_ADVANCED is not set + +## +## file: lib/Kconfig.debug +## +# CONFIG_LOCKUP_DETECTOR is not set + +## +## file: mm/Kconfig +## +## choice: Memory model +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +## end choice + +## +## file: net/ax25/Kconfig +## +# CONFIG_HAMRADIO is not set + +## +## file: net/bluetooth/Kconfig +## +#. TODO +# CONFIG_BT is not set + +## +## file: net/decnet/Kconfig +## +# CONFIG_DECNET is not set + +## +## file: net/ipv4/Kconfig +## +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_PNP=y +# CONFIG_IP_PNP_DHCP is not set +CONFIG_IP_PNP_BOOTP=y +# CONFIG_IP_PNP_RARP is not set + +## +## file: net/ipx/Kconfig +## +# CONFIG_IPX is not set + +## +## file: net/irda/Kconfig +## +# CONFIG_IRDA is not set + +## +## file: net/lapb/Kconfig +## +# CONFIG_LAPB is not set + +## +## file: net/llc/Kconfig +## +# CONFIG_LLC2 is not set + +## +## file: net/wanrouter/Kconfig +## +# CONFIG_WAN_ROUTER is not set + +## +## file: sound/drivers/Kconfig +## +CONFIG_SND_DUMMY=m +# CONFIG_SND_VIRMIDI is not set +# CONFIG_SND_MTPAV is not set +# CONFIG_SND_SERIAL_U16550 is not set +# CONFIG_SND_MPU401 is not set + +## +## file: sound/isa/Kconfig +## +# CONFIG_SND_AD1848 is not set +# CONFIG_SND_CMI8330 is not set +# CONFIG_SND_CS4231 is not set +# CONFIG_SND_CS4236 is not set +# CONFIG_SND_ES1688 is not set +# CONFIG_SND_ES18XX is not set +# CONFIG_SND_GUSCLASSIC is not set +# CONFIG_SND_GUSEXTREME is not set +# CONFIG_SND_GUSMAX is not set +# CONFIG_SND_INTERWAVE is not set +# CONFIG_SND_INTERWAVE_STB is not set +# CONFIG_SND_OPL3SA2 is not set +# CONFIG_SND_OPTI92X_AD1848 is not set +# CONFIG_SND_OPTI92X_CS4231 is not set +# CONFIG_SND_OPTI93X is not set +# CONFIG_SND_SB8 is not set +# CONFIG_SND_SB16 is not set +# CONFIG_SND_SBAWE is not set +# CONFIG_SND_SSCAPE is not set +# CONFIG_SND_WAVEFRONT is not set + +## +## file: sound/parisc/Kconfig +## +CONFIG_SND_HARMONY=m + +## +## file: sound/pci/Kconfig +## +# CONFIG_SND_ALS4000 is not set +# CONFIG_SND_ALI5451 is not set +# CONFIG_SND_ATIIXP is not set +# CONFIG_SND_ATIIXP_MODEM is not set +# CONFIG_SND_AU8810 is not set +# CONFIG_SND_AU8820 is not set +# CONFIG_SND_AU8830 is not set +# CONFIG_SND_AZT3328 is not set +# CONFIG_SND_BT87X is not set +# CONFIG_SND_CA0106 is not set +# CONFIG_SND_CMIPCI is not set +# CONFIG_SND_CS4281 is not set +# CONFIG_SND_CS46XX is not set +# CONFIG_SND_EMU10K1 is not set +# CONFIG_SND_EMU10K1X is not set +# CONFIG_SND_ENS1370 is not set +# CONFIG_SND_ENS1371 is not set +# CONFIG_SND_ES1938 is not set +# CONFIG_SND_ES1968 is not set +# CONFIG_SND_FM801 is not set +# CONFIG_SND_HDSP is not set +# CONFIG_SND_ICE1712 is not set +# CONFIG_SND_ICE1724 is not set +# CONFIG_SND_INTEL8X0 is not set +# CONFIG_SND_INTEL8X0M is not set +# CONFIG_SND_KORG1212 is not set +# CONFIG_SND_MAESTRO3 is not set +# CONFIG_SND_MIXART is not set +# CONFIG_SND_NM256 is not set +# CONFIG_SND_RME32 is not set +# CONFIG_SND_RME96 is not set +# CONFIG_SND_RME9652 is not set +# CONFIG_SND_SONICVIBES is not set +# CONFIG_SND_TRIDENT is not set +# CONFIG_SND_VIA82XX is not set +# CONFIG_SND_VIA82XX_MODEM is not set +# CONFIG_SND_VX222 is not set +# CONFIG_SND_YMFPCI is not set + +## +## file: sound/pci/hda/Kconfig +## +# CONFIG_SND_HDA_INTEL is not set + --- linux-2.6-3.0.0~rc6.orig/debian/config/hppa/config.parisc-smp +++ linux-2.6-3.0.0~rc6/debian/config/hppa/config.parisc-smp @@ -0,0 +1,33 @@ +## +## file: arch/parisc/Kconfig +## +## choice: Processor type +CONFIG_PA7000=y +# CONFIG_PA8X00 is not set +## end choice +CONFIG_SMP=y +# CONFIG_HPUX is not set +CONFIG_NR_CPUS=8 + +## +## file: drivers/net/Kconfig +## +CONFIG_TLAN=m + +## +## file: drivers/scsi/Kconfig +## +# CONFIG_SCSI_DPT_I2O is not set +# CONFIG_SCSI_NSP32 is not set + +## +## file: drivers/scsi/pcmcia/Kconfig +## +CONFIG_PCMCIA_AHA152X=m +CONFIG_PCMCIA_NINJA_SCSI=m + +## +## file: unknown +## +# CONFIG_ARLAN is not set + --- linux-2.6-3.0.0~rc6.orig/debian/config/hppa/config.parisc64 +++ linux-2.6-3.0.0~rc6/debian/config/hppa/config.parisc64 @@ -0,0 +1,22 @@ +## +## file: arch/parisc/Kconfig +## +## choice: Processor type +# CONFIG_PA7000 is not set +CONFIG_PA8X00=y +## end choice +CONFIG_64BIT=y +# CONFIG_SMP is not set + +## +## file: drivers/net/Kconfig +## +# CONFIG_NI5010 is not set + +## +## file: mm/Kconfig +## +## choice: Memory model +# CONFIG_FLATMEM_MANUAL is not set +## end choice + --- linux-2.6-3.0.0~rc6.orig/debian/config/hppa/config.parisc +++ linux-2.6-3.0.0~rc6/debian/config/hppa/config.parisc @@ -0,0 +1,33 @@ +## +## file: arch/parisc/Kconfig +## +## choice: Processor type +CONFIG_PA7000=y +# CONFIG_PA8X00 is not set +## end choice +# CONFIG_SMP is not set +# CONFIG_HPUX is not set + +## +## file: drivers/net/Kconfig +## +# CONFIG_NI5010 is not set +CONFIG_TLAN=m + +## +## file: drivers/scsi/Kconfig +## +# CONFIG_SCSI_DPT_I2O is not set +# CONFIG_SCSI_NSP32 is not set + +## +## file: drivers/scsi/pcmcia/Kconfig +## +CONFIG_PCMCIA_AHA152X=m +CONFIG_PCMCIA_NINJA_SCSI=m + +## +## file: unknown +## +# CONFIG_ARLAN is not set + --- linux-2.6-3.0.0~rc6.orig/debian/config/sparc/config.sparc64 +++ linux-2.6-3.0.0~rc6/debian/config/sparc/config.sparc64 @@ -0,0 +1,5 @@ +## +## file: arch/sparc/Kconfig +## +# CONFIG_SMP is not set + --- linux-2.6-3.0.0~rc6.orig/debian/config/sparc/config.sparc64-smp +++ linux-2.6-3.0.0~rc6/debian/config/sparc/config.sparc64-smp @@ -0,0 +1,7 @@ +## +## file: arch/sparc/Kconfig +## +CONFIG_SMP=y +CONFIG_NR_CPUS=256 +CONFIG_SCHED_SMT=y + --- linux-2.6-3.0.0~rc6.orig/debian/config/sparc/defines +++ linux-2.6-3.0.0~rc6/debian/config/sparc/defines @@ -0,0 +1,21 @@ +[base] +flavours: + sparc64 + sparc64-smp +kernel-arch: sparc + +[image] +suggests: silo, fdutils + +[sparc32_description] +hardware: uniprocessor sparc32 (sun4m) + +[sparc32_image] +image-postproc: sparc32-image-postproc + +[sparc64_description] +hardware: uniprocessor 64-bit UltraSPARC + +[sparc64-smp_description] +hardware: multiprocessor 64-bit UltraSPARC + --- linux-2.6-3.0.0~rc6.orig/debian/config/sparc/config +++ linux-2.6-3.0.0~rc6/debian/config/sparc/config @@ -0,0 +1,626 @@ +## +## file: arch/Kconfig +## +CONFIG_KPROBES=y + +## +## file: arch/sparc/Kconfig +## +CONFIG_64BIT=y +## choice: Kernel page size +CONFIG_SPARC64_PAGE_SIZE_8KB=y +# CONFIG_SPARC64_PAGE_SIZE_64KB is not set +## end choice +CONFIG_SECCOMP=y +# CONFIG_CMDLINE_BOOL is not set +CONFIG_SUN_LDOMS=y +CONFIG_PCI=y +CONFIG_SUN_OPENPROMFS=m + +## +## file: drivers/block/Kconfig +## +CONFIG_BLK_DEV_FD=y +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_UMEM is not set +CONFIG_BLK_DEV_SX8=m +# CONFIG_BLK_DEV_UB is not set +CONFIG_BLK_DEV_RAM_SIZE=16384 +CONFIG_CDROM_PKTCDVD=m +CONFIG_CDROM_PKTCDVD_BUFFERS=8 +# CONFIG_CDROM_PKTCDVD_WCACHE is not set +CONFIG_SUNVDC=m + +## +## file: drivers/char/Kconfig +## +CONFIG_PRINTER=m +# CONFIG_LP_CONSOLE is not set +# CONFIG_PPDEV is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +## +## file: drivers/char/ipmi/Kconfig +## +# CONFIG_IPMI_HANDLER is not set + +## +## file: drivers/gpu/drm/Kconfig +## +CONFIG_DRM=y +CONFIG_DRM_TDFX=m +CONFIG_DRM_R128=m +CONFIG_DRM_RADEON=m +CONFIG_DRM_MGA=m + +## +## file: drivers/gpu/drm/nouveau/Kconfig +## +CONFIG_DRM_NOUVEAU=m +# CONFIG_DRM_NOUVEAU_BACKLIGHT is not set +# CONFIG_DRM_NOUVEAU_DEBUG is not set +CONFIG_DRM_I2C_CH7006=m +CONFIG_DRM_I2C_SIL164=m + +## +## file: drivers/hid/usbhid/Kconfig +## +CONFIG_USB_HID=y + +## +## file: drivers/hwmon/Kconfig +## +# CONFIG_SENSORS_ADM1021 is not set +# CONFIG_SENSORS_ADM1025 is not set +# CONFIG_SENSORS_ADM1026 is not set +# CONFIG_SENSORS_ADM1031 is not set +# CONFIG_SENSORS_ASB100 is not set +# CONFIG_SENSORS_DS1621 is not set +# CONFIG_SENSORS_F71805F is not set +# CONFIG_SENSORS_GL518SM is not set +# CONFIG_SENSORS_GL520SM is not set +# CONFIG_SENSORS_IT87 is not set +# CONFIG_SENSORS_LM63 is not set +# CONFIG_SENSORS_LM75 is not set +# CONFIG_SENSORS_LM77 is not set +# CONFIG_SENSORS_LM78 is not set +# CONFIG_SENSORS_LM80 is not set +# CONFIG_SENSORS_LM83 is not set +# CONFIG_SENSORS_LM85 is not set +# CONFIG_SENSORS_LM87 is not set +# CONFIG_SENSORS_LM90 is not set +# CONFIG_SENSORS_LM92 is not set +# CONFIG_SENSORS_MAX1619 is not set +# CONFIG_SENSORS_PC87360 is not set +# CONFIG_SENSORS_PCF8591 is not set +# CONFIG_SENSORS_SIS5595 is not set +# CONFIG_SENSORS_SMSC47M1 is not set +# CONFIG_SENSORS_SMSC47B397 is not set +# CONFIG_SENSORS_VIA686A is not set +# CONFIG_SENSORS_W83781D is not set +# CONFIG_SENSORS_W83L785TS is not set +# CONFIG_SENSORS_W83627HF is not set + +## +## file: drivers/i2c/Kconfig +## +CONFIG_I2C=m +CONFIG_I2C_CHARDEV=m +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set + +## +## file: drivers/i2c/busses/Kconfig +## +# CONFIG_I2C_ALI1535 is not set +# CONFIG_I2C_ALI1563 is not set +# CONFIG_I2C_ALI15X3 is not set +# CONFIG_I2C_AMD756 is not set +# CONFIG_I2C_AMD8111 is not set +# CONFIG_I2C_I801 is not set +# CONFIG_I2C_PIIX4 is not set +# CONFIG_I2C_NFORCE2 is not set +# CONFIG_I2C_SIS5595 is not set +# CONFIG_I2C_SIS630 is not set +# CONFIG_I2C_SIS96X is not set +# CONFIG_I2C_VIA is not set +# CONFIG_I2C_VIAPRO is not set +CONFIG_I2C_PARPORT=m +CONFIG_I2C_PARPORT_LIGHT=m +# CONFIG_I2C_PCA_ISA is not set +# CONFIG_I2C_STUB is not set + +## +## file: drivers/ide/Kconfig +## +CONFIG_IDE=y +# CONFIG_BLK_DEV_IDE_SATA is not set +CONFIG_IDE_GD=y +CONFIG_BLK_DEV_IDECD=m +CONFIG_BLK_DEV_IDETAPE=m +CONFIG_IDE_GENERIC=m +# CONFIG_BLK_DEV_OFFBOARD is not set +CONFIG_BLK_DEV_GENERIC=m +# CONFIG_BLK_DEV_OPTI621 is not set +# CONFIG_BLK_DEV_AEC62XX is not set +CONFIG_BLK_DEV_ALI15X3=m +# CONFIG_BLK_DEV_AMD74XX is not set +# CONFIG_BLK_DEV_CMD64X is not set +# CONFIG_BLK_DEV_TRIFLEX is not set +CONFIG_BLK_DEV_CY82C693=m +CONFIG_BLK_DEV_CS5520=m +CONFIG_BLK_DEV_CS5530=m +# CONFIG_BLK_DEV_HPT366 is not set +# CONFIG_BLK_DEV_SC1200 is not set +# CONFIG_BLK_DEV_PIIX is not set +CONFIG_BLK_DEV_NS87415=m +CONFIG_BLK_DEV_PDC202XX_OLD=m +CONFIG_BLK_DEV_PDC202XX_NEW=m +CONFIG_BLK_DEV_SVWKS=m +CONFIG_BLK_DEV_SIIMAGE=m +# CONFIG_BLK_DEV_SLC90E66 is not set +CONFIG_BLK_DEV_TRM290=m +CONFIG_BLK_DEV_VIA82CXXX=m + +## +## file: drivers/input/Kconfig +## +# CONFIG_INPUT_JOYDEV is not set + +## +## file: drivers/input/gameport/Kconfig +## +# CONFIG_GAMEPORT is not set + +## +## file: drivers/input/joystick/Kconfig +## +# CONFIG_INPUT_JOYSTICK is not set + +## +## file: drivers/input/keyboard/Kconfig +## +CONFIG_INPUT_KEYBOARD=y +CONFIG_KEYBOARD_ATKBD=y +CONFIG_KEYBOARD_LKKBD=m +# CONFIG_KEYBOARD_NEWTON is not set +CONFIG_KEYBOARD_SUNKBD=y +# CONFIG_KEYBOARD_XTKBD is not set + +## +## file: drivers/input/misc/Kconfig +## +CONFIG_INPUT_MISC=y +CONFIG_INPUT_SPARCSPKR=m +# CONFIG_INPUT_UINPUT is not set + +## +## file: drivers/input/mouse/Kconfig +## +CONFIG_INPUT_MOUSE=y +CONFIG_MOUSE_PS2=y +CONFIG_MOUSE_SERIAL=y +# CONFIG_MOUSE_VSXXXAA is not set + +## +## file: drivers/input/serio/Kconfig +## +CONFIG_SERIO=y +CONFIG_SERIO_I8042=y +# CONFIG_SERIO_SERPORT is not set +# CONFIG_SERIO_PARKBD is not set +# CONFIG_SERIO_PCIPS2 is not set +CONFIG_SERIO_LIBPS2=y +# CONFIG_SERIO_RAW is not set + +## +## file: drivers/input/touchscreen/Kconfig +## +# CONFIG_INPUT_TOUCHSCREEN is not set + +## +## file: drivers/media/radio/Kconfig +## +# CONFIG_RADIO_MAXIRADIO is not set +# CONFIG_USB_DSBR is not set + +## +## file: drivers/media/video/Kconfig +## +# CONFIG_VIDEO_BWQCAM is not set +# CONFIG_VIDEO_CQCAM is not set +# CONFIG_VIDEO_W9966 is not set +# CONFIG_VIDEO_MXB is not set +# CONFIG_VIDEO_HEXIUM_ORION is not set +# CONFIG_VIDEO_HEXIUM_GEMINI is not set + +## +## file: drivers/media/video/bt8xx/Kconfig +## +CONFIG_VIDEO_BT848=m + +## +## file: drivers/media/video/cx88/Kconfig +## +# CONFIG_VIDEO_CX88 is not set + +## +## file: drivers/media/video/zoran/Kconfig +## +# CONFIG_VIDEO_ZORAN is not set + +## +## file: drivers/message/i2o/Kconfig +## +# CONFIG_I2O is not set + +## +## file: drivers/mmc/Kconfig +## +# CONFIG_MMC is not set + +## +## file: drivers/mtd/Kconfig +## +# CONFIG_MTD is not set + +## +## file: drivers/net/Kconfig +## +CONFIG_SUNLANCE=m +CONFIG_HAPPYMEAL=m +CONFIG_SUNBMAC=m +CONFIG_SUNQE=m +CONFIG_SUNGEM=m +CONFIG_SUNVNET=m +CONFIG_NET_VENDOR_3COM=y +CONFIG_VORTEX=m +CONFIG_TYPHOON=m +CONFIG_NET_PCI=y +# CONFIG_AMD8111_ETH is not set +CONFIG_ADAPTEC_STARFIRE=m +CONFIG_B44=m +# CONFIG_FORCEDETH is not set +CONFIG_E100=m +CONFIG_FEALNX=m +CONFIG_NATSEMI=m +CONFIG_NE2K_PCI=m +# CONFIG_8139CP is not set +CONFIG_8139TOO=m +# CONFIG_8139TOO_PIO is not set +# CONFIG_8139TOO_TUNE_TWISTER is not set +# CONFIG_8139TOO_8129 is not set +# CONFIG_8139_OLD_RX_RESET is not set +CONFIG_SIS900=m +CONFIG_EPIC100=m +CONFIG_SUNDANCE=m +CONFIG_SUNDANCE_MMIO=y +CONFIG_VIA_RHINE=m +# CONFIG_VIA_RHINE_MMIO is not set +CONFIG_MYRI_SBUS=m +CONFIG_FDDI=y +CONFIG_SKFP=m +# CONFIG_HIPPI is not set +CONFIG_PLIP=m +CONFIG_NET_FC=y +# CONFIG_NETPOLL_TRAP is not set + +## +## file: drivers/net/arcnet/Kconfig +## +# CONFIG_ARCNET is not set + +## +## file: drivers/net/tokenring/Kconfig +## +# CONFIG_TR is not set + +## +## file: drivers/net/tulip/Kconfig +## +CONFIG_NET_TULIP=y +# CONFIG_DE2104X is not set +CONFIG_TULIP=m +# CONFIG_TULIP_MWI is not set +# CONFIG_TULIP_MMIO is not set +# CONFIG_DE4X5 is not set +CONFIG_WINBOND_840=m +CONFIG_DM9102=m + +## +## file: drivers/net/wan/Kconfig +## +# CONFIG_WAN is not set + +## +## file: drivers/parport/Kconfig +## +CONFIG_PARPORT_SUNBPP=m + +## +## file: drivers/sbus/char/Kconfig +## +CONFIG_SUN_OPENPROMIO=y +CONFIG_OBP_FLASH=m +CONFIG_BBC_I2C=m +CONFIG_ENVCTRL=m +CONFIG_DISPLAY7SEG=m + +## +## file: drivers/scsi/Kconfig +## +CONFIG_SCSI_ARCMSR=m +CONFIG_SCSI_DMX3191D=m +# CONFIG_SCSI_FUTURE_DOMAIN is not set +# CONFIG_SCSI_IPS is not set +CONFIG_SCSI_INITIO=m +# CONFIG_SCSI_INIA100 is not set +CONFIG_SCSI_SYM53C8XX_2=m +CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1 +CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16 +CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 +CONFIG_SCSI_IPR=m +# CONFIG_SCSI_IPR_TRACE is not set +# CONFIG_SCSI_IPR_DUMP is not set +CONFIG_SCSI_QLOGIC_1280=m +CONFIG_SCSI_QLOGICPTI=m +CONFIG_SCSI_DC395x=m +# CONFIG_SCSI_DC390T is not set +CONFIG_SCSI_SUNESP=m + +## +## file: drivers/scsi/megaraid/Kconfig.megaraid +## +CONFIG_MEGARAID_NEWGEN=y +CONFIG_MEGARAID_MM=m +CONFIG_MEGARAID_MAILBOX=m +CONFIG_MEGARAID_LEGACY=m + +## +## file: drivers/telephony/Kconfig +## +# CONFIG_PHONE is not set + +## +## file: drivers/tty/Kconfig +## +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +# CONFIG_SERIAL_NONSTANDARD is not set + +## +## file: drivers/tty/serial/Kconfig +## +CONFIG_SERIAL_SUNZILOG=y +CONFIG_SERIAL_SUNZILOG_CONSOLE=y +CONFIG_SERIAL_SUNSU=y +CONFIG_SERIAL_SUNSU_CONSOLE=y +CONFIG_SERIAL_SUNSAB=y +CONFIG_SERIAL_SUNSAB_CONSOLE=y +CONFIG_SERIAL_SUNHV=y +CONFIG_SERIAL_JSM=m + +## +## file: drivers/usb/Kconfig +## +CONFIG_USB=m +# CONFIG_USB_USS720 is not set + +## +## file: drivers/usb/host/Kconfig +## +CONFIG_USB_EHCI_HCD=m +# CONFIG_USB_EHCI_ROOT_HUB_TT is not set +CONFIG_USB_OHCI_HCD=m +CONFIG_USB_UHCI_HCD=m +# CONFIG_USB_SL811_HCD is not set + +## +## file: drivers/video/Kconfig +## +CONFIG_FB=y +CONFIG_FB_MODE_HELPERS=y +# CONFIG_FB_TILEBLITTING is not set +# CONFIG_FB_CIRRUS is not set +CONFIG_FB_PM2=y +# CONFIG_FB_PM2_FIFO_DISCONNECT is not set +# CONFIG_FB_ASILIANT is not set +# CONFIG_FB_IMSTT is not set +CONFIG_FB_SBUS=y +# CONFIG_FB_BW2 is not set +# CONFIG_FB_CG3 is not set +CONFIG_FB_CG6=y +CONFIG_FB_FFB=y +# CONFIG_FB_TCX is not set +# CONFIG_FB_CG14 is not set +# CONFIG_FB_P9100 is not set +# CONFIG_FB_LEO is not set +CONFIG_FB_XVR500=y +CONFIG_FB_XVR2500=y +CONFIG_FB_XVR1000=y +# CONFIG_FB_S1D13XXX is not set +# CONFIG_FB_NVIDIA is not set +# CONFIG_FB_RIVA is not set +# CONFIG_FB_MATROX is not set +CONFIG_FB_RADEON=y +# CONFIG_FB_RADEON_I2C is not set +# CONFIG_FB_RADEON_DEBUG is not set +CONFIG_FB_ATY128=y +CONFIG_FB_ATY=y +CONFIG_FB_ATY_CT=y +# CONFIG_FB_ATY_GENERIC_LCD is not set +CONFIG_FB_ATY_GX=y +# CONFIG_FB_SAVAGE is not set +# CONFIG_FB_SIS is not set +# CONFIG_FB_NEOMAGIC is not set +# CONFIG_FB_KYRO is not set +# CONFIG_FB_3DFX is not set +# CONFIG_FB_VOODOO1 is not set +# CONFIG_FB_TRIDENT is not set +# CONFIG_FB_VIRTUAL is not set + +## +## file: drivers/video/backlight/Kconfig +## +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set + +## +## file: drivers/video/console/Kconfig +## +CONFIG_FRAMEBUFFER_CONSOLE=y +# CONFIG_FONTS is not set +CONFIG_FONT_8x16=y +CONFIG_FONT_SUN8x16=y +# CONFIG_FONT_SUN12x22 is not set + +## +## file: drivers/video/logo/Kconfig +## +CONFIG_LOGO=y +# CONFIG_LOGO_LINUX_MONO is not set +# CONFIG_LOGO_LINUX_VGA16 is not set +# CONFIG_LOGO_LINUX_CLUT224 is not set +CONFIG_LOGO_SUN_CLUT224=y + +## +## file: drivers/w1/Kconfig +## +# CONFIG_W1 is not set + +## +## file: fs/partitions/Kconfig +## +CONFIG_SUN_PARTITION=y +CONFIG_EFI_PARTITION=y + +## +## file: mm/Kconfig +## +## choice: Memory model +# CONFIG_FLATMEM_MANUAL is not set +# CONFIG_DISCONTIGMEM_MANUAL is not set +CONFIG_SPARSEMEM_MANUAL=y +## end choice + +## +## file: net/ax25/Kconfig +## +# CONFIG_HAMRADIO is not set + +## +## file: net/bluetooth/Kconfig +## +# CONFIG_BT is not set + +## +## file: net/decnet/Kconfig +## +CONFIG_DECNET=m +CONFIG_DECNET_ROUTER=y + +## +## file: net/ipv4/Kconfig +## +CONFIG_IP_PNP=y +# CONFIG_IP_PNP_DHCP is not set +# CONFIG_IP_PNP_BOOTP is not set +CONFIG_IP_PNP_RARP=y +#. TODO +# CONFIG_NET_IPGRE is not set +#. TODO +CONFIG_ARPD=y + +## +## file: net/ipv6/Kconfig +## +CONFIG_IPV6=y + +## +## file: net/ipx/Kconfig +## +CONFIG_IPX=m +# CONFIG_IPX_INTERN is not set + +## +## file: net/irda/Kconfig +## +# CONFIG_IRDA is not set + +## +## file: net/lapb/Kconfig +## +# CONFIG_LAPB is not set + +## +## file: net/wanrouter/Kconfig +## +# CONFIG_WAN_ROUTER is not set + +## +## file: sound/drivers/Kconfig +## +# CONFIG_SND_DUMMY is not set +CONFIG_SND_VIRMIDI=m +# CONFIG_SND_MTPAV is not set +# CONFIG_SND_SERIAL_U16550 is not set +# CONFIG_SND_MPU401 is not set + +## +## file: sound/pci/Kconfig +## +CONFIG_SND_ALI5451=m +# CONFIG_SND_ATIIXP is not set +# CONFIG_SND_ATIIXP_MODEM is not set +# CONFIG_SND_AU8810 is not set +# CONFIG_SND_AU8820 is not set +# CONFIG_SND_AU8830 is not set +# CONFIG_SND_AZT3328 is not set +# CONFIG_SND_BT87X is not set +# CONFIG_SND_CA0106 is not set +CONFIG_SND_CMIPCI=m +# CONFIG_SND_CS4281 is not set +# CONFIG_SND_CS46XX is not set +CONFIG_SND_EMU10K1=m +# CONFIG_SND_EMU10K1X is not set +CONFIG_SND_ENS1370=m +CONFIG_SND_ENS1371=m +# CONFIG_SND_ES1938 is not set +# CONFIG_SND_ES1968 is not set +# CONFIG_SND_FM801 is not set +# CONFIG_SND_HDSP is not set +# CONFIG_SND_ICE1712 is not set +# CONFIG_SND_ICE1724 is not set +# CONFIG_SND_INTEL8X0 is not set +# CONFIG_SND_INTEL8X0M is not set +# CONFIG_SND_KORG1212 is not set +CONFIG_SND_MAESTRO3=m +# CONFIG_SND_MIXART is not set +# CONFIG_SND_NM256 is not set +# CONFIG_SND_RME32 is not set +# CONFIG_SND_RME96 is not set +# CONFIG_SND_RME9652 is not set +# CONFIG_SND_SONICVIBES is not set +# CONFIG_SND_TRIDENT is not set +# CONFIG_SND_VIA82XX is not set +# CONFIG_SND_VIA82XX_MODEM is not set +# CONFIG_SND_VX222 is not set +# CONFIG_SND_YMFPCI is not set + +## +## file: sound/pci/hda/Kconfig +## +# CONFIG_SND_HDA_INTEL is not set + +## +## file: sound/sparc/Kconfig +## +CONFIG_SND_SUN_AMD7930=m +CONFIG_SND_SUN_CS4231=m +CONFIG_SND_SUN_DBRI=m + --- linux-2.6-3.0.0~rc6.orig/debian/config/sh4/defines +++ linux-2.6-3.0.0~rc6/debian/config/sh4/defines @@ -0,0 +1,28 @@ +[base] +flavours: + sh7751r + sh7785lcr +kernel-arch: sh + +[image] +suggests: fdutils + +[sh7751r_build] +image-file: arch/sh/boot/zImage + +[sh7751r_description] +hardware: sh7751r +hardware-long: Renesas SH7751R R2D plus board + +[sh7785lcr_build] +image-file: arch/sh/boot/zImage + +[sh7785lcr_description] +hardware: sh7785lcr +hardware-long: Renesas SH7785 reference board + +[sh7785lcr_image] +recommends: uboot-mkimage +# Kernel partition size: 4MB +check-size: 4194304 + --- linux-2.6-3.0.0~rc6.orig/debian/config/sh4/config +++ linux-2.6-3.0.0~rc6/debian/config/sh4/config @@ -0,0 +1,56 @@ +## +## file: arch/sh/Kconfig +## +CONFIG_SH_CPU_FREQ=y +CONFIG_KEXEC=y +CONFIG_SECCOMP=y +CONFIG_VIRTUALIZATION=y + +## +## file: arch/sh/Kconfig.cpu +## +## choice: Endianess selection +CONFIG_CPU_LITTLE_ENDIAN=y +## end choice +CONFIG_SH_FPU=y +CONFIG_SH_STORE_QUEUES=y + +## +## file: arch/sh/drivers/Kconfig +## +CONFIG_HEARTBEAT=y + +## +## file: arch/sh/mm/Kconfig +## +## choice: Cache mode +CONFIG_CACHE_WRITEBACK=y +## end choice + +## +## file: drivers/cpufreq/Kconfig +## +CONFIG_CPU_FREQ=y +CONFIG_CPU_FREQ_STAT=y +CONFIG_CPU_FREQ_STAT_DETAILS=y +CONFIG_CPU_FREQ_GOV_PERFORMANCE=y + +## +## file: kernel/Kconfig.hz +## +## choice: Timer frequency +CONFIG_HZ_250=y +## end choice + +## +## file: kernel/irq/Kconfig +## +CONFIG_SPARSE_IRQ=y + +## +## file: kernel/Kconfig.preempt +## +## choice: Preemption Model +CONFIG_PREEMPT_NONE=y +## end choice + --- linux-2.6-3.0.0~rc6.orig/debian/config/sh4/config.sh7785lcr +++ linux-2.6-3.0.0~rc6/debian/config/sh4/config.sh7785lcr @@ -0,0 +1,267 @@ +## +## file: arch/sh/Kconfig +## +## choice: Processor sub-type selection +CONFIG_CPU_SUBTYPE_SH7785=y +## end choice +CONFIG_SH_TIMER_TMU=y +CONFIG_SH_PCLK_FREQ=50000000 +CONFIG_PCI=y + +## +## file: arch/sh/boards/Kconfig +## +CONFIG_SH_SH7785LCR=y + +## +## file: arch/sh/Kconfig.cpu +## +## choice: Endianess selection +CONFIG_CPU_LITTLE_ENDIAN=y +## end choice +CONFIG_SH_FPU=y +CONFIG_SH_STORE_QUEUES=y + +## +## file: arch/sh/mm/Kconfig +## +CONFIG_MMU=y +CONFIG_FORCE_MAX_ZONEORDER=11 +CONFIG_MEMORY_START=0x48000000 +CONFIG_MEMORY_SIZE=0x18000000 +CONFIG_VSYSCALL=y +## choice: Kernel page size +CONFIG_PAGE_SIZE_4KB=y +## end choice +## choice: HugeTLB page size +CONFIG_HUGETLB_PAGE_SIZE_64K=y +## end choice + +## +## file: drivers/ata/Kconfig +## +CONFIG_ATA=y +CONFIG_ATA_VERBOSE_ERROR=y +CONFIG_SATA_PMP=y +CONFIG_ATA_SFF=y +CONFIG_SATA_SIL=y + +## +## file: drivers/dma/Kconfig +## +CONFIG_DMADEVICES=y + +## +## file: drivers/hid/Kconfig +## +CONFIG_HID_SUPPORT=y +CONFIG_HID=y + +## +## file: drivers/hid/usbhid/Kconfig +## +CONFIG_USB_HID=y + +## +## file: drivers/i2c/Kconfig +## +CONFIG_I2C=y +CONFIG_I2C_COMPAT=y +CONFIG_I2C_HELPER_AUTO=y + +## +## file: drivers/i2c/algos/Kconfig +## +CONFIG_I2C_ALGOPCA=y + +## +## file: drivers/i2c/busses/Kconfig +## +CONFIG_I2C_PCA_PLATFORM=y + +## +## file: drivers/input/Kconfig +## +CONFIG_INPUT=y +CONFIG_INPUT_MOUSEDEV=y +CONFIG_INPUT_MOUSEDEV_PSAUX=y +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 +CONFIG_INPUT_EVDEV=y + +## +## file: drivers/input/keyboard/Kconfig +## +CONFIG_INPUT_KEYBOARD=y +CONFIG_KEYBOARD_ATKBD=y + +## +## file: drivers/input/mouse/Kconfig +## +CONFIG_INPUT_MOUSE=y +CONFIG_MOUSE_PS2=y +CONFIG_MOUSE_PS2_ALPS=y +CONFIG_MOUSE_PS2_LOGIPS2PP=y +CONFIG_MOUSE_PS2_SYNAPTICS=y +CONFIG_MOUSE_PS2_TRACKPOINT=y + +## +## file: drivers/input/serio/Kconfig +## +CONFIG_SERIO=y +CONFIG_SERIO_I8042=y +CONFIG_SERIO_SERPORT=y +CONFIG_SERIO_LIBPS2=y + +## +## file: drivers/mfd/Kconfig +## +CONFIG_MFD_SM501=y + +## +## file: drivers/mtd/Kconfig +## +CONFIG_MTD=y +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLKDEVS=y +CONFIG_MTD_BLOCK=y + +## +## file: drivers/mtd/chips/Kconfig +## +CONFIG_MTD_CFI=y +CONFIG_MTD_MAP_BANK_WIDTH_1=y +CONFIG_MTD_MAP_BANK_WIDTH_2=y +CONFIG_MTD_MAP_BANK_WIDTH_4=y +CONFIG_MTD_CFI_I1=y +CONFIG_MTD_CFI_I2=y +CONFIG_MTD_CFI_AMDSTD=y + +## +## file: drivers/mtd/maps/Kconfig +## +CONFIG_MTD_PHYSMAP=y + +## +## file: drivers/net/Kconfig +## +CONFIG_NETDEVICES=y +CONFIG_MII=y +CONFIG_NETDEV_1000=y +CONFIG_R8169=y + +## +## file: drivers/rtc/Kconfig +## +CONFIG_RTC_CLASS=y +CONFIG_RTC_HCTOSYS=y +CONFIG_RTC_HCTOSYS_DEVICE="rtc0" +CONFIG_RTC_INTF_SYSFS=y +CONFIG_RTC_INTF_PROC=y +CONFIG_RTC_INTF_DEV=y +CONFIG_RTC_DRV_RS5C372=y +# CONFIG_RTC_DRV_SH is not set +# CONFIG_RTC_DRV_GENERIC is not set + +## +## file: drivers/scsi/Kconfig +## +CONFIG_SCSI=y +CONFIG_BLK_DEV_SD=y + +## +## file: drivers/tty/Kconfig +## +CONFIG_VT=y +CONFIG_CONSOLE_TRANSLATIONS=y +CONFIG_VT_CONSOLE=y +CONFIG_VT_HW_CONSOLE_BINDING=y +CONFIG_UNIX98_PTYS=y +CONFIG_DEVPTS_MULTIPLE_INSTANCES=y + +## +## file: drivers/tty/serial/Kconfig +## +CONFIG_SERIAL_SH_SCI=y +CONFIG_SERIAL_SH_SCI_NR_UARTS=6 +CONFIG_SERIAL_SH_SCI_CONSOLE=y + +## +## file: drivers/usb/Kconfig +## +CONFIG_USB_SUPPORT=y +CONFIG_USB=y + +## +## file: drivers/usb/core/Kconfig +## +CONFIG_USB_DEVICE_CLASS=y + +## +## file: drivers/usb/host/Kconfig +## +CONFIG_USB_EHCI_HCD=y +CONFIG_USB_R8A66597_HCD=y + +## +## file: drivers/usb/storage/Kconfig +## +CONFIG_USB_STORAGE=y + +## +## file: drivers/video/Kconfig +## +CONFIG_FB=y +CONFIG_FB_SM501=y + +## +## file: drivers/video/console/Kconfig +## +CONFIG_FRAMEBUFFER_CONSOLE=y +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y + +## +## file: drivers/video/logo/Kconfig +## +CONFIG_LOGO=y +CONFIG_LOGO_SUPERH_MONO=y +CONFIG_LOGO_SUPERH_VGA16=y +CONFIG_LOGO_SUPERH_CLUT224=y + +## +## file: drivers/watchdog/Kconfig +## +CONFIG_WATCHDOG=y +CONFIG_SH_WDT=y +# CONFIG_USBPCWATCHDOG is not set + +## +## file: fs/ext3/Kconfig +## +CONFIG_EXT3_FS=y + +## +## file: kernel/time/Kconfig +## +CONFIG_NO_HZ=y +CONFIG_HIGH_RES_TIMERS=y + +## +## file: mm/Kconfig +## +## choice: Memory model +CONFIG_SPARSEMEM_MANUAL=y +## end choice +CONFIG_MIGRATION=y +CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 + +## +## file: unknown +## +CONFIG_HAVE_MLOCK=y +CONFIG_HAVE_MLOCKED_PAGE_BIT=y +CONFIG_PMB_ENABLE=y +CONFIG_PMB_FIXED=y +CONFIG_SH_PCIDMA_NONCOHERENT=y + --- linux-2.6-3.0.0~rc6.orig/debian/config/sh4/config.sh7751r +++ linux-2.6-3.0.0~rc6/debian/config/sh4/config.sh7751r @@ -0,0 +1,212 @@ +## +## file: arch/sh/Kconfig +## +## choice: Processor sub-type selection +CONFIG_CPU_SUBTYPE_SH7751R=y +## end choice +CONFIG_SH_TIMER_TMU=y +CONFIG_SH_PCLK_FREQ=60000000 +CONFIG_PCI=y + +## +## file: arch/sh/boards/Kconfig +## +CONFIG_SH_RTS7751R2D=y + +## +## file: arch/sh/boards/mach-r2d/Kconfig +## +CONFIG_RTS7751R2D_PLUS=y +CONFIG_RTS7751R2D_1=y + +## +## file: arch/sh/Kconfig.cpu +## +## choice: Endianess selection +CONFIG_CPU_LITTLE_ENDIAN=y +## end choice +CONFIG_SH_FPU=y + +## +## file: arch/sh/mm/Kconfig +## +CONFIG_MMU=y +CONFIG_FORCE_MAX_ZONEORDER=11 +CONFIG_MEMORY_START=0x0c000000 +CONFIG_MEMORY_SIZE=0x04000000 +CONFIG_VSYSCALL=y +## choice: Kernel page size +CONFIG_PAGE_SIZE_4KB=y +## end choice + +## +## file: drivers/ata/Kconfig +## +CONFIG_ATA=y +CONFIG_ATA_VERBOSE_ERROR=y +CONFIG_SATA_PMP=y +CONFIG_ATA_SFF=y +CONFIG_PATA_PLATFORM=y + +## +## file: drivers/hid/Kconfig +## +CONFIG_HID_SUPPORT=y +CONFIG_HID=y + +## +## file: drivers/hid/usbhid/Kconfig +## +CONFIG_USB_HID=y + +## +## file: drivers/input/Kconfig +## +CONFIG_INPUT=y + +## +## file: drivers/input/keyboard/Kconfig +## +CONFIG_INPUT_KEYBOARD=y + +## +## file: drivers/mfd/Kconfig +## +CONFIG_MFD_SM501=y + +## +## file: drivers/mtd/Kconfig +## +CONFIG_MTD=y +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLKDEVS=y +CONFIG_MTD_BLOCK=y + +## +## file: drivers/mtd/chips/Kconfig +## +CONFIG_MTD_CFI=y +CONFIG_MTD_MAP_BANK_WIDTH_1=y +CONFIG_MTD_MAP_BANK_WIDTH_2=y +CONFIG_MTD_MAP_BANK_WIDTH_4=y +CONFIG_MTD_CFI_I1=y +CONFIG_MTD_CFI_I2=y +CONFIG_MTD_CFI_AMDSTD=y + +## +## file: drivers/mtd/maps/Kconfig +## +CONFIG_MTD_PHYSMAP=y + +## +## file: drivers/net/Kconfig +## +CONFIG_NETDEVICES=y +CONFIG_MII=y +CONFIG_NET_ETHERNET=y +CONFIG_NET_PCI=y +CONFIG_8139CP=y + +## +## file: drivers/rtc/Kconfig +## +CONFIG_RTC_CLASS=y +CONFIG_RTC_HCTOSYS=y +CONFIG_RTC_HCTOSYS_DEVICE="rtc0" +CONFIG_RTC_INTF_SYSFS=y +CONFIG_RTC_INTF_PROC=y +CONFIG_RTC_INTF_DEV=y +CONFIG_RTC_DRV_R9701=y +# CONFIG_RTC_DRV_SH is not set +# CONFIG_RTC_DRV_GENERIC is not set + +## +## file: drivers/scsi/Kconfig +## +CONFIG_SCSI=y +CONFIG_BLK_DEV_SD=y + +## +## file: drivers/spi/Kconfig +## +CONFIG_SPI=y +CONFIG_SPI_BITBANG=y +CONFIG_SPI_SH_SCI=y + +## +## file: drivers/tty/Kconfig +## +CONFIG_VT=y +CONFIG_CONSOLE_TRANSLATIONS=y +CONFIG_VT_CONSOLE=y +CONFIG_VT_HW_CONSOLE_BINDING=y + +## +## file: drivers/tty/serial/Kconfig +## +CONFIG_SERIAL_SH_SCI=y +CONFIG_SERIAL_SH_SCI_NR_UARTS=6 +CONFIG_SERIAL_SH_SCI_CONSOLE=y + +## +## file: drivers/usb/Kconfig +## +CONFIG_USB_SUPPORT=y +CONFIG_USB=y + +## +## file: drivers/usb/core/Kconfig +## +CONFIG_USB_DEVICE_CLASS=y + +## +## file: drivers/usb/host/Kconfig +## +CONFIG_USB_OHCI_HCD=y + +## +## file: drivers/video/Kconfig +## +CONFIG_FB=y +CONFIG_FB_SM501=y + +## +## file: drivers/video/console/Kconfig +## +CONFIG_FRAMEBUFFER_CONSOLE=y +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y + +## +## file: drivers/video/logo/Kconfig +## +CONFIG_LOGO=y +CONFIG_LOGO_SUPERH_MONO=y +CONFIG_LOGO_SUPERH_VGA16=y +CONFIG_LOGO_SUPERH_CLUT224=y + +## +## file: fs/ext3/Kconfig +## +CONFIG_EXT3_FS=y + +## +## file: kernel/time/Kconfig +## +CONFIG_NO_HZ=y +CONFIG_HIGH_RES_TIMERS=y + +## +## file: mm/Kconfig +## +## choice: Memory model +CONFIG_FLATMEM_MANUAL=y +## end choice + +## +## file: unknown +## +CONFIG_HAVE_MLOCK=y +CONFIG_HAVE_MLOCKED_PAGE_BIT=y +CONFIG_SH_PCIDMA_NONCOHERENT=y + --- linux-2.6-3.0.0~rc6.orig/debian/config/amd64/defines +++ linux-2.6-3.0.0~rc6/debian/config/amd64/defines @@ -0,0 +1,26 @@ +[base] +flavours: + amd64 +kernel-arch: x86 + +[image] +bootloaders: grub-pc extlinux lilo +configs: + kernelarch-x86/config + +[image-dbg] +enabled: true + +[amd64_description] +hardware: 64-bit PCs +hardware-long: PCs with AMD64 or Intel 64 processors +parts: xen + +[amd64_image] +configs: + kernelarch-x86/config-arch-64 + +[amd64_xen] +dom0-support: true +flavours: + amd64 --- linux-2.6-3.0.0~rc6.orig/debian/config/powerpc/config.powerpc +++ linux-2.6-3.0.0~rc6/debian/config/powerpc/config.powerpc @@ -0,0 +1,102 @@ +## +## file: arch/powerpc/Kconfig +## +CONFIG_HIGHMEM=y +# CONFIG_ISA is not set + +## +## file: arch/powerpc/platforms/512x/Kconfig +## +# CONFIG_MPC5121_ADS is not set + +## +## file: arch/powerpc/platforms/52xx/Kconfig +## +CONFIG_PPC_MPC52xx=y +# CONFIG_PPC_MPC5200_SIMPLE is not set +CONFIG_PPC_EFIKA=y +# CONFIG_PPC_LITE5200 is not set +CONFIG_PPC_MPC5200_BUGFIX=y + +## +## file: arch/powerpc/platforms/chrp/Kconfig +## +CONFIG_PPC_CHRP=y + +## +## file: arch/powerpc/platforms/Kconfig.cputype +## +# CONFIG_PPC64 is not set +## choice: Processor Type +# CONFIG_PPC_85xx is not set +# CONFIG_PPC_8xx is not set +# CONFIG_40x is not set +# CONFIG_44x is not set +# CONFIG_E200 is not set +## end choice +CONFIG_ALTIVEC=y +# CONFIG_SMP is not set + +## +## file: arch/powerpc/platforms/prep/Kconfig +## +# CONFIG_PPC_PREP is not set + +## +## file: arch/powerpc/sysdev/bestcomm/Kconfig +## +CONFIG_PPC_BESTCOMM=m + +## +## file: drivers/ata/Kconfig +## +CONFIG_PATA_MPC52xx=m + +## +## file: drivers/block/Kconfig +## +CONFIG_MAC_FLOPPY=y + +## +## file: drivers/macintosh/Kconfig +## +CONFIG_SENSORS_AMS=m +CONFIG_SENSORS_AMS_PMU=y +CONFIG_SENSORS_AMS_I2C=y + +## +## file: drivers/net/Kconfig +## +CONFIG_MII=y +CONFIG_FEC_MPC52xx=m +CONFIG_FEC_MPC52xx_MDIO=y + +## +## file: drivers/spi/Kconfig +## +CONFIG_SPI_MPC52xx_PSC=m + +## +## file: drivers/tty/serial/Kconfig +## +CONFIG_SERIAL_MPC52xx=y +CONFIG_SERIAL_MPC52xx_CONSOLE=y +CONFIG_SERIAL_MPC52xx_CONSOLE_BAUD=115200 + +## +## file: drivers/video/Kconfig +## +CONFIG_FB_CONTROL=y +CONFIG_FB_PLATINUM=y +CONFIG_FB_VALKYRIE=y +CONFIG_FB_IMSTT=y + +## +## file: mm/Kconfig +## +## choice: Memory model +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +## end choice + --- linux-2.6-3.0.0~rc6.orig/debian/config/powerpc/defines +++ linux-2.6-3.0.0~rc6/debian/config/powerpc/defines @@ -0,0 +1,21 @@ +[base] +flavours: + powerpc + powerpc-smp + powerpc64 +kernel-arch: powerpc + +[image] +suggests: mkvmlinuz + +[powerpc_description] +hardware: uniprocessor 32-bit PowerPC + +[powerpc-smp_description] +hardware: multiprocessor 32-bit PowerPC + +[powerpc-smp_image] +configs: powerpc/config.powerpc powerpc/config.powerpc-smp + +[powerpc64_description] +hardware: 64-bit PowerPC --- linux-2.6-3.0.0~rc6.orig/debian/config/powerpc/config +++ linux-2.6-3.0.0~rc6/debian/config/powerpc/config @@ -0,0 +1,982 @@ +## +## file: arch/Kconfig +## +CONFIG_OPROFILE=m +CONFIG_KPROBES=y + +## +## file: arch/powerpc/Kconfig +## +# CONFIG_HOTPLUG_CPU is not set +CONFIG_KEXEC=y +CONFIG_CMDLINE_BOOL=y +CONFIG_CMDLINE="console=ttyS0,9600 console=tty0" +CONFIG_SECCOMP=y +CONFIG_PCI=y +# CONFIG_ADVANCED_OPTIONS is not set + +## +## file: arch/powerpc/Kconfig.debug +## +# CONFIG_DEBUG_STACKOVERFLOW is not set +# CONFIG_CODE_PATCHING_SELFTEST is not set +# CONFIG_FTR_FIXUP_SELFTEST is not set +# CONFIG_MSI_BITMAP_SELFTEST is not set +CONFIG_XMON=y +# CONFIG_XMON_DEFAULT is not set +CONFIG_XMON_DISASSEMBLY=y +# CONFIG_VIRQ_DEBUG is not set +# CONFIG_BDI_SWITCH is not set +CONFIG_BOOTX_TEXT=y + +## +## file: arch/powerpc/kvm/Kconfig +## +CONFIG_VIRTUALIZATION=y + +## +## file: arch/powerpc/platforms/Kconfig +## +CONFIG_RTAS_PROC=y +CONFIG_CPU_FREQ_PMAC=y +CONFIG_PPC601_SYNC_FIX=y +CONFIG_TAU=y +# CONFIG_TAU_INT is not set +# CONFIG_TAU_AVERAGE is not set + +## +## file: arch/powerpc/platforms/52xx/Kconfig +## +# CONFIG_PPC_LITE5200 is not set + +## +## file: arch/powerpc/platforms/82xx/Kconfig +## +# CONFIG_PPC_82xx is not set + +## +## file: arch/powerpc/platforms/83xx/Kconfig +## +# CONFIG_PPC_83xx is not set + +## +## file: arch/powerpc/platforms/86xx/Kconfig +## +# CONFIG_PPC_86xx is not set + +## +## file: arch/powerpc/platforms/powermac/Kconfig +## +CONFIG_PPC_PMAC=y + +## +## file: arch/powerpc/platforms/prep/Kconfig +## +CONFIG_PREP_RESIDUAL=y +CONFIG_PROC_PREPRESIDUAL=y + +## +## file: drivers/ata/Kconfig +## +CONFIG_PATA_PCMCIA=m + +## +## file: drivers/atm/Kconfig +## +CONFIG_ATM_DRIVERS=y +CONFIG_ATM_TCP=m +CONFIG_ATM_LANAI=m +CONFIG_ATM_ENI=m +# CONFIG_ATM_ENI_DEBUG is not set +# CONFIG_ATM_ENI_TUNE_BURST is not set +CONFIG_ATM_FIRESTREAM=m +CONFIG_ATM_ZATM=m +CONFIG_ATM_ZATM_DEBUG=y +CONFIG_ATM_NICSTAR=m +CONFIG_ATM_NICSTAR_USE_SUNI=y +CONFIG_ATM_NICSTAR_USE_IDT77105=y +CONFIG_ATM_IDT77252=m +# CONFIG_ATM_IDT77252_DEBUG is not set +# CONFIG_ATM_IDT77252_RCV_ALL is not set +CONFIG_ATM_AMBASSADOR=m +# CONFIG_ATM_AMBASSADOR_DEBUG is not set +CONFIG_ATM_HORIZON=m +# CONFIG_ATM_HORIZON_DEBUG is not set +CONFIG_ATM_IA=m +# CONFIG_ATM_IA_DEBUG is not set +CONFIG_ATM_FORE200E_USE_TASKLET=y +CONFIG_ATM_FORE200E_TX_RETRY=16 +CONFIG_ATM_FORE200E_DEBUG=0 +CONFIG_ATM_HE=m +# CONFIG_ATM_HE_USE_SUNI is not set + +## +## file: drivers/block/Kconfig +## +CONFIG_BLK_DEV_FD=m +CONFIG_BLK_CPQ_DA=m +CONFIG_BLK_CPQ_CISS_DA=m +CONFIG_CISS_SCSI_TAPE=y +CONFIG_BLK_DEV_DAC960=m +CONFIG_BLK_DEV_UMEM=m +CONFIG_BLK_DEV_SX8=m +# CONFIG_BLK_DEV_UB is not set +CONFIG_BLK_DEV_RAM_SIZE=8192 +CONFIG_CDROM_PKTCDVD=m +CONFIG_CDROM_PKTCDVD_BUFFERS=8 +# CONFIG_CDROM_PKTCDVD_WCACHE is not set + +## +## file: drivers/bluetooth/Kconfig +## +CONFIG_BT_HCIUART=m +CONFIG_BT_HCIUART_H4=y +CONFIG_BT_HCIUART_BCSP=y +CONFIG_BT_HCIBCM203X=m +CONFIG_BT_HCIBPA10X=m +CONFIG_BT_HCIBFUSB=m +CONFIG_BT_HCIDTL1=m +CONFIG_BT_HCIBT3C=m +CONFIG_BT_HCIBLUECARD=m +CONFIG_BT_HCIBTUART=m +CONFIG_BT_HCIVHCI=m + +## +## file: drivers/char/Kconfig +## +CONFIG_PRINTER=m +CONFIG_NVRAM=y +CONFIG_DTLK=m +CONFIG_APPLICOM=m + +## +## file: drivers/char/agp/Kconfig +## +#. Workaround +CONFIG_AGP=y +#. Workaround +CONFIG_AGP_UNINORTH=y + +## +## file: drivers/char/ipmi/Kconfig +## +CONFIG_IPMI_HANDLER=m +# CONFIG_IPMI_PANIC_EVENT is not set +CONFIG_IPMI_DEVICE_INTERFACE=m +CONFIG_IPMI_SI=m +CONFIG_IPMI_WATCHDOG=m +CONFIG_IPMI_POWEROFF=m + +## +## file: drivers/gpu/drm/Kconfig +## +CONFIG_DRM=m +CONFIG_DRM_TDFX=m +CONFIG_DRM_R128=m +CONFIG_DRM_RADEON=m +CONFIG_DRM_MGA=m +# CONFIG_DRM_SIS is not set + +## +## file: drivers/gpu/drm/nouveau/Kconfig +## +CONFIG_DRM_NOUVEAU=m +CONFIG_DRM_NOUVEAU_BACKLIGHT=y +# CONFIG_DRM_NOUVEAU_DEBUG is not set +CONFIG_DRM_I2C_CH7006=m +CONFIG_DRM_I2C_SIL164=m + +## +## file: drivers/hid/usbhid/Kconfig +## +CONFIG_USB_HID=m +# CONFIG_USB_KBD is not set +# CONFIG_USB_MOUSE is not set + +## +## file: drivers/hwmon/Kconfig +## +CONFIG_SENSORS_ADM1021=m +CONFIG_SENSORS_ADM1025=m +CONFIG_SENSORS_ADM1026=m +CONFIG_SENSORS_ADM1031=m +CONFIG_SENSORS_ASB100=m +CONFIG_SENSORS_DS1621=m +CONFIG_SENSORS_F71805F=m +CONFIG_SENSORS_GL518SM=m +CONFIG_SENSORS_GL520SM=m +CONFIG_SENSORS_IT87=m +CONFIG_SENSORS_LM63=m +CONFIG_SENSORS_LM75=m +CONFIG_SENSORS_LM77=m +CONFIG_SENSORS_LM78=m +CONFIG_SENSORS_LM80=m +CONFIG_SENSORS_LM83=m +CONFIG_SENSORS_LM85=m +CONFIG_SENSORS_LM87=m +CONFIG_SENSORS_LM90=m +CONFIG_SENSORS_LM92=m +CONFIG_SENSORS_MAX1619=m +CONFIG_SENSORS_PC87360=m +CONFIG_SENSORS_PCF8591=m +CONFIG_SENSORS_SIS5595=m +CONFIG_SENSORS_SMSC47M1=m +CONFIG_SENSORS_SMSC47B397=m +CONFIG_SENSORS_VIA686A=m +CONFIG_SENSORS_W83781D=m +CONFIG_SENSORS_W83L785TS=m +CONFIG_SENSORS_W83627HF=m + +## +## file: drivers/i2c/Kconfig +## +CONFIG_I2C=y +CONFIG_I2C_CHARDEV=m +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set + +## +## file: drivers/i2c/busses/Kconfig +## +# CONFIG_I2C_ALI1535 is not set +# CONFIG_I2C_ALI1563 is not set +# CONFIG_I2C_ALI15X3 is not set +# CONFIG_I2C_AMD756 is not set +# CONFIG_I2C_AMD8111 is not set +# CONFIG_I2C_I801 is not set +# CONFIG_I2C_PIIX4 is not set +# CONFIG_I2C_NFORCE2 is not set +CONFIG_I2C_SIS5595=m +CONFIG_I2C_SIS630=m +CONFIG_I2C_SIS96X=m +CONFIG_I2C_VIA=m +CONFIG_I2C_VIAPRO=m +CONFIG_I2C_HYDRA=m +CONFIG_I2C_POWERMAC=m +CONFIG_I2C_MPC=m +CONFIG_I2C_PARPORT_LIGHT=m +CONFIG_I2C_PCA_ISA=m +# CONFIG_I2C_STUB is not set +CONFIG_SCx200_ACB=m + +## +## file: drivers/ide/Kconfig +## +CONFIG_IDE=y +# CONFIG_BLK_DEV_IDE_SATA is not set +CONFIG_IDE_GD=y +CONFIG_IDE_GD_ATA=y +# CONFIG_BLK_DEV_IDECS is not set +CONFIG_BLK_DEV_IDECD=m +CONFIG_BLK_DEV_IDETAPE=m +# CONFIG_IDE_GENERIC is not set +# CONFIG_BLK_DEV_OFFBOARD is not set +CONFIG_BLK_DEV_GENERIC=m +# CONFIG_BLK_DEV_OPTI621 is not set +CONFIG_BLK_DEV_AEC62XX=m +# CONFIG_BLK_DEV_ALI15X3 is not set +# CONFIG_BLK_DEV_AMD74XX is not set +# CONFIG_BLK_DEV_CMD64X is not set +# CONFIG_BLK_DEV_TRIFLEX is not set +# CONFIG_BLK_DEV_CY82C693 is not set +# CONFIG_BLK_DEV_CS5520 is not set +# CONFIG_BLK_DEV_CS5530 is not set +CONFIG_BLK_DEV_HPT366=m +CONFIG_BLK_DEV_SC1200=m +# CONFIG_BLK_DEV_PIIX is not set +CONFIG_BLK_DEV_NS87415=m +CONFIG_BLK_DEV_PDC202XX_OLD=m +CONFIG_BLK_DEV_PDC202XX_NEW=m +# CONFIG_BLK_DEV_SVWKS is not set +CONFIG_BLK_DEV_SIIMAGE=m +CONFIG_BLK_DEV_SL82C105=m +# CONFIG_BLK_DEV_SLC90E66 is not set +CONFIG_BLK_DEV_TRM290=m +CONFIG_BLK_DEV_VIA82CXXX=m +CONFIG_BLK_DEV_IDE_PMAC=y +CONFIG_BLK_DEV_IDE_PMAC_ATA100FIRST=y + +## +## file: drivers/input/gameport/Kconfig +## +CONFIG_GAMEPORT=m +CONFIG_GAMEPORT_NS558=m +CONFIG_GAMEPORT_L4=m +CONFIG_GAMEPORT_EMU10K1=m +CONFIG_GAMEPORT_FM801=m + +## +## file: drivers/input/joystick/Kconfig +## +CONFIG_INPUT_JOYSTICK=y + +## +## file: drivers/input/keyboard/Kconfig +## +CONFIG_INPUT_KEYBOARD=y +CONFIG_KEYBOARD_ATKBD=m +# CONFIG_KEYBOARD_LKKBD is not set +# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set + +## +## file: drivers/input/misc/Kconfig +## +CONFIG_INPUT_MISC=y +CONFIG_INPUT_PCSPKR=m +CONFIG_INPUT_UINPUT=m + +## +## file: drivers/input/mouse/Kconfig +## +CONFIG_INPUT_MOUSE=y +CONFIG_MOUSE_PS2=m +# CONFIG_MOUSE_SERIAL is not set +CONFIG_MOUSE_APPLETOUCH=m +CONFIG_MOUSE_BCM5974=m +# CONFIG_MOUSE_VSXXXAA is not set + +## +## file: drivers/input/serio/Kconfig +## +CONFIG_SERIO=m +CONFIG_SERIO_I8042=m +CONFIG_SERIO_SERPORT=m +# CONFIG_SERIO_PCIPS2 is not set +CONFIG_SERIO_LIBPS2=m +CONFIG_SERIO_RAW=m + +## +## file: drivers/input/touchscreen/Kconfig +## +CONFIG_INPUT_TOUCHSCREEN=y + +## +## file: drivers/isdn/Kconfig +## +CONFIG_ISDN=y +CONFIG_ISDN_CAPI=m + +## +## file: drivers/isdn/capi/Kconfig +## +# CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON is not set +CONFIG_ISDN_CAPI_MIDDLEWARE=y +CONFIG_ISDN_CAPI_CAPI20=m + +## +## file: drivers/isdn/hardware/avm/Kconfig +## +CONFIG_CAPI_AVM=y +CONFIG_ISDN_DRV_AVMB1_B1PCI=m +CONFIG_ISDN_DRV_AVMB1_B1PCIV4=y +CONFIG_ISDN_DRV_AVMB1_B1PCMCIA=m +CONFIG_ISDN_DRV_AVMB1_AVM_CS=m +CONFIG_ISDN_DRV_AVMB1_T1PCI=m +CONFIG_ISDN_DRV_AVMB1_C4=m + +## +## file: drivers/isdn/hardware/eicon/Kconfig +## +CONFIG_CAPI_EICON=y +CONFIG_ISDN_DIVAS=m +CONFIG_ISDN_DIVAS_BRIPCI=y +CONFIG_ISDN_DIVAS_PRIPCI=y +CONFIG_ISDN_DIVAS_DIVACAPI=m +CONFIG_ISDN_DIVAS_USERIDI=m +CONFIG_ISDN_DIVAS_MAINT=m + +## +## file: drivers/macintosh/Kconfig +## +CONFIG_MACINTOSH_DRIVERS=y +CONFIG_ADB=y +CONFIG_ADB_CUDA=y +CONFIG_ADB_PMU=y +CONFIG_ADB_PMU_LED=y +# CONFIG_ADB_PMU_LED_IDE is not set +CONFIG_PMAC_SMU=y +# CONFIG_PMAC_APM_EMU is not set +CONFIG_PMAC_MEDIABAY=y +CONFIG_PMAC_BACKLIGHT=y +CONFIG_ADB_MACIO=y +CONFIG_INPUT_ADBHID=y +CONFIG_MAC_EMUMOUSEBTN=y +CONFIG_THERM_WINDTUNNEL=m +CONFIG_THERM_ADT746X=m +CONFIG_THERM_PM72=m +CONFIG_WINDFARM=m +CONFIG_WINDFARM_PM81=m +CONFIG_WINDFARM_PM91=m +CONFIG_WINDFARM_PM112=m +CONFIG_WINDFARM_PM121=m +CONFIG_ANSLCD=m +CONFIG_PMAC_RACKMETER=m + +## +## file: drivers/media/Kconfig +## +CONFIG_DVB_CORE=m + +## +## file: drivers/media/radio/Kconfig +## +CONFIG_RADIO_MAXIRADIO=m +CONFIG_USB_DSBR=m + +## +## file: drivers/message/i2o/Kconfig +## +CONFIG_I2O=m +CONFIG_I2O_CONFIG=m +CONFIG_I2O_BLOCK=m +CONFIG_I2O_SCSI=m +CONFIG_I2O_PROC=m + +## +## file: drivers/misc/Kconfig +## +CONFIG_PHANTOM=m +CONFIG_HP_ILO=m + +## +## file: drivers/mmc/Kconfig +## +CONFIG_MMC=m +# CONFIG_MMC_DEBUG is not set + +## +## file: drivers/mmc/card/Kconfig +## +CONFIG_MMC_BLOCK=m + +## +## file: drivers/mtd/Kconfig +## +# CONFIG_MTD is not set + +## +## file: drivers/net/Kconfig +## +CONFIG_MACE=m +# CONFIG_MACE_AAUI_PORT is not set +CONFIG_BMAC=m +CONFIG_HAPPYMEAL=m +CONFIG_SUNGEM=m +CONFIG_NET_VENDOR_3COM=y +CONFIG_VORTEX=m +CONFIG_TYPHOON=m +# CONFIG_HP100 is not set +CONFIG_NET_PCI=y +# CONFIG_AMD8111_ETH is not set +CONFIG_ADAPTEC_STARFIRE=m +CONFIG_B44=m +# CONFIG_FORCEDETH is not set +CONFIG_E100=m +CONFIG_FEALNX=m +CONFIG_NATSEMI=m +CONFIG_NE2K_PCI=m +CONFIG_8139CP=m +CONFIG_8139TOO=m +CONFIG_8139TOO_PIO=y +# CONFIG_8139TOO_TUNE_TWISTER is not set +CONFIG_8139TOO_8129=y +# CONFIG_8139_OLD_RX_RESET is not set +CONFIG_SIS900=m +CONFIG_EPIC100=m +CONFIG_SUNDANCE=m +CONFIG_SUNDANCE_MMIO=y +CONFIG_TLAN=m +CONFIG_VIA_RHINE=m +CONFIG_VIA_RHINE_MMIO=y +CONFIG_MV643XX_ETH=m +CONFIG_FDDI=y +CONFIG_SKFP=m +CONFIG_HIPPI=y +# CONFIG_ROADRUNNER is not set +CONFIG_NET_FC=y +CONFIG_NETPOLL_TRAP=y + +## +## file: drivers/net/arcnet/Kconfig +## +CONFIG_ARCNET=m +CONFIG_ARCNET_1201=m +CONFIG_ARCNET_1051=m +CONFIG_ARCNET_RAW=m +CONFIG_ARCNET_CAP=m +# CONFIG_ARCNET_COM90xx is not set +CONFIG_ARCNET_COM90xxIO=m +# CONFIG_ARCNET_RIM_I is not set +CONFIG_ARCNET_COM20020=m +CONFIG_ARCNET_COM20020_PCI=m + +## +## file: drivers/net/irda/Kconfig +## +CONFIG_IRTTY_SIR=m +# CONFIG_DONGLE is not set +CONFIG_USB_IRDA=m +# CONFIG_SIGMATEL_FIR is not set +CONFIG_NSC_FIR=m +CONFIG_WINBOND_FIR=m +# CONFIG_TOSHIBA_FIR is not set +CONFIG_SMC_IRCC_FIR=m +CONFIG_ALI_FIR=m +# CONFIG_VLSI_FIR is not set +CONFIG_VIA_FIR=m + +## +## file: drivers/net/pcmcia/Kconfig +## +CONFIG_NET_PCMCIA=y +CONFIG_PCMCIA_3C589=m +CONFIG_PCMCIA_3C574=m +CONFIG_PCMCIA_FMVJ18X=m +CONFIG_PCMCIA_PCNET=m +CONFIG_PCMCIA_NMCLAN=m +CONFIG_PCMCIA_SMC91C92=m +CONFIG_PCMCIA_XIRC2PS=m +CONFIG_PCMCIA_AXNET=m +CONFIG_ARCNET_COM20020_CS=m + +## +## file: drivers/net/tulip/Kconfig +## +CONFIG_NET_TULIP=y +CONFIG_DE2104X=m +CONFIG_TULIP=m +# CONFIG_TULIP_MWI is not set +# CONFIG_TULIP_MMIO is not set +CONFIG_DE4X5=m +CONFIG_WINBOND_840=m +CONFIG_DM9102=m +CONFIG_PCMCIA_XIRCOM=m + +## +## file: drivers/net/wan/Kconfig +## +CONFIG_WAN=y +CONFIG_LANMEDIA=m +CONFIG_PCI200SYN=m +CONFIG_WANXL=m +CONFIG_PC300=m +CONFIG_PC300_MLPPP=y +CONFIG_FARSYNC=m +CONFIG_DSCC4=m +# CONFIG_DSCC4_PCISYNC is not set +# CONFIG_DSCC4_PCI_RST is not set +CONFIG_DLCI=m +CONFIG_DLCI_MAX=8 +CONFIG_CYCLADES_SYNC=m + +## +## file: drivers/net/wireless/Kconfig +## +CONFIG_PCMCIA_RAYCS=m +CONFIG_ATMEL=m +# CONFIG_PCI_ATMEL is not set +CONFIG_PCMCIA_ATMEL=m +CONFIG_AIRO_CS=m +CONFIG_PCMCIA_WL3501=m +CONFIG_USB_ZD1201=m + +## +## file: drivers/net/wireless/ipw2x00/Kconfig +## +# CONFIG_IPW2100 is not set + +## +## file: drivers/net/wireless/mwifiex/Kconfig +## +CONFIG_MWIFIEX=m +CONFIG_MWIFIEX_SDIO=m + +## +## file: drivers/net/wireless/orinoco/Kconfig +## +CONFIG_HERMES=m +CONFIG_APPLE_AIRPORT=m +CONFIG_PLX_HERMES=m +CONFIG_TMD_HERMES=m +CONFIG_PCI_HERMES=m +CONFIG_PCMCIA_HERMES=m + +## +## file: drivers/of/Kconfig +## +CONFIG_PROC_DEVICETREE=y + +## +## file: drivers/pci/hotplug/Kconfig +## +# CONFIG_HOTPLUG_PCI is not set + +## +## file: drivers/pcmcia/Kconfig +## +CONFIG_PCCARD=m +CONFIG_PCMCIA=m +CONFIG_CARDBUS=y +CONFIG_YENTA=m +CONFIG_PD6729=m +CONFIG_I82092=m +CONFIG_TCIC=m +# CONFIG_PCMCIA_DEBUG is not set + +## +## file: drivers/power/Kconfig +## +CONFIG_POWER_SUPPLY=m +CONFIG_BATTERY_PMU=m + +## +## file: drivers/rtc/Kconfig +## +CONFIG_RTC_DRV_GENERIC=y + +## +## file: drivers/scsi/Kconfig +## +CONFIG_SCSI_DPT_I2O=m +CONFIG_SCSI_ARCMSR=m +CONFIG_SCSI_BUSLOGIC=m +CONFIG_SCSI_DMX3191D=m +CONFIG_SCSI_EATA=m +# CONFIG_SCSI_EATA_TAGGED_QUEUE is not set +# CONFIG_SCSI_EATA_LINKED_COMMANDS is not set +CONFIG_SCSI_EATA_MAX_TAGS=16 +# CONFIG_SCSI_FUTURE_DOMAIN is not set +# CONFIG_SCSI_GDTH is not set +CONFIG_SCSI_IPS=m +# CONFIG_SCSI_INITIO is not set +CONFIG_SCSI_INIA100=m +CONFIG_SCSI_SYM53C8XX_2=m +CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1 +CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16 +CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 +CONFIG_SCSI_IPR=m +# CONFIG_SCSI_IPR_TRACE is not set +# CONFIG_SCSI_IPR_DUMP is not set +# CONFIG_SCSI_QLOGIC_1280 is not set +CONFIG_SCSI_DC395x=m +CONFIG_SCSI_DC390T=m +CONFIG_SCSI_NSP32=m +CONFIG_SCSI_MESH=m +CONFIG_SCSI_MESH_SYNC_RATE=5 +CONFIG_SCSI_MESH_RESET_DELAY_MS=4000 +CONFIG_SCSI_MAC53C94=m + +## +## file: drivers/scsi/megaraid/Kconfig.megaraid +## +CONFIG_MEGARAID_NEWGEN=y +CONFIG_MEGARAID_MM=m +CONFIG_MEGARAID_MAILBOX=m +# CONFIG_MEGARAID_LEGACY is not set + +## +## file: drivers/scsi/pcmcia/Kconfig +## +CONFIG_PCMCIA_AHA152X=m +# CONFIG_PCMCIA_FDOMAIN is not set +CONFIG_PCMCIA_NINJA_SCSI=m +CONFIG_PCMCIA_QLOGIC=m +CONFIG_PCMCIA_SYM53C500=m + +## +## file: drivers/telephony/Kconfig +## +CONFIG_PHONE=m +CONFIG_PHONE_IXJ=m +CONFIG_PHONE_IXJ_PCMCIA=m + +## +## file: drivers/tty/Kconfig +## +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +# CONFIG_SERIAL_NONSTANDARD is not set + +## +## file: drivers/tty/hvc/Kconfig +## +CONFIG_HVC_RTAS=y + +## +## file: drivers/tty/serial/Kconfig +## +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_SERIAL_8250_CS=m +CONFIG_SERIAL_8250_NR_UARTS=32 +CONFIG_SERIAL_8250_RUNTIME_UARTS=4 +# CONFIG_SERIAL_8250_EXTENDED is not set +CONFIG_SERIAL_PMACZILOG=y +CONFIG_SERIAL_PMACZILOG_CONSOLE=y +CONFIG_SERIAL_JSM=m + +## +## file: drivers/usb/Kconfig +## +CONFIG_USB=m + +## +## file: drivers/usb/atm/Kconfig +## +CONFIG_USB_ATM=m +CONFIG_USB_SPEEDTOUCH=m + +## +## file: drivers/usb/host/Kconfig +## +CONFIG_USB_EHCI_HCD=m +CONFIG_USB_EHCI_ROOT_HUB_TT=y +CONFIG_USB_OHCI_HCD=y +CONFIG_USB_OHCI_HCD_PPC_SOC=y +CONFIG_USB_OHCI_HCD_PPC_OF_BE=y +CONFIG_USB_OHCI_HCD_PPC_OF_LE=y +CONFIG_USB_OHCI_HCD_PCI=y +CONFIG_USB_UHCI_HCD=m +CONFIG_USB_SL811_HCD=m +CONFIG_USB_SL811_CS=m + +## +## file: drivers/video/Kconfig +## +CONFIG_FB=y +CONFIG_FB_MODE_HELPERS=y +CONFIG_FB_TILEBLITTING=y +CONFIG_FB_CIRRUS=m +# CONFIG_FB_PM2 is not set +# CONFIG_FB_CYBER2000 is not set +CONFIG_FB_OF=y +CONFIG_FB_CT65550=y +# CONFIG_FB_ASILIANT is not set +# CONFIG_FB_VGA16 is not set +CONFIG_FB_S1D13XXX=m +CONFIG_FB_NVIDIA=y +CONFIG_FB_NVIDIA_I2C=y +# CONFIG_FB_RIVA is not set +# CONFIG_FB_RIVA_I2C is not set +# CONFIG_FB_RIVA_DEBUG is not set +CONFIG_FB_MATROX=y +CONFIG_FB_MATROX_MILLENIUM=y +CONFIG_FB_MATROX_MYSTIQUE=y +CONFIG_FB_MATROX_G=y +CONFIG_FB_MATROX_I2C=m +CONFIG_FB_MATROX_MAVEN=m +CONFIG_FB_RADEON=y +CONFIG_FB_RADEON_I2C=y +# CONFIG_FB_RADEON_DEBUG is not set +CONFIG_FB_ATY128=y +CONFIG_FB_ATY=y +CONFIG_FB_ATY_CT=y +CONFIG_FB_ATY_GENERIC_LCD=y +CONFIG_FB_ATY_GX=y +CONFIG_FB_SAVAGE=m +CONFIG_FB_SAVAGE_I2C=y +CONFIG_FB_SAVAGE_ACCEL=y +CONFIG_FB_SIS=y +CONFIG_FB_SIS_300=y +CONFIG_FB_SIS_315=y +CONFIG_FB_NEOMAGIC=m +CONFIG_FB_KYRO=m +CONFIG_FB_3DFX=y +CONFIG_FB_VOODOO1=y +CONFIG_FB_TRIDENT=m +CONFIG_FB_IBM_GXT4500=m +# CONFIG_FB_VIRTUAL is not set + +## +## file: drivers/video/console/Kconfig +## +CONFIG_VGA_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE=y +# CONFIG_FONTS is not set +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y + +## +## file: drivers/video/logo/Kconfig +## +CONFIG_LOGO=y +# CONFIG_LOGO_LINUX_MONO is not set +CONFIG_LOGO_LINUX_VGA16=y +# CONFIG_LOGO_LINUX_CLUT224 is not set + +## +## file: drivers/watchdog/Kconfig +## +CONFIG_WATCHDOG_RTAS=m +CONFIG_PCIPCWATCHDOG=m +CONFIG_WDTPCI=m +CONFIG_USBPCWATCHDOG=m + +## +## file: fs/partitions/Kconfig +## +CONFIG_AMIGA_PARTITION=y +CONFIG_MAC_PARTITION=y +CONFIG_EFI_PARTITION=y + +## +## file: lib/Kconfig.debug +## +# CONFIG_DEBUG_STACK_USAGE is not set + +## +## file: net/ax25/Kconfig +## +CONFIG_HAMRADIO=y +CONFIG_AX25=m +CONFIG_AX25_DAMA_SLAVE=y +CONFIG_NETROM=m +CONFIG_ROSE=m + +## +## file: net/decnet/Kconfig +## +CONFIG_DECNET=m +CONFIG_DECNET_ROUTER=y + +## +## file: net/decnet/netfilter/Kconfig +## +CONFIG_DECNET_NF_GRABULATOR=m + +## +## file: net/ipv6/Kconfig +## +CONFIG_IPV6=y + +## +## file: net/ipx/Kconfig +## +CONFIG_IPX=m +CONFIG_IPX_INTERN=y + +## +## file: net/irda/Kconfig +## +CONFIG_IRDA=m +CONFIG_IRDA_ULTRA=y +CONFIG_IRDA_CACHE_LAST_LSAP=y +CONFIG_IRDA_FAST_RR=y +# CONFIG_IRDA_DEBUG is not set + +## +## file: net/irda/ircomm/Kconfig +## +CONFIG_IRCOMM=m + +## +## file: net/irda/irlan/Kconfig +## +CONFIG_IRLAN=m + +## +## file: net/irda/irnet/Kconfig +## +CONFIG_IRNET=m + +## +## file: net/lapb/Kconfig +## +CONFIG_LAPB=m + +## +## file: net/wanrouter/Kconfig +## +CONFIG_WAN_ROUTER=m + +## +## file: sound/aoa/Kconfig +## +CONFIG_SND_AOA=m + +## +## file: sound/aoa/codecs/Kconfig +## +CONFIG_SND_AOA_ONYX=m +CONFIG_SND_AOA_TAS=m +CONFIG_SND_AOA_TOONIE=m + +## +## file: sound/aoa/fabrics/Kconfig +## +CONFIG_SND_AOA_FABRIC_LAYOUT=m + +## +## file: sound/aoa/soundbus/Kconfig +## +CONFIG_SND_AOA_SOUNDBUS=m +CONFIG_SND_AOA_SOUNDBUS_I2S=m + +## +## file: sound/drivers/Kconfig +## +# CONFIG_SND_DUMMY is not set +CONFIG_SND_VIRMIDI=m +# CONFIG_SND_MTPAV is not set +# CONFIG_SND_SERIAL_U16550 is not set +# CONFIG_SND_MPU401 is not set + +## +## file: sound/pci/Kconfig +## +CONFIG_SND_ALS4000=m +# CONFIG_SND_ALI5451 is not set +CONFIG_SND_ATIIXP=m +CONFIG_SND_ATIIXP_MODEM=m +CONFIG_SND_AU8810=m +CONFIG_SND_AU8820=m +CONFIG_SND_AU8830=m +CONFIG_SND_AZT3328=m +CONFIG_SND_BT87X=m +# CONFIG_SND_BT87X_OVERCLOCK is not set +CONFIG_SND_CA0106=m +CONFIG_SND_CMIPCI=m +CONFIG_SND_CS4281=m +CONFIG_SND_CS46XX=m +CONFIG_SND_CS46XX_NEW_DSP=y +CONFIG_SND_EMU10K1=m +CONFIG_SND_EMU10K1X=m +CONFIG_SND_ENS1370=m +CONFIG_SND_ENS1371=m +CONFIG_SND_ES1938=m +CONFIG_SND_ES1968=m +CONFIG_SND_FM801=m +CONFIG_SND_FM801_TEA575X_BOOL=y +CONFIG_SND_HDSP=m +CONFIG_SND_ICE1712=m +CONFIG_SND_ICE1724=m +# CONFIG_SND_INTEL8X0 is not set +# CONFIG_SND_INTEL8X0M is not set +CONFIG_SND_KORG1212=m +CONFIG_SND_MAESTRO3=m +CONFIG_SND_MIXART=m +CONFIG_SND_NM256=m +CONFIG_SND_RME32=m +CONFIG_SND_RME96=m +CONFIG_SND_RME9652=m +CONFIG_SND_SONICVIBES=m +CONFIG_SND_TRIDENT=m +CONFIG_SND_VIA82XX=m +CONFIG_SND_VIA82XX_MODEM=m +CONFIG_SND_VX222=m +CONFIG_SND_YMFPCI=m + +## +## file: sound/pci/hda/Kconfig +## +CONFIG_SND_HDA_INTEL=m + +## +## file: sound/ppc/Kconfig +## +CONFIG_SND_POWERMAC=m +CONFIG_SND_POWERMAC_AUTO_DRC=y + --- linux-2.6-3.0.0~rc6.orig/debian/config/powerpc/config.powerpc64 +++ linux-2.6-3.0.0~rc6/debian/config/powerpc/config.powerpc64 @@ -0,0 +1,201 @@ +## +## file: arch/powerpc/Kconfig +## +# CONFIG_CRASH_DUMP is not set +CONFIG_IRQ_ALL_CPUS=y +CONFIG_NUMA=y +## choice: Page size +# CONFIG_PPC_64K_PAGES is not set +## end choice +CONFIG_SCHED_SMT=y +CONFIG_CMDLINE="console=hvsi0 console=hvc0 console=ttyS0,9600 console=tty0" +CONFIG_KERNEL_START=0xc000000000000000 + +## +## file: arch/powerpc/platforms/Kconfig +## +CONFIG_RTAS_PROC=y +CONFIG_RTAS_FLASH=m +CONFIG_IBMEBUS=y +CONFIG_CPU_FREQ_PMAC64=y +#. It's a bool +CONFIG_PPC_PASEMI_CPUFREQ=y + +## +## file: arch/powerpc/platforms/cell/Kconfig +## +CONFIG_PPC_IBM_CELL_BLADE=y +# CONFIG_PPC_CELLEB is not set +CONFIG_SPU_FS=m +CONFIG_SPU_FS_64K_LS=y +CONFIG_CBE_RAS=y +CONFIG_CBE_THERM=m +CONFIG_CBE_CPUFREQ=m + +## +## file: arch/powerpc/platforms/Kconfig.cputype +## +CONFIG_PPC64=y +# CONFIG_POWER4_ONLY is not set +# CONFIG_TUNE_CELL is not set +CONFIG_ALTIVEC=y +CONFIG_VIRT_CPU_ACCOUNTING=y +CONFIG_SMP=y +CONFIG_NR_CPUS=32 + +## +## file: arch/powerpc/platforms/iseries/Kconfig +## +# CONFIG_PPC_ISERIES is not set + +## +## file: arch/powerpc/platforms/maple/Kconfig +## +CONFIG_PPC_MAPLE=y + +## +## file: arch/powerpc/platforms/pasemi/Kconfig +## +CONFIG_PPC_PASEMI=y +CONFIG_PPC_PASEMI_MDIO=m + +## +## file: arch/powerpc/platforms/ps3/Kconfig +## +CONFIG_PPC_PS3=y +CONFIG_PS3_ADVANCED=y +CONFIG_PS3_HTAB_SIZE=20 +# CONFIG_PS3_DYNAMIC_DMA is not set +CONFIG_PS3_PS3AV=y +CONFIG_PS3_SYS_MANAGER=y +CONFIG_PS3_DISK=m +CONFIG_PS3_ROM=m +CONFIG_PS3_FLASH=m +CONFIG_PS3_VRAM=m +CONFIG_PS3_LPM=m + +## +## file: arch/powerpc/platforms/pseries/Kconfig +## +CONFIG_PPC_PSERIES=y +CONFIG_PPC_SPLPAR=y +CONFIG_SCANLOG=m +# CONFIG_LPARCFG is not set + +## +## file: drivers/ata/Kconfig +## +CONFIG_PATA_AMD=m + +## +## file: drivers/block/Kconfig +## +# CONFIG_MAC_FLOPPY is not set + +## +## file: drivers/char/hw_random/Kconfig +## +CONFIG_HW_RANDOM=m +CONFIG_HW_RANDOM_PASEMI=m + +## +## file: drivers/i2c/busses/Kconfig +## +CONFIG_I2C_PASEMI=m + +## +## file: drivers/macintosh/Kconfig +## +CONFIG_WINDFARM=m +CONFIG_WINDFARM_PM81=m +CONFIG_WINDFARM_PM91=m +CONFIG_WINDFARM_PM112=m + +## +## file: drivers/net/Kconfig +## +CONFIG_IBMVETH=m +CONFIG_SPIDER_NET=m +CONFIG_GELIC_NET=m +CONFIG_GELIC_WIRELESS=y +# CONFIG_MV643XX_ETH is not set +CONFIG_EHEA=m +CONFIG_PASEMI_MAC=m + +## +## file: drivers/net/ibm_newemac/Kconfig +## +CONFIG_IBM_NEW_EMAC=m +CONFIG_IBM_NEW_EMAC_RXB=128 +CONFIG_IBM_NEW_EMAC_TXB=64 +CONFIG_IBM_NEW_EMAC_POLL_WEIGHT=32 +CONFIG_IBM_NEW_EMAC_RX_COPY_THRESHOLD=256 +CONFIG_IBM_NEW_EMAC_RX_SKB_HEADROOM=0 +# CONFIG_IBM_NEW_EMAC_DEBUG is not set + +## +## file: drivers/pci/hotplug/Kconfig +## +# CONFIG_HOTPLUG_PCI is not set + +## +## file: drivers/rtc/Kconfig +## +CONFIG_RTC_DRV_PS3=m + +## +## file: drivers/scsi/Kconfig +## +CONFIG_SCSI_IBMVSCSI=m +CONFIG_SCSI_IBMVSCSIS=m +CONFIG_SCSI_QLOGIC_1280=m + +## +## file: drivers/scsi/megaraid/Kconfig.megaraid +## +CONFIG_MEGARAID_LEGACY=m + +## +## file: drivers/tty/hvc/Kconfig +## +CONFIG_HVC_CONSOLE=y +CONFIG_HVCS=m + +## +## file: drivers/tty/serial/Kconfig +## +# CONFIG_SERIAL_ICOM is not set + +## +## file: drivers/video/Kconfig +## +# CONFIG_FB_CONTROL is not set +# CONFIG_FB_PLATINUM is not set +# CONFIG_FB_VALKYRIE is not set +# CONFIG_FB_IMSTT is not set +# CONFIG_FB_NVIDIA is not set +# CONFIG_FB_ATY128 is not set +CONFIG_FB_PS3=y +CONFIG_FB_PS3_DEFAULT_SIZE_M=9 + +## +## file: drivers/watchdog/Kconfig +## +CONFIG_WATCHDOG_RTAS=m + +## +## file: mm/Kconfig +## +## choice: Memory model +# CONFIG_FLATMEM_MANUAL is not set +# CONFIG_DISCONTIGMEM_MANUAL is not set +CONFIG_SPARSEMEM_MANUAL=y +## end choice +CONFIG_SPARSEMEM_VMEMMAP=y + +## +## file: sound/ppc/Kconfig +## +CONFIG_SND_PS3=m +CONFIG_SND_PS3_DEFAULT_START_DELAY=2000 + --- linux-2.6-3.0.0~rc6.orig/debian/config/powerpc/config.powerpc-smp +++ linux-2.6-3.0.0~rc6/debian/config/powerpc/config.powerpc-smp @@ -0,0 +1,5 @@ +## +## file: arch/powerpc/platforms/Kconfig.cputype +## +CONFIG_SMP=y + --- linux-2.6-3.0.0~rc6.orig/debian/config/kernelarch-x86/config-arch-32 +++ linux-2.6-3.0.0~rc6/debian/config/kernelarch-x86/config-arch-32 @@ -0,0 +1,479 @@ +## +## file: arch/x86/Kconfig +## +# CONFIG_64BIT is not set +CONFIG_SMP=y +CONFIG_X86_BIGSMP=y +CONFIG_NR_CPUS=32 +CONFIG_VM86=y +CONFIG_TOSHIBA=m +CONFIG_X86_REBOOTFIXUPS=y +## choice: High Memory Support +# CONFIG_NOHIGHMEM is not set +CONFIG_HIGHMEM4G=y +# CONFIG_HIGHMEM64G is not set +## end choice +# CONFIG_X86_PAE is not set +# CONFIG_NUMA is not set +CONFIG_HIGHPTE=y +CONFIG_PHYSICAL_ALIGN=0x1000000 +CONFIG_APM=m +# CONFIG_APM_IGNORE_USER_SUSPEND is not set +# CONFIG_APM_DO_ENABLE is not set +# CONFIG_APM_CPU_IDLE is not set +# CONFIG_APM_DISPLAY_BLANK is not set +# CONFIG_APM_ALLOW_INTS is not set +## choice: PCI access mode +# CONFIG_PCI_GOBIOS is not set +# CONFIG_PCI_GOMMCONFIG is not set +# CONFIG_PCI_GODIRECT is not set +# CONFIG_PCI_GOOLPC is not set +CONFIG_PCI_GOANY=y +## end choice +CONFIG_PCI_MMCONFIG=y +CONFIG_ISA=y +CONFIG_SCx200=m +CONFIG_SCx200HR_TIMER=m +# CONFIG_OLPC is not set + +## +## file: arch/x86/Kconfig.cpu +## +CONFIG_X86_GENERIC=y +# CONFIG_X86_PPRO_FENCE is not set + +## +## file: arch/x86/lguest/Kconfig +## +CONFIG_LGUEST_GUEST=y + +## +## file: crypto/Kconfig +## +CONFIG_CRYPTO_AES_586=m +CONFIG_CRYPTO_SALSA20_586=m +CONFIG_CRYPTO_TWOFISH_586=m + +## +## file: drivers/acpi/Kconfig +## +CONFIG_ACPI_BLACKLIST_YEAR=0 + +## +## file: drivers/ata/Kconfig +## +# CONFIG_PATA_CS5535 is not set +CONFIG_PATA_CS5536=m + +## +## file: drivers/atm/Kconfig +## +CONFIG_ATM_NICSTAR=m +# CONFIG_ATM_NICSTAR_USE_SUNI is not set +# CONFIG_ATM_NICSTAR_USE_IDT77105 is not set +CONFIG_ATM_IA=m +# CONFIG_ATM_IA_DEBUG is not set + +## +## file: drivers/auxdisplay/Kconfig +## +CONFIG_CFAG12864B=m +CONFIG_CFAG12864B_RATE=20 + +## +## file: drivers/block/Kconfig +## +CONFIG_BLK_DEV_XD=m +CONFIG_BLK_DEV_RAM_SIZE=8192 + +## +## file: drivers/block/paride/Kconfig +## +CONFIG_PARIDE_BPCK6=m + +## +## file: drivers/char/Kconfig +## +CONFIG_SONYPI=m +CONFIG_SCx200_GPIO=m + +## +## file: drivers/char/agp/Kconfig +## +#. Workaround +CONFIG_AGP_ALI=y +#. Workaround +CONFIG_AGP_ATI=y +#. Workaround +CONFIG_AGP_AMD=y +#. Workaround +CONFIG_AGP_NVIDIA=y +#. Workaround +CONFIG_AGP_SWORKS=y +#. Workaround +CONFIG_AGP_EFFICEON=y + +## +## file: drivers/cpufreq/Kconfig.x86 +## +CONFIG_X86_POWERNOW_K6=m +CONFIG_X86_POWERNOW_K7=m +CONFIG_X86_POWERNOW_K8=m +CONFIG_X86_GX_SUSPMOD=m +CONFIG_X86_SPEEDSTEP_CENTRINO=m +CONFIG_X86_SPEEDSTEP_CENTRINO_TABLE=y +CONFIG_X86_SPEEDSTEP_ICH=m +CONFIG_X86_SPEEDSTEP_SMI=m +CONFIG_X86_P4_CLOCKMOD=m +CONFIG_X86_CPUFREQ_NFORCE2=m +CONFIG_X86_LONGRUN=m +CONFIG_X86_LONGHAUL=m +# CONFIG_X86_E_POWERSAVER is not set +CONFIG_X86_SPEEDSTEP_RELAXED_CAP_CHECK=y + +## +## file: drivers/crypto/Kconfig +## +CONFIG_CRYPTO_DEV_GEODE=m + +## +## file: drivers/gpu/drm/Kconfig +## +CONFIG_DRM_I810=m + +## +## file: drivers/i2c/busses/Kconfig +## +CONFIG_SCx200_I2C=m +CONFIG_SCx200_I2C_SCL=12 +CONFIG_SCx200_I2C_SDA=13 +CONFIG_I2C_PXA=m + +## +## file: drivers/ide/Kconfig +## +CONFIG_BLK_DEV_CS5535=m +# CONFIG_BLK_DEV_CS5536 is not set +# CONFIG_BLK_DEV_4DRIVES is not set +# CONFIG_BLK_DEV_ALI14XX is not set +# CONFIG_BLK_DEV_DTC2278 is not set +# CONFIG_BLK_DEV_HT6560B is not set +# CONFIG_BLK_DEV_QD65XX is not set +# CONFIG_BLK_DEV_UMC8672 is not set + +## +## file: drivers/input/misc/Kconfig +## +CONFIG_INPUT_WISTRON_BTNS=m + +## +## file: drivers/input/mouse/Kconfig +## +# CONFIG_MOUSE_PS2_OLPC is not set +CONFIG_MOUSE_INPORT=m +# CONFIG_MOUSE_ATIXL is not set +CONFIG_MOUSE_LOGIBM=m +CONFIG_MOUSE_PC110PAD=m + +## +## file: drivers/isdn/hardware/avm/Kconfig +## +CONFIG_ISDN_DRV_AVMB1_B1ISA=m +CONFIG_ISDN_DRV_AVMB1_T1ISA=m + +## +## file: drivers/leds/Kconfig +## +CONFIG_LEDS_WRAP=m + +## +## file: drivers/lguest/Kconfig +## +CONFIG_LGUEST=m + +## +## file: drivers/macintosh/Kconfig +## +# CONFIG_MACINTOSH_DRIVERS is not set + +## +## file: drivers/media/radio/Kconfig +## +CONFIG_RADIO_CADET=m +CONFIG_RADIO_RTRACK=m +CONFIG_RADIO_RTRACK2=m +CONFIG_RADIO_AZTECH=m +CONFIG_RADIO_GEMTEK=m +CONFIG_RADIO_MIROPCM20=m +CONFIG_RADIO_SF16FMI=m +CONFIG_RADIO_SF16FMR2=m +CONFIG_RADIO_TERRATEC=m +CONFIG_RADIO_TRUST=m +CONFIG_RADIO_TYPHOON=m +CONFIG_RADIO_ZOLTRIX=m + +## +## file: drivers/mtd/maps/Kconfig +## +CONFIG_MTD_SCx200_DOCFLASH=m +CONFIG_MTD_PCMCIA=m +# CONFIG_MTD_PCMCIA_ANONYMOUS is not set + +## +## file: drivers/net/Kconfig +## +CONFIG_EL1=m +CONFIG_EL2=m +CONFIG_ELPLUS=m +CONFIG_EL16=m +CONFIG_EL3=m +CONFIG_3C515=m +CONFIG_LANCE=m +CONFIG_NET_VENDOR_SMC=y +CONFIG_WD80x3=m +CONFIG_ULTRA=m +CONFIG_SMC9194=m +CONFIG_NET_VENDOR_RACAL=y +CONFIG_NI52=m +CONFIG_NI65=m +CONFIG_AT1700=m +CONFIG_DEPCA=m +CONFIG_NET_ISA=y +CONFIG_E2100=m +CONFIG_EWRK3=m +CONFIG_EEXPRESS=m +CONFIG_EEXPRESS_PRO=m +CONFIG_HPLAN_PLUS=m +CONFIG_HPLAN=m +CONFIG_LP486E=m +CONFIG_ETH16I=m +CONFIG_NE2000=m +CONFIG_ZNET=m +CONFIG_SEEQ8005=m +CONFIG_AC3200=m +CONFIG_APRICOT=m +CONFIG_CS89x0=m +CONFIG_8139TOO_PIO=y +CONFIG_TLAN=m + +## +## file: drivers/net/arcnet/Kconfig +## +CONFIG_ARCNET_COM20020_ISA=m + +## +## file: drivers/net/hamradio/Kconfig +## +CONFIG_SCC=m +# CONFIG_SCC_DELAY is not set +# CONFIG_SCC_TRXECHO is not set + +## +## file: drivers/net/irda/Kconfig +## +CONFIG_TOSHIBA_FIR=m + +## +## file: drivers/net/wan/Kconfig +## +CONFIG_HOSTESS_SV11=m +CONFIG_COSA=m +CONFIG_SEALEVEL_4021=m +CONFIG_N2=m +CONFIG_C101=m +CONFIG_SDLA=m + +## +## file: drivers/net/wireless/ipw2x00/Kconfig +## +CONFIG_IPW2100=m +CONFIG_IPW2100_MONITOR=y +# CONFIG_IPW2100_DEBUG is not set + +## +## file: drivers/pci/hotplug/Kconfig +## +CONFIG_HOTPLUG_PCI_COMPAQ=m +CONFIG_HOTPLUG_PCI_IBM=m + +## +## file: drivers/pcmcia/Kconfig +## +CONFIG_I82365=m + +## +## file: drivers/platform/x86/Kconfig +## +CONFIG_TC1100_WMI=m + +## +## file: drivers/pnp/isapnp/Kconfig +## +CONFIG_ISAPNP=y + +## +## file: drivers/pnp/pnpbios/Kconfig +## +CONFIG_PNPBIOS=y +CONFIG_PNPBIOS_PROC_FS=y + +## +## file: drivers/scsi/Kconfig +## +CONFIG_SCSI_IN2000=m +# CONFIG_SCSI_FLASHPOINT is not set +CONFIG_SCSI_DTC3280=m +CONFIG_SCSI_EATA_PIO=m +# CONFIG_SCSI_GENERIC_NCR5380 is not set +# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set +# CONFIG_SCSI_GENERIC_NCR53C400 is not set +# CONFIG_SCSI_INIA100 is not set +CONFIG_SCSI_NCR53C406A=m +CONFIG_SCSI_PAS16=m +CONFIG_SCSI_QLOGIC_FAS=m +CONFIG_SCSI_SYM53C416=m +CONFIG_SCSI_T128=m +CONFIG_SCSI_U14_34F=m +CONFIG_SCSI_U14_34F_TAGGED_QUEUE=y +CONFIG_SCSI_U14_34F_LINKED_COMMANDS=y +CONFIG_SCSI_U14_34F_MAX_TAGS=8 +CONFIG_SCSI_ULTRASTOR=m +CONFIG_SCSI_NSP32=m + +## +## file: drivers/scsi/pcmcia/Kconfig +## +CONFIG_PCMCIA_NINJA_SCSI=m + +## +## file: drivers/staging/cs5535_gpio/Kconfig +## +CONFIG_CS5535_GPIO=m + +## +## file: drivers/staging/olpc_dcon/Kconfig +## +CONFIG_FB_OLPC_DCON=m +CONFIG_FB_OLPC_DCON_1=y +CONFIG_FB_OLPC_DCON_1_5=y + +## +## file: drivers/staging/tty/Kconfig +## +# CONFIG_RISCOM8 is not set +# CONFIG_SPECIALIX is not set + +## +## file: drivers/tty/Kconfig +## +# CONFIG_ISI is not set + +## +## file: drivers/tty/serial/Kconfig +## +CONFIG_SERIAL_8250_EXAR_ST16C554=m + +## +## file: drivers/video/Kconfig +## +CONFIG_FB_NVIDIA_I2C=y +CONFIG_FB_I810=m +# CONFIG_FB_I810_GTF is not set +CONFIG_FB_MATROX_G=y +CONFIG_FB_MATROX_MAVEN=m +CONFIG_FB_ATY_GENERIC_LCD=y +CONFIG_FB_SAVAGE_I2C=y + +## +## file: drivers/video/console/Kconfig +## +CONFIG_MDA_CONSOLE=m + +## +## file: drivers/video/geode/Kconfig +## +CONFIG_FB_GEODE=y +CONFIG_FB_GEODE_LX=m +CONFIG_FB_GEODE_GX=m +CONFIG_FB_GEODE_GX1=m + +## +## file: drivers/watchdog/Kconfig +## +CONFIG_SCx200_WDT=m +CONFIG_SBC7240_WDT=m +CONFIG_PCWATCHDOG=m +CONFIG_MIXCOMWD=m +CONFIG_WDT=m + +## +## file: fs/Kconfig.binfmt +## +CONFIG_BINFMT_AOUT=m + +## +## file: kernel/irq/Kconfig +## +# CONFIG_SPARSE_IRQ is not set + +## +## file: lib/Kconfig.debug +## +CONFIG_FRAME_WARN=1024 + +## +## file: mm/Kconfig +## +## choice: Memory model +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +## end choice + +## +## file: security/Kconfig +## +CONFIG_LSM_MMAP_MIN_ADDR=0 + +## +## file: sound/isa/Kconfig +## +CONFIG_SND_ISA=y +CONFIG_SND_ADLIB=m +CONFIG_SND_AD1816A=m +CONFIG_SND_AD1848=m +CONFIG_SND_ALS100=m +CONFIG_SND_AZT1605=m +CONFIG_SND_AZT2316=m +CONFIG_SND_AZT2320=m +CONFIG_SND_CMI8330=m +CONFIG_SND_CS4231=m +CONFIG_SND_CS4236=m +CONFIG_SND_ES1688=m +CONFIG_SND_ES18XX=m +CONFIG_SND_SC6000=m +CONFIG_SND_GUSCLASSIC=m +CONFIG_SND_GUSEXTREME=m +CONFIG_SND_GUSMAX=m +CONFIG_SND_INTERWAVE=m +CONFIG_SND_INTERWAVE_STB=m +CONFIG_SND_JAZZ16=m +CONFIG_SND_OPL3SA2=m +CONFIG_SND_OPTI92X_AD1848=m +CONFIG_SND_OPTI92X_CS4231=m +CONFIG_SND_OPTI93X=m +CONFIG_SND_MIRO=m +CONFIG_SND_SB8=m +CONFIG_SND_SB16=m +CONFIG_SND_SBAWE=m +CONFIG_SND_SB16_CSP=y +CONFIG_SND_SSCAPE=m +CONFIG_SND_WAVEFRONT=m +CONFIG_SND_MSND_PINNACLE=m +CONFIG_SND_MSND_CLASSIC=m + +## +## file: sound/pci/Kconfig +## +CONFIG_SND_SIS7019=m + --- linux-2.6-3.0.0~rc6.orig/debian/config/kernelarch-x86/config +++ linux-2.6-3.0.0~rc6/debian/config/kernelarch-x86/config @@ -0,0 +1,1561 @@ +## +## file: arch/Kconfig +## +CONFIG_OPROFILE=m +# CONFIG_OPROFILE_EVENT_MULTIPLEX is not set +CONFIG_KPROBES=y + +## +## file: arch/x86/Kconfig +## +CONFIG_X86_MPPARSE=y +# CONFIG_X86_EXTENDED_PLATFORM is not set +CONFIG_SCHED_OMIT_FRAME_POINTER=y +CONFIG_PARAVIRT_GUEST=y +CONFIG_KVM_CLOCK=y +CONFIG_KVM_GUEST=y +CONFIG_PARAVIRT=y +# CONFIG_PARAVIRT_SPINLOCKS is not set +# CONFIG_PARAVIRT_DEBUG is not set +# CONFIG_MEMTEST is not set +CONFIG_HPET_TIMER=y +CONFIG_SCHED_SMT=y +CONFIG_SCHED_MC=y +# CONFIG_IRQ_TIME_ACCOUNTING is not set +CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y +CONFIG_X86_MCE=y +CONFIG_X86_MCE_INTEL=y +CONFIG_X86_MCE_AMD=y +# CONFIG_X86_ANCIENT_MCE is not set +CONFIG_X86_MCE_INJECT=m +CONFIG_I8K=m +CONFIG_MICROCODE=m +CONFIG_MICROCODE_INTEL=y +CONFIG_MICROCODE_AMD=y +CONFIG_X86_MSR=m +CONFIG_X86_CPUID=m +CONFIG_NODES_SHIFT=6 +# CONFIG_X86_CHECK_BIOS_CORRUPTION is not set +CONFIG_X86_RESERVE_LOW=64 +CONFIG_MTRR=y +CONFIG_MTRR_SANITIZER=y +CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT=0 +CONFIG_MTRR_SANITIZER_SPARE_REG_NR_DEFAULT=1 +CONFIG_X86_PAT=y +CONFIG_EFI=y +CONFIG_SECCOMP=y +CONFIG_CC_STACKPROTECTOR=y +CONFIG_KEXEC=y +# CONFIG_CRASH_DUMP is not set +# CONFIG_KEXEC_JUMP is not set +CONFIG_RELOCATABLE=y +CONFIG_HOTPLUG_CPU=y +# CONFIG_COMPAT_VDSO is not set +# CONFIG_CMDLINE_BOOL is not set +CONFIG_PCI=y +CONFIG_PCI_CNB20LE_QUIRK=y +CONFIG_DMAR=y +# CONFIG_DMAR_DEFAULT_ON is not set +CONFIG_INTR_REMAP=y +CONFIG_IA32_EMULATION=y +CONFIG_IA32_AOUT=y + +## +## file: arch/x86/Kconfig.debug +## +CONFIG_STRICT_DEVMEM=y +CONFIG_X86_VERBOSE_BOOTUP=y +# CONFIG_EARLY_PRINTK_DBGP is not set +# CONFIG_DEBUG_STACKOVERFLOW is not set +# CONFIG_X86_PTDUMP is not set +CONFIG_DEBUG_RODATA=y +# CONFIG_DEBUG_RODATA_TEST is not set +CONFIG_DEBUG_SET_MODULE_RONX=y +# CONFIG_DEBUG_NX_TEST is not set +# CONFIG_IOMMU_DEBUG is not set +# CONFIG_IOMMU_STRESS is not set +# CONFIG_X86_DECODER_SELFTEST is not set +## choice: IO delay type +CONFIG_IO_DELAY_0X80=y +# CONFIG_IO_DELAY_0XED is not set +# CONFIG_IO_DELAY_UDELAY is not set +# CONFIG_IO_DELAY_NONE is not set +## end choice +# CONFIG_DEBUG_BOOT_PARAMS is not set +# CONFIG_CPA_DEBUG is not set +CONFIG_OPTIMIZE_INLINING=y +# CONFIG_DEBUG_STRICT_USER_COPY_CHECKS is not set + +## +## file: arch/x86/kvm/Kconfig +## +CONFIG_VIRTUALIZATION=y +CONFIG_KVM=m +CONFIG_KVM_INTEL=m +CONFIG_KVM_AMD=m + +## +## file: arch/x86/xen/Kconfig +## +CONFIG_XEN=y +# CONFIG_XEN_DEBUG_FS is not set +# CONFIG_XEN_DEBUG is not set + +## +## file: crypto/Kconfig +## +CONFIG_CRYPTO_CRC32C_INTEL=m +CONFIG_CRYPTO_GHASH_CLMUL_NI_INTEL=m +CONFIG_CRYPTO_AES_NI_INTEL=m + +## +## file: drivers/acpi/Kconfig +## +CONFIG_ACPI=y +# CONFIG_ACPI_PROCFS is not set +# CONFIG_ACPI_PROCFS_POWER is not set +# CONFIG_ACPI_EC_DEBUGFS is not set +# CONFIG_ACPI_PROC_EVENT is not set +CONFIG_ACPI_AC=m +CONFIG_ACPI_BATTERY=m +CONFIG_ACPI_BUTTON=m +CONFIG_ACPI_VIDEO=m +CONFIG_ACPI_FAN=m +CONFIG_ACPI_DOCK=y +CONFIG_ACPI_PROCESSOR=m +CONFIG_ACPI_IPMI=m +CONFIG_ACPI_PROCESSOR_AGGREGATOR=m +CONFIG_ACPI_THERMAL=m +# CONFIG_ACPI_DEBUG is not set +CONFIG_ACPI_PCI_SLOT=m +CONFIG_ACPI_CONTAINER=m +CONFIG_ACPI_HOTPLUG_MEMORY=m +CONFIG_ACPI_SBS=m +CONFIG_ACPI_HED=m +# CONFIG_ACPI_CUSTOM_METHOD is not set + +## +## file: drivers/acpi/apei/Kconfig +## +CONFIG_ACPI_APEI=y +CONFIG_ACPI_APEI_GHES=m +CONFIG_ACPI_APEI_PCIEAER=y +# CONFIG_ACPI_APEI_EINJ is not set +# CONFIG_ACPI_APEI_ERST_DEBUG is not set + +## +## file: drivers/ata/Kconfig +## +CONFIG_PATA_ALI=m +CONFIG_PATA_AMD=m +CONFIG_PATA_ATIIXP=m +CONFIG_PATA_CMD64X=m +CONFIG_PATA_CS5520=m +CONFIG_PATA_CS5530=m +CONFIG_PATA_EFAR=m +CONFIG_PATA_NETCELL=m +CONFIG_PATA_NS87415=m +CONFIG_PATA_OLDPIIX=m +CONFIG_PATA_PDC2027X=m +CONFIG_PATA_PDC_OLD=m +CONFIG_PATA_SC1200=m +CONFIG_PATA_SERVERWORKS=m +CONFIG_PATA_SIL680=m +CONFIG_PATA_TRIFLEX=m +CONFIG_PATA_VIA=m +CONFIG_PATA_MPIIX=m +CONFIG_PATA_NS87410=m +CONFIG_PATA_PCMCIA=m +CONFIG_PATA_RZ1000=m + +## +## file: drivers/atm/Kconfig +## +CONFIG_ATM_DRIVERS=y +CONFIG_ATM_TCP=m +CONFIG_ATM_LANAI=m +CONFIG_ATM_ENI=m +# CONFIG_ATM_ENI_DEBUG is not set +# CONFIG_ATM_ENI_TUNE_BURST is not set +CONFIG_ATM_FIRESTREAM=m +CONFIG_ATM_ZATM=m +# CONFIG_ATM_ZATM_DEBUG is not set +CONFIG_ATM_IDT77252=m +# CONFIG_ATM_IDT77252_DEBUG is not set +# CONFIG_ATM_IDT77252_RCV_ALL is not set +CONFIG_ATM_AMBASSADOR=m +# CONFIG_ATM_AMBASSADOR_DEBUG is not set +CONFIG_ATM_HORIZON=m +# CONFIG_ATM_HORIZON_DEBUG is not set +# CONFIG_ATM_FORE200E_USE_TASKLET is not set +CONFIG_ATM_FORE200E_TX_RETRY=16 +CONFIG_ATM_FORE200E_DEBUG=0 +CONFIG_ATM_HE=m +CONFIG_ATM_HE_USE_SUNI=y + +## +## file: drivers/auxdisplay/Kconfig +## +CONFIG_KS0108=m +CONFIG_KS0108_PORT=0x378 +CONFIG_KS0108_DELAY=2 + +## +## file: drivers/block/Kconfig +## +CONFIG_BLK_DEV_FD=m +CONFIG_PARIDE=m +CONFIG_BLK_CPQ_DA=m +CONFIG_BLK_CPQ_CISS_DA=m +CONFIG_CISS_SCSI_TAPE=y +CONFIG_BLK_DEV_DAC960=m +CONFIG_BLK_DEV_UMEM=m +CONFIG_BLK_DEV_SX8=m +# CONFIG_BLK_DEV_UB is not set +CONFIG_CDROM_PKTCDVD=m +CONFIG_CDROM_PKTCDVD_BUFFERS=8 +# CONFIG_CDROM_PKTCDVD_WCACHE is not set +CONFIG_XEN_BLKDEV_FRONTEND=m +CONFIG_XEN_BLKDEV_BACKEND=m + +## +## file: drivers/block/paride/Kconfig +## +CONFIG_PARIDE_PD=m +CONFIG_PARIDE_PCD=m +CONFIG_PARIDE_PF=m +CONFIG_PARIDE_PT=m +CONFIG_PARIDE_PG=m +CONFIG_PARIDE_ATEN=m +CONFIG_PARIDE_BPCK=m +CONFIG_PARIDE_COMM=m +CONFIG_PARIDE_DSTR=m +CONFIG_PARIDE_FIT2=m +CONFIG_PARIDE_FIT3=m +CONFIG_PARIDE_EPAT=m +# CONFIG_PARIDE_EPATC8 is not set +CONFIG_PARIDE_EPIA=m +CONFIG_PARIDE_FRIQ=m +CONFIG_PARIDE_FRPW=m +CONFIG_PARIDE_KBIC=m +CONFIG_PARIDE_KTTI=m +CONFIG_PARIDE_ON20=m +CONFIG_PARIDE_ON26=m + +## +## file: drivers/bluetooth/Kconfig +## +CONFIG_BT_HCIUART=m +CONFIG_BT_HCIUART_H4=y +CONFIG_BT_HCIUART_BCSP=y +CONFIG_BT_HCIBCM203X=m +CONFIG_BT_HCIBPA10X=m +CONFIG_BT_HCIBFUSB=m +CONFIG_BT_HCIDTL1=m +CONFIG_BT_HCIBT3C=m +CONFIG_BT_HCIBLUECARD=m +CONFIG_BT_HCIBTUART=m +CONFIG_BT_HCIVHCI=m + +## +## file: drivers/char/Kconfig +## +CONFIG_STALDRV=y +CONFIG_PRINTER=m +# CONFIG_LP_CONSOLE is not set +CONFIG_PPDEV=m +CONFIG_NVRAM=m +CONFIG_DTLK=m +CONFIG_R3964=m +CONFIG_APPLICOM=m +CONFIG_MWAVE=m +CONFIG_RAW_DRIVER=m +CONFIG_MAX_RAW_DEVS=256 +CONFIG_HPET=y +CONFIG_HPET_MMAP=y + +## +## file: drivers/char/agp/Kconfig +## +#. Workaround +CONFIG_AGP=y +#. Workaround +CONFIG_AGP_AMD64=y +#. Workaround +CONFIG_AGP_INTEL=y +#. Workaround +CONFIG_AGP_SIS=y +#. Workaround +CONFIG_AGP_VIA=y + +## +## file: drivers/char/hw_random/Kconfig +## +CONFIG_HW_RANDOM=m +CONFIG_HW_RANDOM_INTEL=m +CONFIG_HW_RANDOM_AMD=m +CONFIG_HW_RANDOM_GEODE=m +CONFIG_HW_RANDOM_VIA=m + +## +## file: drivers/char/ipmi/Kconfig +## +CONFIG_IPMI_HANDLER=m +# CONFIG_IPMI_PANIC_EVENT is not set +CONFIG_IPMI_DEVICE_INTERFACE=m +CONFIG_IPMI_SI=m +CONFIG_IPMI_WATCHDOG=m +CONFIG_IPMI_POWEROFF=m + +## +## file: drivers/char/tpm/Kconfig +## +CONFIG_TCG_TPM=m +CONFIG_TCG_TIS=m +CONFIG_TCG_NSC=m +CONFIG_TCG_ATMEL=m +CONFIG_TCG_INFINEON=m + +## +## file: drivers/cpufreq/Kconfig +## +## choice: Default CPUFreq governor +# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set +CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y +# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set +## end choice + +## +## file: drivers/cpufreq/Kconfig.x86 +## +CONFIG_X86_PCC_CPUFREQ=m +CONFIG_X86_ACPI_CPUFREQ=m +CONFIG_X86_SPEEDSTEP_CENTRINO=m +# CONFIG_X86_P4_CLOCKMOD is not set + +## +## file: drivers/cpuidle/Kconfig +## +CONFIG_CPU_IDLE=y + +## +## file: drivers/crypto/Kconfig +## +CONFIG_CRYPTO_DEV_PADLOCK=m +CONFIG_CRYPTO_DEV_PADLOCK_AES=m +CONFIG_CRYPTO_DEV_PADLOCK_SHA=m + +## +## file: drivers/dma/Kconfig +## +CONFIG_DMADEVICES=y +CONFIG_INTEL_IOATDMA=m +# CONFIG_PCH_DMA is not set +CONFIG_NET_DMA=y + +## +## file: drivers/edac/Kconfig +## +CONFIG_EDAC=y +# CONFIG_EDAC_DEBUG is not set +CONFIG_EDAC_DECODE_MCE=m +CONFIG_EDAC_MM_EDAC=m +CONFIG_EDAC_AMD64=m +# CONFIG_EDAC_AMD64_ERROR_INJECTION is not set +CONFIG_EDAC_AMD76X=m +CONFIG_EDAC_E7XXX=m +CONFIG_EDAC_E752X=m +CONFIG_EDAC_I82875P=m +CONFIG_EDAC_I3000=m +CONFIG_EDAC_I82860=m +CONFIG_EDAC_R82600=m +CONFIG_EDAC_I5000=m +CONFIG_EDAC_I7300=m +CONFIG_EDAC_AMD8131=m +CONFIG_EDAC_AMD8111=m + +## +## file: drivers/firmware/Kconfig +## +CONFIG_EDD=m +# CONFIG_EDD_OFF is not set +CONFIG_EFI_VARS=m +CONFIG_DELL_RBU=m +CONFIG_DCDBAS=m +CONFIG_DMIID=y +CONFIG_ISCSI_IBFT_FIND=y +CONFIG_ISCSI_IBFT=y + +## +## file: drivers/firmware/google/Kconfig +## +# CONFIG_GOOGLE_FIRMWARE is not set + +## +## file: drivers/gpu/drm/Kconfig +## +CONFIG_DRM=m +CONFIG_DRM_TDFX=m +CONFIG_DRM_R128=m +CONFIG_DRM_RADEON=m +# CONFIG_DRM_I810 is not set +CONFIG_DRM_I915=m +CONFIG_DRM_I915_KMS=y +CONFIG_DRM_MGA=m +CONFIG_DRM_SIS=m + +## +## file: drivers/gpu/drm/nouveau/Kconfig +## +CONFIG_DRM_NOUVEAU=m +CONFIG_DRM_NOUVEAU_BACKLIGHT=y +# CONFIG_DRM_NOUVEAU_DEBUG is not set +CONFIG_DRM_I2C_CH7006=m +CONFIG_DRM_I2C_SIL164=m + +## +## file: drivers/gpu/stub/Kconfig +## +# CONFIG_STUB_POULSBO is not set + +## +## file: drivers/gpu/vga/Kconfig +## +CONFIG_VGA_ARB_MAX_GPUS=16 +CONFIG_VGA_SWITCHEROO=y + +## +## file: drivers/hid/usbhid/Kconfig +## +CONFIG_USB_HID=m +CONFIG_USB_KBD=m +CONFIG_USB_MOUSE=m + +## +## file: drivers/hwmon/Kconfig +## +CONFIG_SENSORS_ACPI_POWER=m +CONFIG_SENSORS_ADM1021=m +CONFIG_SENSORS_ADM1025=m +CONFIG_SENSORS_ADM1026=m +CONFIG_SENSORS_ADM1031=m +CONFIG_SENSORS_K8TEMP=m +CONFIG_SENSORS_K10TEMP=m +CONFIG_SENSORS_FAM15H_POWER=m +CONFIG_SENSORS_ASB100=m +CONFIG_SENSORS_DS1621=m +CONFIG_SENSORS_F71805F=m +CONFIG_SENSORS_GL518SM=m +CONFIG_SENSORS_GL520SM=m +CONFIG_SENSORS_IT87=m +CONFIG_SENSORS_LM63=m +CONFIG_SENSORS_LM75=m +CONFIG_SENSORS_LM77=m +CONFIG_SENSORS_LM78=m +CONFIG_SENSORS_LM80=m +CONFIG_SENSORS_LM83=m +CONFIG_SENSORS_LM85=m +CONFIG_SENSORS_LM87=m +CONFIG_SENSORS_LM90=m +CONFIG_SENSORS_LM92=m +CONFIG_SENSORS_MAX1619=m +CONFIG_SENSORS_PC87360=m +CONFIG_SENSORS_PCF8591=m +CONFIG_SENSORS_SIS5595=m +CONFIG_SENSORS_SMSC47M1=m +CONFIG_SENSORS_SMSC47B397=m +CONFIG_SENSORS_VIA686A=m +CONFIG_SENSORS_W83781D=m +CONFIG_SENSORS_W83L785TS=m +CONFIG_SENSORS_W83627HF=m + +## +## file: drivers/i2c/Kconfig +## +CONFIG_I2C=m +CONFIG_I2C_CHARDEV=m +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set + +## +## file: drivers/i2c/busses/Kconfig +## +CONFIG_I2C_ALI1535=m +CONFIG_I2C_ALI1563=m +CONFIG_I2C_ALI15X3=m +CONFIG_I2C_AMD756=m +CONFIG_I2C_AMD756_S4882=m +CONFIG_I2C_AMD8111=m +CONFIG_I2C_I801=m +CONFIG_I2C_PIIX4=m +CONFIG_I2C_NFORCE2=m +CONFIG_I2C_SIS5595=m +CONFIG_I2C_SIS630=m +CONFIG_I2C_SIS96X=m +CONFIG_I2C_VIA=m +CONFIG_I2C_VIAPRO=m +CONFIG_I2C_SCMI=m +CONFIG_I2C_PARPORT=m +CONFIG_I2C_PARPORT_LIGHT=m +CONFIG_I2C_PCA_ISA=m +CONFIG_SCx200_ACB=m + +## +## file: drivers/ide/Kconfig +## +CONFIG_IDE=m +# CONFIG_BLK_DEV_IDE_SATA is not set +CONFIG_IDE_GD=m +# CONFIG_BLK_DEV_IDECS is not set +CONFIG_BLK_DEV_IDECD=m +CONFIG_BLK_DEV_IDETAPE=m +# CONFIG_BLK_DEV_IDEACPI is not set +CONFIG_IDE_GENERIC=m +# CONFIG_BLK_DEV_CMD640 is not set +# CONFIG_BLK_DEV_CMD640_ENHANCED is not set +CONFIG_BLK_DEV_IDEPNP=y +# CONFIG_BLK_DEV_OFFBOARD is not set +# CONFIG_BLK_DEV_GENERIC is not set +CONFIG_BLK_DEV_OPTI621=m +# CONFIG_BLK_DEV_RZ1000 is not set +# CONFIG_BLK_DEV_AEC62XX is not set +# CONFIG_BLK_DEV_ALI15X3 is not set +# CONFIG_BLK_DEV_AMD74XX is not set +# CONFIG_BLK_DEV_ATIIXP is not set +# CONFIG_BLK_DEV_CMD64X is not set +# CONFIG_BLK_DEV_TRIFLEX is not set +CONFIG_BLK_DEV_CY82C693=m +# CONFIG_BLK_DEV_CS5520 is not set +# CONFIG_BLK_DEV_CS5530 is not set +CONFIG_BLK_DEV_HPT366=m +# CONFIG_BLK_DEV_SC1200 is not set +# CONFIG_BLK_DEV_PIIX is not set +# CONFIG_BLK_DEV_NS87415 is not set +# CONFIG_BLK_DEV_PDC202XX_OLD is not set +# CONFIG_BLK_DEV_PDC202XX_NEW is not set +# CONFIG_BLK_DEV_SVWKS is not set +# CONFIG_BLK_DEV_SIIMAGE is not set +# CONFIG_BLK_DEV_SIS5513 is not set +# CONFIG_BLK_DEV_SLC90E66 is not set +CONFIG_BLK_DEV_TRM290=m +# CONFIG_BLK_DEV_VIA82CXXX is not set + +## +## file: drivers/idle/Kconfig +## +# CONFIG_INTEL_IDLE is not set + +## +## file: drivers/input/gameport/Kconfig +## +CONFIG_GAMEPORT=m +CONFIG_GAMEPORT_NS558=m +CONFIG_GAMEPORT_L4=m +CONFIG_GAMEPORT_EMU10K1=m +CONFIG_GAMEPORT_FM801=m + +## +## file: drivers/input/joystick/Kconfig +## +CONFIG_INPUT_JOYSTICK=y + +## +## file: drivers/input/keyboard/Kconfig +## +CONFIG_INPUT_KEYBOARD=y +CONFIG_KEYBOARD_ATKBD=y +CONFIG_KEYBOARD_LKKBD=m +CONFIG_KEYBOARD_NEWTON=m +CONFIG_KEYBOARD_SUNKBD=m +CONFIG_KEYBOARD_XTKBD=m + +## +## file: drivers/input/misc/Kconfig +## +CONFIG_INPUT_MISC=y +CONFIG_INPUT_PCSPKR=m +CONFIG_INPUT_APANEL=m +CONFIG_INPUT_ATLAS_BTNS=m +CONFIG_INPUT_UINPUT=m +CONFIG_INPUT_XEN_KBDDEV_FRONTEND=y + +## +## file: drivers/input/mouse/Kconfig +## +CONFIG_INPUT_MOUSE=y +CONFIG_MOUSE_PS2=m +CONFIG_MOUSE_SERIAL=m +CONFIG_MOUSE_APPLETOUCH=m +CONFIG_MOUSE_BCM5974=m +CONFIG_MOUSE_VSXXXAA=m + +## +## file: drivers/input/serio/Kconfig +## +CONFIG_SERIO=y +CONFIG_SERIO_I8042=y +CONFIG_SERIO_SERPORT=m +CONFIG_SERIO_CT82C710=m +CONFIG_SERIO_PARKBD=m +CONFIG_SERIO_PCIPS2=m +CONFIG_SERIO_LIBPS2=y +CONFIG_SERIO_RAW=m + +## +## file: drivers/input/touchscreen/Kconfig +## +CONFIG_INPUT_TOUCHSCREEN=y + +## +## file: drivers/isdn/Kconfig +## +CONFIG_ISDN=y +CONFIG_ISDN_CAPI=m + +## +## file: drivers/isdn/capi/Kconfig +## +CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON=y +CONFIG_ISDN_CAPI_MIDDLEWARE=y +CONFIG_ISDN_CAPI_CAPI20=m +CONFIG_ISDN_CAPI_CAPIDRV=m + +## +## file: drivers/isdn/hardware/avm/Kconfig +## +CONFIG_CAPI_AVM=y +CONFIG_ISDN_DRV_AVMB1_B1PCI=m +CONFIG_ISDN_DRV_AVMB1_B1PCIV4=y +CONFIG_ISDN_DRV_AVMB1_B1PCMCIA=m +CONFIG_ISDN_DRV_AVMB1_AVM_CS=m +CONFIG_ISDN_DRV_AVMB1_T1PCI=m +CONFIG_ISDN_DRV_AVMB1_C4=m + +## +## file: drivers/isdn/hardware/eicon/Kconfig +## +CONFIG_CAPI_EICON=y +CONFIG_ISDN_DIVAS=m +CONFIG_ISDN_DIVAS_BRIPCI=y +CONFIG_ISDN_DIVAS_PRIPCI=y +CONFIG_ISDN_DIVAS_DIVACAPI=m +CONFIG_ISDN_DIVAS_USERIDI=m +CONFIG_ISDN_DIVAS_MAINT=m + +## +## file: drivers/leds/Kconfig +## +CONFIG_LEDS_CLEVO_MAIL=m + +## +## file: drivers/media/Kconfig +## +CONFIG_DVB_CORE=m + +## +## file: drivers/media/radio/Kconfig +## +CONFIG_RADIO_MAXIRADIO=m +CONFIG_USB_DSBR=m + +## +## file: drivers/media/rc/Kconfig +## +CONFIG_IR_ITE_CIR=m +CONFIG_IR_FINTEK=m +CONFIG_IR_NUVOTON=m +CONFIG_IR_WINBOND_CIR=m + +## +## file: drivers/message/i2o/Kconfig +## +CONFIG_I2O=m +CONFIG_I2O_CONFIG=m +CONFIG_I2O_BLOCK=m +CONFIG_I2O_SCSI=m +CONFIG_I2O_PROC=m + +## +## file: drivers/misc/Kconfig +## +CONFIG_IBM_ASM=m +CONFIG_PHANTOM=m +CONFIG_CS5535_MFGPT=m +CONFIG_HP_ILO=m + +## +## file: drivers/mmc/Kconfig +## +CONFIG_MMC=m +# CONFIG_MMC_DEBUG is not set + +## +## file: drivers/mmc/card/Kconfig +## +CONFIG_MMC_BLOCK=m + +## +## file: drivers/mtd/Kconfig +## +CONFIG_MTD=m +# CONFIG_MTD_DEBUG is not set +CONFIG_MTD_REDBOOT_PARTS=y +CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1 +# CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED is not set +# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set +# CONFIG_MTD_CMDLINE_PARTS is not set +CONFIG_MTD_CHAR=m +CONFIG_MTD_BLOCK=m +CONFIG_MTD_BLOCK_RO=m +CONFIG_FTL=m +CONFIG_NFTL=m +CONFIG_NFTL_RW=y +CONFIG_INFTL=m + +## +## file: drivers/mtd/chips/Kconfig +## +CONFIG_MTD_CFI=m +CONFIG_MTD_JEDECPROBE=m +# CONFIG_MTD_CFI_ADV_OPTIONS is not set +CONFIG_MTD_MAP_BANK_WIDTH_1=y +CONFIG_MTD_MAP_BANK_WIDTH_2=y +CONFIG_MTD_MAP_BANK_WIDTH_4=y +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set +CONFIG_MTD_CFI_I1=y +CONFIG_MTD_CFI_I2=y +# CONFIG_MTD_CFI_I4 is not set +# CONFIG_MTD_CFI_I8 is not set +CONFIG_MTD_CFI_INTELEXT=m +CONFIG_MTD_CFI_AMDSTD=m +CONFIG_MTD_CFI_STAA=m +CONFIG_MTD_RAM=m +CONFIG_MTD_ROM=m +CONFIG_MTD_ABSENT=m + +## +## file: drivers/mtd/devices/Kconfig +## +CONFIG_MTD_PMC551=m +# CONFIG_MTD_PMC551_BUGFIX is not set +# CONFIG_MTD_PMC551_DEBUG is not set +CONFIG_MTD_SLRAM=m +CONFIG_MTD_PHRAM=m +CONFIG_MTD_MTDRAM=m +CONFIG_MTDRAM_TOTAL_SIZE=4096 +CONFIG_MTDRAM_ERASE_SIZE=128 +CONFIG_MTD_BLOCK2MTD=m +CONFIG_MTD_DOC2000=m +CONFIG_MTD_DOC2001=m +CONFIG_MTD_DOC2001PLUS=m +# CONFIG_MTD_DOCPROBE_ADVANCED is not set +CONFIG_MTD_DOCPROBE_ADDRESS=0 + +## +## file: drivers/mtd/maps/Kconfig +## +CONFIG_MTD_COMPLEX_MAPPINGS=y +CONFIG_MTD_PHYSMAP=m +# CONFIG_MTD_PHYSMAP_COMPAT is not set +CONFIG_MTD_PHYSMAP_START=0x8000000 +CONFIG_MTD_PHYSMAP_LEN=0x4000000 +CONFIG_MTD_PHYSMAP_BANKWIDTH=2 +CONFIG_MTD_SC520CDP=m +CONFIG_MTD_NETSC520=m +CONFIG_MTD_TS5500=m +CONFIG_MTD_SBC_GXX=m +# CONFIG_MTD_AMD76XROM is not set +# CONFIG_MTD_ICHXROM is not set +# CONFIG_MTD_SCB2_FLASH is not set +CONFIG_MTD_NETtel=m +CONFIG_MTD_DILNETPC=m +CONFIG_MTD_DILNETPC_BOOTSIZE=0x80000 +# CONFIG_MTD_L440GX is not set +CONFIG_MTD_PCI=m + +## +## file: drivers/mtd/nand/Kconfig +## +CONFIG_MTD_NAND=m +# CONFIG_MTD_NAND_VERIFY_WRITE is not set +CONFIG_MTD_NAND_DISKONCHIP=m +# CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADVANCED is not set +CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADDRESS=0 +# CONFIG_MTD_NAND_DISKONCHIP_BBTWRITE is not set +CONFIG_MTD_NAND_PLATFORM=m + +## +## file: drivers/net/Kconfig +## +CONFIG_DUMMY=m +CONFIG_NET_SB1000=m +CONFIG_HAPPYMEAL=m +CONFIG_SUNGEM=m +CONFIG_NET_VENDOR_3COM=y +CONFIG_VORTEX=m +CONFIG_TYPHOON=m +CONFIG_HP100=m +CONFIG_NET_PCI=y +CONFIG_AMD8111_ETH=m +CONFIG_ADAPTEC_STARFIRE=m +CONFIG_B44=m +CONFIG_FORCEDETH=m +CONFIG_E100=m +CONFIG_FEALNX=m +CONFIG_NATSEMI=m +CONFIG_NE2K_PCI=m +CONFIG_8139CP=m +CONFIG_8139TOO=m +CONFIG_8139TOO_TUNE_TWISTER=y +CONFIG_8139TOO_8129=y +# CONFIG_8139_OLD_RX_RESET is not set +CONFIG_SIS900=m +CONFIG_EPIC100=m +CONFIG_SUNDANCE=m +# CONFIG_SUNDANCE_MMIO is not set +CONFIG_VIA_RHINE=m +# CONFIG_VIA_RHINE_MMIO is not set +CONFIG_ATP=m +CONFIG_DE600=m +CONFIG_DE620=m +CONFIG_XEN_NETDEV_FRONTEND=m +CONFIG_XEN_NETDEV_BACKEND=m +CONFIG_FDDI=y +CONFIG_SKFP=m +CONFIG_HIPPI=y +CONFIG_ROADRUNNER=m +# CONFIG_ROADRUNNER_LARGE_RINGS is not set +CONFIG_PLIP=m +CONFIG_NET_FC=y +# CONFIG_NETPOLL_TRAP is not set + +## +## file: drivers/net/arcnet/Kconfig +## +CONFIG_ARCNET=m +CONFIG_ARCNET_1201=m +CONFIG_ARCNET_1051=m +CONFIG_ARCNET_RAW=m +CONFIG_ARCNET_CAP=m +CONFIG_ARCNET_COM90xx=m +CONFIG_ARCNET_COM90xxIO=m +CONFIG_ARCNET_RIM_I=m +CONFIG_ARCNET_COM20020=m +CONFIG_ARCNET_COM20020_PCI=m + +## +## file: drivers/net/irda/Kconfig +## +CONFIG_IRTTY_SIR=m +CONFIG_USB_IRDA=m +CONFIG_SIGMATEL_FIR=m +CONFIG_NSC_FIR=m +CONFIG_WINBOND_FIR=m +CONFIG_SMC_IRCC_FIR=m +CONFIG_ALI_FIR=m +CONFIG_VLSI_FIR=m +CONFIG_VIA_FIR=m + +## +## file: drivers/net/pcmcia/Kconfig +## +CONFIG_NET_PCMCIA=y +CONFIG_PCMCIA_3C589=m +CONFIG_PCMCIA_3C574=m +CONFIG_PCMCIA_FMVJ18X=m +CONFIG_PCMCIA_PCNET=m +CONFIG_PCMCIA_NMCLAN=m +CONFIG_PCMCIA_SMC91C92=m +CONFIG_PCMCIA_XIRC2PS=m +CONFIG_PCMCIA_AXNET=m +CONFIG_ARCNET_COM20020_CS=m + +## +## file: drivers/net/tulip/Kconfig +## +CONFIG_NET_TULIP=y +CONFIG_DE2104X=m +CONFIG_TULIP=m +# CONFIG_TULIP_MWI is not set +# CONFIG_TULIP_MMIO is not set +CONFIG_DE4X5=m +CONFIG_WINBOND_840=m +CONFIG_DM9102=m +CONFIG_PCMCIA_XIRCOM=m + +## +## file: drivers/net/wan/Kconfig +## +CONFIG_WAN=y +CONFIG_LANMEDIA=m +CONFIG_PCI200SYN=m +CONFIG_WANXL=m +CONFIG_PC300=m +CONFIG_PC300_MLPPP=y +CONFIG_FARSYNC=m +CONFIG_DSCC4=m +CONFIG_DSCC4_PCISYNC=y +CONFIG_DSCC4_PCI_RST=y +CONFIG_DLCI=m +CONFIG_DLCI_MAX=8 +CONFIG_CYCLADES_SYNC=m +CONFIG_SBNI=m +# CONFIG_SBNI_MULTILINE is not set + +## +## file: drivers/net/wireless/Kconfig +## +CONFIG_PCMCIA_RAYCS=m +CONFIG_ATMEL=m +CONFIG_PCI_ATMEL=m +CONFIG_PCMCIA_ATMEL=m +CONFIG_AIRO_CS=m +CONFIG_PCMCIA_WL3501=m +CONFIG_USB_ZD1201=m + +## +## file: drivers/net/wireless/mwifiex/Kconfig +## +CONFIG_MWIFIEX=m +CONFIG_MWIFIEX_SDIO=m + +## +## file: drivers/net/wireless/orinoco/Kconfig +## +CONFIG_HERMES=m +CONFIG_PLX_HERMES=m +CONFIG_TMD_HERMES=m +CONFIG_PCI_HERMES=m +CONFIG_PCMCIA_HERMES=m + +## +## file: drivers/pci/Kconfig +## +CONFIG_XEN_PCIDEV_FRONTEND=m +CONFIG_HT_IRQ=y + +## +## file: drivers/pci/hotplug/Kconfig +## +CONFIG_HOTPLUG_PCI=m +CONFIG_HOTPLUG_PCI_FAKE=m +CONFIG_HOTPLUG_PCI_ACPI=m +CONFIG_HOTPLUG_PCI_ACPI_IBM=m +CONFIG_HOTPLUG_PCI_CPCI_ZT5550=m +CONFIG_HOTPLUG_PCI_CPCI_GENERIC=m +CONFIG_HOTPLUG_PCI_SHPC=m + +## +## file: drivers/pcmcia/Kconfig +## +CONFIG_PCCARD=m +CONFIG_PCMCIA=m +CONFIG_CARDBUS=y +CONFIG_YENTA=m +CONFIG_PD6729=m +CONFIG_I82092=m +CONFIG_TCIC=m +# CONFIG_PCMCIA_DEBUG is not set + +## +## file: drivers/platform/x86/Kconfig +## +CONFIG_X86_PLATFORM_DEVICES=y +CONFIG_ACER_WMI=m +CONFIG_ACERHDF=m +CONFIG_DELL_LAPTOP=m +CONFIG_DELL_WMI=m +CONFIG_DELL_WMI_AIO=m +CONFIG_HP_ACCEL=m +CONFIG_SONYPI_COMPAT=y +CONFIG_IDEAPAD_LAPTOP=m +CONFIG_THINKPAD_ACPI=m +CONFIG_THINKPAD_ACPI_ALSA_SUPPORT=y +# CONFIG_THINKPAD_ACPI_DEBUGFACILITIES is not set +# CONFIG_THINKPAD_ACPI_DEBUG is not set +# CONFIG_THINKPAD_ACPI_UNSAFE_LEDS is not set +CONFIG_THINKPAD_ACPI_VIDEO=y +CONFIG_THINKPAD_ACPI_HOTKEY_POLL=y +CONFIG_SENSORS_HDAPS=m +# CONFIG_INTEL_MENLOW is not set +CONFIG_EEEPC_LAPTOP=m +CONFIG_ASUS_WMI=m +CONFIG_ASUS_NB_WMI=m +CONFIG_EEEPC_WMI=m +CONFIG_ACPI_WMI=m +CONFIG_MSI_WMI=m +CONFIG_ACPI_ASUS=m +CONFIG_TOPSTAR_LAPTOP=m +CONFIG_ACPI_TOSHIBA=m +CONFIG_TOSHIBA_BT_RFKILL=m +CONFIG_ACPI_CMPC=m +CONFIG_INTEL_IPS=m +CONFIG_SAMSUNG_LAPTOP=m +CONFIG_INTEL_OAKTRAIL=m + +## +## file: drivers/pnp/Kconfig +## +CONFIG_PNP=y + +## +## file: drivers/power/Kconfig +## +CONFIG_POWER_SUPPLY=m +# CONFIG_POWER_SUPPLY_DEBUG is not set +CONFIG_PDA_POWER=m +CONFIG_BATTERY_DS2760=m + +## +## file: drivers/rtc/Kconfig +## +CONFIG_RTC_DRV_CMOS=y + +## +## file: drivers/scsi/Kconfig +## +CONFIG_SCSI_DPT_I2O=m +CONFIG_SCSI_ARCMSR=m +CONFIG_SCSI_BUSLOGIC=m +CONFIG_SCSI_DMX3191D=m +CONFIG_SCSI_EATA=m +CONFIG_SCSI_EATA_TAGGED_QUEUE=y +CONFIG_SCSI_EATA_LINKED_COMMANDS=y +CONFIG_SCSI_EATA_MAX_TAGS=16 +CONFIG_SCSI_FUTURE_DOMAIN=m +CONFIG_SCSI_GDTH=m +CONFIG_SCSI_ISCI=m +CONFIG_SCSI_IPS=m +CONFIG_SCSI_INITIO=m +CONFIG_SCSI_SYM53C8XX_2=m +CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1 +CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16 +CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 +CONFIG_SCSI_IPR=m +# CONFIG_SCSI_IPR_TRACE is not set +# CONFIG_SCSI_IPR_DUMP is not set +CONFIG_SCSI_QLOGIC_1280=m +CONFIG_SCSI_DC395x=m +CONFIG_SCSI_DC390T=m +CONFIG_SCSI_DEBUG=m + +## +## file: drivers/scsi/aic7xxx/Kconfig.aic7xxx +## +CONFIG_AIC7XXX_CMDS_PER_DEVICE=8 + +## +## file: drivers/scsi/megaraid/Kconfig.megaraid +## +CONFIG_MEGARAID_NEWGEN=y +CONFIG_MEGARAID_MM=m +CONFIG_MEGARAID_MAILBOX=m +CONFIG_MEGARAID_LEGACY=m + +## +## file: drivers/scsi/pcmcia/Kconfig +## +CONFIG_PCMCIA_AHA152X=m +CONFIG_PCMCIA_FDOMAIN=m +CONFIG_PCMCIA_QLOGIC=m +CONFIG_PCMCIA_SYM53C500=m + +## +## file: drivers/sfi/Kconfig +## +CONFIG_SFI=y + +## +## file: drivers/staging/brcm80211/Kconfig +## +CONFIG_BRCMSMAC=m +# CONFIG_BRCMFMAC is not set +# CONFIG_BRCMDBG is not set + +## +## file: drivers/staging/comedi/Kconfig +## +CONFIG_COMEDI=m +# CONFIG_COMEDI_DEBUG is not set +CONFIG_COMEDI_PCI_DRIVERS=m +CONFIG_COMEDI_PCMCIA_DRIVERS=m +CONFIG_COMEDI_USB_DRIVERS=m +CONFIG_COMEDI_NI_COMMON=m +CONFIG_COMEDI_NI_PCIMIO=m +CONFIG_COMEDI_NI_TIO=m +CONFIG_COMEDI_FC=m +CONFIG_COMEDI_MITE=m +CONFIG_COMEDI_8255=m + +## +## file: drivers/staging/easycap/Kconfig +## +CONFIG_EASYCAP=m + +## +## file: drivers/staging/et131x/Kconfig +## +CONFIG_ET131X=m +# CONFIG_ET131X_DEBUG is not set + +## +## file: drivers/staging/generic_serial/Kconfig +## +CONFIG_SX=m + +## +## file: drivers/staging/gma500/Kconfig +## +CONFIG_DRM_PSB=m + +## +## file: drivers/staging/lirc/Kconfig +## +CONFIG_LIRC_STAGING=y +CONFIG_LIRC_BT829=m +CONFIG_LIRC_IGORPLUGUSB=m +CONFIG_LIRC_IMON=m +CONFIG_LIRC_SASEM=m +CONFIG_LIRC_SERIAL=m +CONFIG_LIRC_SERIAL_TRANSMITTER=y +CONFIG_LIRC_SIR=m +CONFIG_LIRC_TTUSBIR=m +CONFIG_LIRC_ZILOG=m + +## +## file: drivers/staging/pohmelfs/Kconfig +## +CONFIG_POHMELFS=m +# CONFIG_POHMELFS_DEBUG is not set +CONFIG_POHMELFS_CRYPTO=y + +## +## file: drivers/staging/rtl8187se/Kconfig +## +CONFIG_R8187SE=m + +## +## file: drivers/staging/rtl8192e/Kconfig +## +CONFIG_RTL8192E=m + +## +## file: drivers/staging/rtl8192u/Kconfig +## +CONFIG_RTL8192U=m + +## +## file: drivers/staging/rtl8712/Kconfig +## +CONFIG_R8712U=m + +## +## file: drivers/staging/tm6000/Kconfig +## +CONFIG_VIDEO_TM6000=m +CONFIG_VIDEO_TM6000_ALSA=m +CONFIG_VIDEO_TM6000_DVB=m + +## +## file: drivers/staging/usbip/Kconfig +## +CONFIG_USBIP_CORE=m +CONFIG_USBIP_VHCI_HCD=m +CONFIG_USBIP_HOST=m +# CONFIG_USBIP_DEBUG is not set + +## +## file: drivers/staging/vt6656/Kconfig +## +CONFIG_VT6656=m + +## +## file: drivers/staging/wlan-ng/Kconfig +## +CONFIG_PRISM2_USB=m + +## +## file: drivers/staging/zram/Kconfig +## +CONFIG_ZRAM=m + +## +## file: drivers/telephony/Kconfig +## +CONFIG_PHONE=m +CONFIG_PHONE_IXJ=m +CONFIG_PHONE_IXJ_PCMCIA=m + +## +## file: drivers/thermal/Kconfig +## +CONFIG_THERMAL=m +CONFIG_THERMAL_HWMON=y + +## +## file: drivers/tty/Kconfig +## +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +CONFIG_SERIAL_NONSTANDARD=y +CONFIG_ROCKETPORT=m +CONFIG_CYCLADES=m +# CONFIG_CYZ_INTR is not set +CONFIG_SYNCLINK=m +CONFIG_SYNCLINKMP=m +CONFIG_N_HDLC=m + +## +## file: drivers/tty/hvc/Kconfig +## +CONFIG_HVC_XEN=y + +## +## file: drivers/tty/serial/Kconfig +## +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_SERIAL_8250_CS=m +CONFIG_SERIAL_8250_NR_UARTS=32 +CONFIG_SERIAL_8250_RUNTIME_UARTS=4 +CONFIG_SERIAL_8250_EXTENDED=y +CONFIG_SERIAL_8250_MANY_PORTS=y +CONFIG_SERIAL_8250_SHARE_IRQ=y +# CONFIG_SERIAL_8250_DETECT_IRQ is not set +CONFIG_SERIAL_8250_RSA=y +CONFIG_SERIAL_JSM=m + +## +## file: drivers/usb/Kconfig +## +CONFIG_USB=m +CONFIG_USB_USS720=m + +## +## file: drivers/usb/atm/Kconfig +## +CONFIG_USB_ATM=m +CONFIG_USB_SPEEDTOUCH=m + +## +## file: drivers/usb/host/Kconfig +## +CONFIG_USB_EHCI_HCD=m +CONFIG_USB_EHCI_ROOT_HUB_TT=y +CONFIG_USB_OHCI_HCD=m +# CONFIG_USB_OHCI_HCD_SSB is not set +CONFIG_USB_UHCI_HCD=m +CONFIG_USB_SL811_HCD=m +CONFIG_USB_SL811_CS=m + +## +## file: drivers/video/Kconfig +## +CONFIG_VIDEO_OUTPUT_CONTROL=m +CONFIG_FB=y +CONFIG_FB_MODE_HELPERS=y +CONFIG_FB_TILEBLITTING=y +CONFIG_FB_CIRRUS=m +CONFIG_FB_PM2=m +CONFIG_FB_PM2_FIFO_DISCONNECT=y +CONFIG_FB_CYBER2000=m +# CONFIG_FB_ASILIANT is not set +# CONFIG_FB_IMSTT is not set +CONFIG_FB_VGA16=m +CONFIG_FB_UVESA=m +CONFIG_FB_VESA=y +CONFIG_FB_EFI=y +CONFIG_FB_N411=m +CONFIG_FB_HGA=m +CONFIG_FB_S1D13XXX=m +CONFIG_FB_NVIDIA=m +CONFIG_FB_NVIDIA_BACKLIGHT=y +# CONFIG_FB_RIVA is not set +# CONFIG_FB_RIVA_I2C is not set +# CONFIG_FB_RIVA_DEBUG is not set +CONFIG_FB_LE80578=m +CONFIG_FB_CARILLO_RANCH=m +# CONFIG_FB_INTEL is not set +CONFIG_FB_MATROX=m +CONFIG_FB_MATROX_MILLENIUM=y +CONFIG_FB_MATROX_MYSTIQUE=y +CONFIG_FB_MATROX_I2C=m +CONFIG_FB_RADEON=m +CONFIG_FB_RADEON_I2C=y +CONFIG_FB_RADEON_BACKLIGHT=y +# CONFIG_FB_RADEON_DEBUG is not set +CONFIG_FB_ATY128=m +CONFIG_FB_ATY128_BACKLIGHT=y +CONFIG_FB_ATY=m +CONFIG_FB_ATY_CT=y +CONFIG_FB_ATY_GX=y +CONFIG_FB_ATY_BACKLIGHT=y +CONFIG_FB_SAVAGE=m +# CONFIG_FB_SAVAGE_ACCEL is not set +CONFIG_FB_SIS=m +CONFIG_FB_SIS_300=y +CONFIG_FB_SIS_315=y +CONFIG_FB_NEOMAGIC=m +CONFIG_FB_KYRO=m +CONFIG_FB_VOODOO1=m +CONFIG_FB_TRIDENT=m +CONFIG_FB_VIRTUAL=m +CONFIG_XEN_FBDEV_FRONTEND=y + +## +## file: drivers/video/backlight/Kconfig +## +CONFIG_BACKLIGHT_PROGEAR=m + +## +## file: drivers/video/console/Kconfig +## +CONFIG_VGA_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE=y +# CONFIG_FONTS is not set +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y + +## +## file: drivers/video/logo/Kconfig +## +# CONFIG_LOGO is not set + +## +## file: drivers/watchdog/Kconfig +## +CONFIG_ACQUIRE_WDT=m +CONFIG_ADVANTECH_WDT=m +CONFIG_ALIM1535_WDT=m +CONFIG_ALIM7101_WDT=m +CONFIG_F71808E_WDT=m +CONFIG_SP5100_TCO=m +CONFIG_GEODE_WDT=m +CONFIG_SC520_WDT=m +CONFIG_EUROTECH_WDT=m +CONFIG_IB700_WDT=m +CONFIG_IBMASR=m +CONFIG_WAFER_WDT=m +CONFIG_I6300ESB_WDT=m +CONFIG_IT8712F_WDT=m +CONFIG_HP_WATCHDOG=m +CONFIG_HPWDT_NMI_DECODING=y +CONFIG_SC1200_WDT=m +CONFIG_NV_TCO=m +CONFIG_60XX_WDT=m +CONFIG_SBC8360_WDT=m +CONFIG_CPU5_WDT=m +CONFIG_W83627HF_WDT=m +CONFIG_W83877F_WDT=m +CONFIG_W83977F_WDT=m +CONFIG_MACHZ_WDT=m +CONFIG_PCIPCWATCHDOG=m +CONFIG_WDTPCI=m +CONFIG_USBPCWATCHDOG=m + +## +## file: drivers/xen/Kconfig +## +CONFIG_XEN_BALLOON=y +CONFIG_XEN_SCRUB_PAGES=y +CONFIG_XEN_DEV_EVTCHN=m +CONFIG_XEN_BACKEND=y +CONFIG_XENFS=m +CONFIG_XEN_COMPAT_XENFS=y +CONFIG_XEN_SYS_HYPERVISOR=y +CONFIG_XEN_GNTDEV=m +CONFIG_XEN_GRANT_DEV_ALLOC=m +CONFIG_XEN_PLATFORM_PCI=y + +## +## file: fs/partitions/Kconfig +## +CONFIG_ACORN_PARTITION=y +# CONFIG_ACORN_PARTITION_CUMANA is not set +# CONFIG_ACORN_PARTITION_EESOX is not set +CONFIG_ACORN_PARTITION_ICS=y +# CONFIG_ACORN_PARTITION_ADFS is not set +# CONFIG_ACORN_PARTITION_POWERTEC is not set +CONFIG_ACORN_PARTITION_RISCIX=y +CONFIG_OSF_PARTITION=y +CONFIG_AMIGA_PARTITION=y +CONFIG_ATARI_PARTITION=y +CONFIG_MAC_PARTITION=y +CONFIG_BSD_DISKLABEL=y +CONFIG_MINIX_SUBPARTITION=y +CONFIG_SOLARIS_X86_PARTITION=y +CONFIG_UNIXWARE_DISKLABEL=y +CONFIG_LDM_PARTITION=y +# CONFIG_LDM_DEBUG is not set +CONFIG_SGI_PARTITION=y +CONFIG_ULTRIX_PARTITION=y +CONFIG_SUN_PARTITION=y +CONFIG_EFI_PARTITION=y + +## +## file: kernel/irq/Kconfig +## +CONFIG_SPARSE_IRQ=y + +## +## file: kernel/power/Kconfig +## +# CONFIG_PM_TEST_SUSPEND is not set +# CONFIG_PM_TRACE_RTC is not set + +## +## file: kernel/trace/Kconfig +## +# CONFIG_MMIOTRACE is not set + +## +## file: lib/Kconfig.debug +## +# CONFIG_DEBUG_SHIRQ is not set +# CONFIG_DEBUG_STACK_USAGE is not set +# CONFIG_FRAME_POINTER is not set +# CONFIG_DEBUG_PER_CPU_MAPS is not set +# CONFIG_PROVIDE_OHCI1394_DMA_INIT is not set + +## +## file: mm/Kconfig +## +CONFIG_DEFAULT_MMAP_MIN_ADDR=65536 +CONFIG_TRANSPARENT_HUGEPAGE=y +## choice: Transparent Hugepage Support sysfs defaults +CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y +## end choice + +## +## file: mm/Kconfig.debug +## +# CONFIG_DEBUG_PAGEALLOC is not set + +## +## file: net/ax25/Kconfig +## +CONFIG_HAMRADIO=y +CONFIG_AX25=m +# CONFIG_AX25_DAMA_SLAVE is not set +CONFIG_NETROM=m +CONFIG_ROSE=m + +## +## file: net/decnet/Kconfig +## +CONFIG_DECNET=m +# CONFIG_DECNET_ROUTER is not set + +## +## file: net/decnet/netfilter/Kconfig +## +CONFIG_DECNET_NF_GRABULATOR=m + +## +## file: net/ipv6/Kconfig +## +CONFIG_IPV6=y + +## +## file: net/ipx/Kconfig +## +CONFIG_IPX=m +# CONFIG_IPX_INTERN is not set + +## +## file: net/irda/Kconfig +## +CONFIG_IRDA=m +# CONFIG_IRDA_ULTRA is not set +CONFIG_IRDA_CACHE_LAST_LSAP=y +CONFIG_IRDA_FAST_RR=y +# CONFIG_IRDA_DEBUG is not set + +## +## file: net/irda/ircomm/Kconfig +## +CONFIG_IRCOMM=m + +## +## file: net/irda/irlan/Kconfig +## +CONFIG_IRLAN=m + +## +## file: net/irda/irnet/Kconfig +## +CONFIG_IRNET=m + +## +## file: net/lapb/Kconfig +## +CONFIG_LAPB=m + +## +## file: net/wanrouter/Kconfig +## +CONFIG_WAN_ROUTER=m + +## +## file: sound/drivers/Kconfig +## +CONFIG_SND_DUMMY=m +CONFIG_SND_VIRMIDI=m +CONFIG_SND_MTPAV=m +CONFIG_SND_SERIAL_U16550=m +CONFIG_SND_MPU401=m + +## +## file: sound/pci/Kconfig +## +CONFIG_SND_ALS4000=m +CONFIG_SND_ALI5451=m +CONFIG_SND_ATIIXP=m +CONFIG_SND_ATIIXP_MODEM=m +CONFIG_SND_AU8810=m +CONFIG_SND_AU8820=m +CONFIG_SND_AU8830=m +CONFIG_SND_AZT3328=m +CONFIG_SND_BT87X=m +# CONFIG_SND_BT87X_OVERCLOCK is not set +CONFIG_SND_CA0106=m +CONFIG_SND_CMIPCI=m +CONFIG_SND_CS4281=m +CONFIG_SND_CS46XX=m +CONFIG_SND_CS46XX_NEW_DSP=y +CONFIG_SND_EMU10K1=m +CONFIG_SND_EMU10K1X=m +CONFIG_SND_ENS1370=m +CONFIG_SND_ENS1371=m +CONFIG_SND_ES1938=m +CONFIG_SND_ES1968=m +CONFIG_SND_FM801=m +CONFIG_SND_FM801_TEA575X_BOOL=y +CONFIG_SND_HDSP=m +CONFIG_SND_ICE1712=m +CONFIG_SND_ICE1724=m +CONFIG_SND_INTEL8X0=m +CONFIG_SND_INTEL8X0M=m +CONFIG_SND_KORG1212=m +CONFIG_SND_MAESTRO3=m +CONFIG_SND_MIXART=m +CONFIG_SND_NM256=m +CONFIG_SND_RME32=m +CONFIG_SND_RME96=m +CONFIG_SND_RME9652=m +CONFIG_SND_SONICVIBES=m +CONFIG_SND_TRIDENT=m +CONFIG_SND_VIA82XX=m +CONFIG_SND_VIA82XX_MODEM=m +CONFIG_SND_VX222=m +CONFIG_SND_YMFPCI=m + +## +## file: sound/pci/hda/Kconfig +## +CONFIG_SND_HDA_INTEL=m + --- linux-2.6-3.0.0~rc6.orig/debian/config/kernelarch-x86/config-arch-64 +++ linux-2.6-3.0.0~rc6/debian/config/kernelarch-x86/config-arch-64 @@ -0,0 +1,147 @@ +## +## file: arch/x86/Kconfig +## +CONFIG_64BIT=y +CONFIG_SMP=y +CONFIG_X86_X2APIC=y +CONFIG_CALGARY_IOMMU=y +CONFIG_CALGARY_IOMMU_ENABLED_BY_DEFAULT=y +CONFIG_AMD_IOMMU=y +# CONFIG_AMD_IOMMU_STATS is not set +# CONFIG_MAXSMP is not set +CONFIG_NR_CPUS=512 +CONFIG_NUMA=y +CONFIG_AMD_NUMA=y +CONFIG_X86_64_ACPI_NUMA=y +CONFIG_NUMA_EMU=y +CONFIG_PCI_MMCONFIG=y + +## +## file: arch/x86/Kconfig.cpu +## +## choice: Processor family +# CONFIG_MK8 is not set +# CONFIG_MPSC is not set +# CONFIG_MCORE2 is not set +# CONFIG_MATOM is not set +CONFIG_GENERIC_CPU=y +## end choice + +## +## file: crypto/Kconfig +## +CONFIG_CRYPTO_AES_X86_64=m +CONFIG_CRYPTO_SALSA20_X86_64=m +CONFIG_CRYPTO_TWOFISH_X86_64=m + +## +## file: drivers/block/Kconfig +## +CONFIG_BLK_DEV_RAM_SIZE=65536 + +## +## file: drivers/char/agp/Kconfig +## +CONFIG_AGP=y +#. Needed by GART_IOMMU +CONFIG_AGP_AMD64=y + +## +## file: drivers/cpufreq/Kconfig.x86 +## +CONFIG_X86_POWERNOW_K8=m + +## +## file: drivers/i2c/busses/Kconfig +## +CONFIG_I2C_STUB=m + +## +## file: drivers/ide/Kconfig +## +# CONFIG_IDEPCI_PCIBUS_ORDER is not set + +## +## file: drivers/input/mouse/Kconfig +## +CONFIG_MOUSE_PS2_LOGIPS2PP=y +CONFIG_MOUSE_PS2_SYNAPTICS=y +CONFIG_MOUSE_PS2_LIFEBOOK=y +CONFIG_MOUSE_PS2_TRACKPOINT=y + +## +## file: drivers/macintosh/Kconfig +## +CONFIG_MACINTOSH_DRIVERS=y +CONFIG_MAC_EMUMOUSEBTN=y + +## +## file: drivers/net/Kconfig +## +# CONFIG_8139TOO_PIO is not set + +## +## file: drivers/net/wireless/ipw2x00/Kconfig +## +# CONFIG_IPW2100 is not set + +## +## file: drivers/scsi/Kconfig +## +CONFIG_SCSI_INIA100=m + +## +## file: drivers/staging/generic_serial/Kconfig +## +CONFIG_RIO=m +CONFIG_RIO_OLDPCI=y + +## +## file: drivers/staging/tty/Kconfig +## +CONFIG_DIGIEPCA=m +CONFIG_SPECIALIX=m + +## +## file: drivers/tty/Kconfig +## +CONFIG_MOXA_INTELLIO=m +CONFIG_ISI=m + +## +## file: drivers/video/Kconfig +## +# CONFIG_FB_NVIDIA_I2C is not set +CONFIG_FB_MATROX_G=y +CONFIG_FB_MATROX_MAVEN=m +# CONFIG_FB_ATY_GENERIC_LCD is not set +# CONFIG_FB_SAVAGE_I2C is not set + +## +## file: drivers/video/geode/Kconfig +## +# CONFIG_FB_GEODE is not set + +## +## file: init/Kconfig +## +CONFIG_RCU_FANOUT=64 + +## +## file: lib/Kconfig.debug +## +CONFIG_FRAME_WARN=2048 + +## +## file: mm/Kconfig +## +## choice: Memory model +CONFIG_SPARSEMEM_MANUAL=y +## end choice +CONFIG_SPARSEMEM_VMEMMAP=y + +## +## file: security/Kconfig +## +CONFIG_LSM_MMAP_MIN_ADDR=65536 + --- linux-2.6-3.0.0~rc6.orig/debian/lib/python/debian_linux/firmware.py +++ linux-2.6-3.0.0~rc6/debian/lib/python/debian_linux/firmware.py @@ -0,0 +1,87 @@ +import re + +class FirmwareFile(object): + def __init__(self, binary, desc=None, source=None, version=None): + self.binary = binary + self.desc = desc + self.source = source + self.version = version + +class FirmwareSection(object): + def __init__(self, driver, files, licence): + self.driver = driver + self.files = files + self.licence = licence + +class FirmwareWhence(list): + def __init__(self, file): + self.read(file) + + def read(self, file): + in_header = True + driver = None + files = {} + licence = None + binary = None + desc = None + source = None + version = None + + for line in file: + if line.startswith('----------'): + if in_header: + in_header = False + else: + # Finish old section + if driver: + self.append(FirmwareSection(driver, files, licence)) + driver = None + files = {} + licence = None + continue + + if in_header: + continue + + if line == '\n': + # End of field; end of file fields + if binary: + files[binary] = FirmwareFile(binary, desc, source, version) + binary = None + desc = None + source = None + version = None + continue + + match = re.match( + r'(Driver|File|Info|Licen[cs]e|Source|Version' + r'|Original licen[cs]e info(?:rmation)?):\s*(.*)\n', + line) + if match: + keyword, value = match.group(1, 2) + if keyword == 'Driver': + driver = value.split(' ')[0].lower() + elif keyword == 'File': + match = re.match(r'(\S+)\s+--\s+(.*)', value) + if match: + binary = match.group(1) + desc = match.group(2) + else: + for binary in value.strip().split(): + files[binary] = FirmwareFile(binary) + binary = None + elif keyword in ['Info', 'Version']: + version = value + elif keyword == 'Source': + source = value + else: + licence = value + elif licence is not None: + licence = (licence + '\n' + + re.sub(r'^(?:[/ ]\*| \*/)?\s*(.*?)\s*$', r'\1', line)) + + # Finish last section if non-empty + if binary: + files[binary] = FirmwareFile(binary, desc, source, version) + if driver: + self.append(FirmwareSection(driver, files, licence)) --- linux-2.6-3.0.0~rc6.orig/debian/lib/python/debian_linux/abi.py +++ linux-2.6-3.0.0~rc6/debian/lib/python/debian_linux/abi.py @@ -0,0 +1,39 @@ +class Symbol(object): + def __init__(self, name, module, version, export): + self.name, self.module = name, module + self.version, self.export = version, export + + def __eq__(self, other): + if not isinstance(other, Symbol): + return NotImplemented + + # Symbols are resolved to modules by depmod at installation/ + # upgrade time, not compile time, so moving a symbol between + # modules is not an ABI change. Compare everything else. + if self.name != other.name: return False + if self.version != other.version: return False + if self.export != other.export: return False + + return True + + def __ne__(self, other): + ret = self.__eq__(other) + if ret is NotImplemented: + return ret + return not ret + +class Symbols(dict): + def __init__(self, file=None): + if file: + self.read(file) + + def read(self, file): + for line in file: + version, name, module, export = line.strip().split() + self[name] = Symbol(name, module, version, export) + + def write(self, file): + symbols = self.values() + symbols.sort(key=lambda i: i.name) + for s in symbols: + file.write("%s %s %s %s\n" % (s.version, s.name, s.module, s.export)) --- linux-2.6-3.0.0~rc6.orig/debian/lib/python/debian_linux/debian.py +++ linux-2.6-3.0.0~rc6/debian/lib/python/debian_linux/debian.py @@ -0,0 +1,374 @@ +import itertools, os.path, re, utils + +class Changelog(list): + _rules = r""" +^ +(?P + \w[-+0-9a-z.]+ +) +\ +\( +(?P + [^\(\)\ \t]+ +) +\) +\s+ +(?P + [-+0-9a-zA-Z.]+ +) +\; +""" + _re = re.compile(_rules, re.X) + + class Entry(object): + __slot__ = 'distribution', 'source', 'version' + + def __init__(self, distribution, source, version): + self.distribution, self.source, self.version = distribution, source, version + + def __init__(self, dir = '', version = None): + if version is None: + version = Version + f = file(os.path.join(dir, "debian/changelog")) + while True: + line = f.readline() + if not line: + break + match = self._re.match(line) + if not match: + continue + try: + v = version(match.group('version')) + except Exception: + if not len(self): + raise + v = Version(match.group('version')) + self.append(self.Entry(match.group('distribution'), match.group('source'), v)) + +class Version(object): + _version_rules = ur""" +^ +(?: + (?P + \d+ + ) + : +)? +(?P + .+? +) +(?: + - + (?P[^-]+) +)? +$ +""" + _version_re = re.compile(_version_rules, re.X) + + def __init__(self, version): + match = self._version_re.match(version) + if match is None: + raise RuntimeError, "Invalid debian version" + self.epoch = None + if match.group("epoch") is not None: + self.epoch = int(match.group("epoch")) + self.upstream = match.group("upstream") + self.revision = match.group("revision") + + def __str__(self): + return self.complete + + @property + def complete(self): + if self.epoch is not None: + return "%d:%s" % (self.epoch, self.complete_noepoch) + return self.complete_noepoch + + @property + def complete_noepoch(self): + if self.revision is not None: + return "%s-%s" % (self.upstream, self.revision) + return self.upstream + + @property + def debian(self): + from warnings import warn + warn("debian argument was replaced by revision", DeprecationWarning, stacklevel = 2) + return self.revision + +class VersionLinux(Version): + _version_linux_rules = ur""" +^ +(?P + \d+\.\d+\.\d+ +) +(?: + ~ + (?P + .+? + ) +)? +(?: + \.dfsg\. + (?P + \d+ + ) +)? +- +\d+ +(\.\d+)? +(?: + (?P + ~experimental\.\d+ + ) + | + (?P + [^-]+ + ) +)? +$ +""" + _version_linux_re = re.compile(_version_linux_rules, re.X) + + def __init__(self, version): + super(VersionLinux, self).__init__(version) + match = self._version_linux_re.match(version) + if match is None: + raise RuntimeError, "Invalid debian linux version" + d = match.groupdict() + self.linux_modifier = d['modifier'] + self.linux_version = d['version'] + if d['modifier'] is not None: + self.linux_upstream = '-'.join((d['version'], d['modifier'])) + else: + self.linux_upstream = d['version'] + self.linux_dfsg = d['dfsg'] + self.linux_revision_experimental = match.group('revision_experimental') and True + self.linux_revision_other = match.group('revision_other') and True + +class PackageFieldList(list): + def __init__(self, value = None): + self.extend(value) + + def __str__(self): + return ' '.join(self) + + def _extend(self, value): + if value is not None: + self.extend([j.strip() for j in re.split('\s', value.strip())]) + + def extend(self, value): + if isinstance(value, str): + self._extend(value) + else: + super(PackageFieldList, self).extend(value) + +class PackageDescription(object): + __slots__ = "short", "long" + + def __init__(self, value = None): + self.short = [] + self.long = [] + if value is not None: + short, long = value.split("\n", 1) + self.append(long) + self.append_short(short) + + def __str__(self): + wrap = utils.TextWrapper(width = 74, fix_sentence_endings = True).wrap + short = ', '.join(self.short) + long_pars = [] + for i in self.long: + long_pars.append(wrap(i)) + long = '\n .\n '.join(['\n '.join(i) for i in long_pars]) + return short + '\n ' + long + + def append(self, str): + str = str.strip() + if str: + self.long.extend(str.split("\n.\n")) + + def append_short(self, str): + for i in [i.strip() for i in str.split(",")]: + if i: + self.short.append(i) + + def extend(self, desc): + if isinstance(desc, PackageDescription): + self.short.extend(desc.short) + self.long.extend(desc.long) + else: + raise TypeError + +class PackageRelation(list): + def __init__(self, value=None, override_arches=None): + if value: + self.extend(value, override_arches) + + def __str__(self): + return ', '.join([str(i) for i in self]) + + def _search_value(self, value): + for i in self: + if i._search_value(value): + return i + return None + + def append(self, value, override_arches=None): + if isinstance(value, basestring): + value = PackageRelationGroup(value, override_arches) + elif not isinstance(value, PackageRelationGroup): + raise ValueError, "got %s" % type(value) + j = self._search_value(value) + if j: + j._update_arches(value) + else: + super(PackageRelation, self).append(value) + + def extend(self, value, override_arches=None): + if isinstance(value, basestring): + value = [j.strip() for j in re.split(',', value.strip())] + elif not isinstance(value, (list, tuple)): + raise ValueError, "got %s" % type(value) + for i in value: + self.append(i, override_arches) + +class PackageRelationGroup(list): + def __init__(self, value=None, override_arches=None): + if value: + self.extend(value, override_arches) + + def __str__(self): + return ' | '.join([str(i) for i in self]) + + def _search_value(self, value): + for i, j in itertools.izip(self, value): + if i.name != j.name or i.version != j.version: + return None + return self + + def _update_arches(self, value): + for i, j in itertools.izip(self, value): + if i.arches: + for arch in j.arches: + if arch not in i.arches: + i.arches.append(arch) + + def append(self, value, override_arches=None): + if isinstance(value, basestring): + value = PackageRelationEntry(value, override_arches) + elif not isinstance(value, PackageRelationEntry): + raise ValueError + super(PackageRelationGroup, self).append(value) + + def extend(self, value, override_arches=None): + if isinstance(value, basestring): + value = [j.strip() for j in re.split('\|', value.strip())] + elif not isinstance(value, (list, tuple)): + raise ValueError + for i in value: + self.append(i, override_arches) + +class PackageRelationEntry(object): + __slots__ = "name", "operator", "version", "arches" + + _re = re.compile(r'^(\S+)(?: \((<<|<=|=|!=|>=|>>)\s*([^)]+)\))?(?: \[([^]]+)\])?$') + + class _operator(object): + OP_LT = 1; OP_LE = 2; OP_EQ = 3; OP_NE = 4; OP_GE = 5; OP_GT = 6 + operators = { '<<': OP_LT, '<=': OP_LE, '=': OP_EQ, '!=': OP_NE, '>=': OP_GE, '>>': OP_GT } + operators_neg = { OP_LT: OP_GE, OP_LE: OP_GT, OP_EQ: OP_NE, OP_NE: OP_EQ, OP_GE: OP_LT, OP_GT: OP_LE } + operators_text = dict([(b, a) for a, b in operators.iteritems()]) + + __slots__ = '_op', + + def __init__(self, value): + self._op = self.operators[value] + + def __neg__(self): + return self.__class__(self.operators_text[self.operators_neg[self._op]]) + + def __str__(self): + return self.operators_text[self._op] + + def __init__(self, value=None, override_arches=None): + if not isinstance(value, basestring): + raise ValueError + + self.parse(value) + + if override_arches: + self.arches = list(override_arches) + + def __str__(self): + ret = [self.name] + if self.operator is not None and self.version is not None: + ret.extend([' (', str(self.operator), ' ', self.version, ')']) + if self.arches: + ret.extend([' [', ' '.join(self.arches), ']']) + return ''.join(ret) + + def parse(self, value): + match = self._re.match(value) + if match is None: + raise RuntimeError, "Can't parse dependency %s" % value + match = match.groups() + self.name = match[0] + if match[1] is not None: + self.operator = self._operator(match[1]) + else: + self.operator = None + self.version = match[2] + if match[3] is not None: + self.arches = re.split('\s+', match[3]) + else: + self.arches = [] + +class Package(dict): + _fields = utils.SortedDict(( + ('Package', str), + ('Source', str), + ('Architecture', PackageFieldList), + ('Section', str), + ('Priority', str), + ('Maintainer', str), + ('Uploaders', str), + ('Standards-Version', str), + ('Build-Depends', PackageRelation), + ('Build-Depends-Indep', PackageRelation), + ('Provides', PackageRelation), + ('Pre-Depends', PackageRelation), + ('Depends', PackageRelation), + ('Recommends', PackageRelation), + ('Suggests', PackageRelation), + ('Replaces', PackageRelation), + ('Breaks', PackageRelation), + ('Conflicts', PackageRelation), + ('Description', PackageDescription), + )) + + def __setitem__(self, key, value): + try: + cls = self._fields[key] + if not isinstance(value, cls): + value = cls(value) + except KeyError: pass + super(Package, self).__setitem__(key, value) + + def iterkeys(self): + keys = set(self.keys()) + for i in self._fields.iterkeys(): + if self.has_key(i): + keys.remove(i) + yield i + for i in keys: + yield i + + def iteritems(self): + for i in self.iterkeys(): + yield (i, self[i]) + + def itervalues(self): + for i in self.iterkeys(): + yield self[i] + --- linux-2.6-3.0.0~rc6.orig/debian/lib/python/debian_linux/config.py +++ linux-2.6-3.0.0~rc6/debian/lib/python/debian_linux/config.py @@ -0,0 +1,279 @@ +import os, os.path, re, sys, textwrap + +__all__ = [ + 'ConfigCoreDump', + 'ConfigCoreHierarchy', + 'ConfigParser', +] + +class SchemaItemBoolean(object): + def __call__(self, i): + i = i.strip().lower() + if i in ("true", "1"): + return True + if i in ("false", "0"): + return False + raise Error + +class SchemaItemList(object): + def __init__(self, type = "\s+"): + self.type = type + + def __call__(self, i): + i = i.strip() + if not i: + return [] + return [j.strip() for j in re.split(self.type, i)] + +class ConfigCore(dict): + def get_merge(self, section, arch, featureset, flavour, key, default=None): + temp = [] + + if arch and featureset and flavour: + temp.append(self.get((section, arch, featureset, flavour), {}).get(key)) + temp.append(self.get((section, arch, None, flavour), {}).get(key)) + if arch and featureset: + temp.append(self.get((section, arch, featureset), {}).get(key)) + if arch: + temp.append(self.get((section, arch), {}).get(key)) + if featureset: + temp.append(self.get((section, None, featureset), {}).get(key)) + temp.append(self.get((section,), {}).get(key)) + + ret = [] + + for i in temp: + if i is None: + continue + elif isinstance(i, (list, tuple)): + ret.extend(i) + elif ret: + # TODO + return ret + else: + return i + + return ret or default + + def merge(self, section, arch = None, featureset = None, flavour = None): + ret = {} + ret.update(self.get((section,), {})) + if featureset: + ret.update(self.get((section, None, featureset), {})) + if arch: + ret.update(self.get((section, arch), {})) + if arch and featureset: + ret.update(self.get((section, arch, featureset), {})) + if arch and featureset and flavour: + ret.update(self.get((section, arch, None, flavour), {})) + ret.update(self.get((section, arch, featureset, flavour), {})) + return ret + + def dump(self, fp): + sections = self.keys() + sections.sort() + for section in sections: + fp.write('[%r]\n' % (section,)) + items = self[section] + items_keys = items.keys() + items_keys.sort() + for item in items: + fp.write('%s: %r\n' % (item, items[item])) + fp.write('\n') + +class ConfigCoreDump(ConfigCore): + def __init__(self, config = None, fp = None): + super(ConfigCoreDump, self).__init__(self) + if config is not None: + self.update(config) + if fp is not None: + from ConfigParser import RawConfigParser + config = RawConfigParser() + config.readfp(fp) + for section in config.sections(): + section_real = eval(section) + data = {} + for key, value in config.items(section): + value_real = eval(value) + data[key] = value_real + self[section_real] = data + +class ConfigCoreHierarchy(ConfigCore): + config_name = "defines" + + schemas = { + 'abi': { + 'ignore-changes': SchemaItemList(), + }, + 'base': { + 'arches': SchemaItemList(), + 'enabled': SchemaItemBoolean(), + 'featuresets': SchemaItemList(), + 'flavours': SchemaItemList(), + 'modules': SchemaItemBoolean(), + }, + 'build': {}, + 'description': { + 'parts': SchemaItemList(), + }, + 'image': { + 'bootloaders': SchemaItemList(), + 'configs': SchemaItemList(), + 'initramfs': SchemaItemBoolean(), + 'initramfs-generators': SchemaItemList(), + }, + 'image-dbg': { + 'enabled': SchemaItemBoolean(), + }, + 'relations': { + }, + 'xen': { + 'dom0-support': SchemaItemBoolean(), + 'flavours': SchemaItemList(), + 'versions': SchemaItemList(), + } + } + + def __init__(self, dirs = []): + super(ConfigCoreHierarchy, self).__init__() + self._dirs = dirs + self._read_base() + + def _read_arch(self, arch): + config = ConfigParser(self.schemas) + config.read(self.get_files("%s/%s" % (arch, self.config_name))) + + featuresets = config['base',].get('featuresets', []) + flavours = config['base',].get('flavours', []) + + for section in iter(config): + if section[0] in featuresets: + real = (section[-1], arch, section[0]) + elif len(section) > 1: + real = (section[-1], arch, None) + section[:-1] + else: + real = (section[-1], arch) + section[:-1] + s = self.get(real, {}) + s.update(config[section]) + self[tuple(real)] = s + + for featureset in featuresets: + self._read_arch_featureset(arch, featureset) + + if flavours: + base = self['base', arch] + featuresets.insert(0, 'none') + base['featuresets'] = featuresets + del base['flavours'] + self['base', arch] = base + self['base', arch, 'none'] = {'flavours': flavours, 'implicit-flavour': True} + + def _read_arch_featureset(self, arch, featureset): + config = ConfigParser(self.schemas) + config.read(self.get_files("%s/%s/%s" % (arch, featureset, self.config_name))) + + flavours = config['base',].get('flavours', []) + + for section in iter(config): + real = (section[-1], arch, featureset) + section[:-1] + s = self.get(real, {}) + s.update(config[section]) + self[tuple(real)] = s + + def _read_base(self): + config = ConfigParser(self.schemas) + config.read(self.get_files(self.config_name)) + + arches = config['base',]['arches'] + featuresets = config['base',].get('featuresets', []) + + for section in iter(config): + if section[0].startswith('featureset-'): + real = (section[-1], None, section[0].lstrip('featureset-')) + else: + real = (section[-1],) + section[1:] + self[real] = config[section] + + for arch in arches: + self._read_arch(arch) + for featureset in featuresets: + self._read_featureset(featureset) + + def _read_featureset(self, featureset): + config = ConfigParser(self.schemas) + config.read(self.get_files("featureset-%s/%s" % (featureset, self.config_name))) + + for section in iter(config): + real = (section[-1], None, featureset) + s = self.get(real, {}) + s.update(config[section]) + self[real] = s + + def get_files(self, name): + return [os.path.join(i, name) for i in self._dirs if i] + +class ConfigParser(object): + __slots__ = '_config', 'schemas' + + def __init__(self, schemas): + self.schemas = schemas + + from ConfigParser import RawConfigParser + self._config = config = RawConfigParser() + + def __getitem__(self, key): + return self._convert()[key] + + def __iter__(self): + return iter(self._convert()) + + def __str__(self): + return '<%s(%s)>' % (self.__class__.__name__, self._convert()) + + def _convert(self): + ret = {} + for section in self._config.sections(): + data = {} + for key, value in self._config.items(section): + data[key] = value + s1 = section.split('_') + if s1[-1] in self.schemas: + ret[tuple(s1)] = self.SectionSchema(data, self.schemas[s1[-1]]) + else: + ret[(section,)] = self.Section(data) + return ret + + def keys(self): + return self._convert().keys() + + def read(self, data): + return self._config.read(data) + + class Section(dict): + def __init__(self, data): + super(ConfigParser.Section, self).__init__(data) + + class SectionSchema(Section): + __slots__ = () + + def __init__(self, data, schema): + for key in data.keys(): + try: + data[key] = schema[key](data[key]) + except KeyError: pass + super(ConfigParser.SectionSchema, self).__init__(data) + +if __name__ == '__main__': + import sys + config = ConfigCoreHierarchy(['debian/config']) + sections = config.keys() + sections.sort() + for section in sections: + print "[%s]" % (section,) + items = config[section] + items_keys = items.keys() + items_keys.sort() + for item in items: + print "%s: %s" % (item, items[item]) + print + --- linux-2.6-3.0.0~rc6.orig/debian/lib/python/debian_linux/kconfig.py +++ linux-2.6-3.0.0~rc6/debian/lib/python/debian_linux/kconfig.py @@ -0,0 +1,77 @@ +from __future__ import absolute_import + +from .utils import SortedDict + +__all__ = ( + "KconfigFile", +) + +class EntryString(object): + __slots__ = "name", "value" + + def __init__(self, name, value): + self.name = name + self.value = value + + def __str__(self): + return "CONFIG_%s=%s" % (self.name, self.value) + +class EntryTristate(object): + __slots__ = "name", "value" + + VALUE_NO = 0 + VALUE_YES = 1 + VALUE_MOD = 2 + + def __init__(self, name, value = None): + self.name = name + if value == 'n' or value is None: + self.value = self.VALUE_NO + elif value == 'y': + self.value = self.VALUE_YES + elif value == 'm': + self.value = self.VALUE_MOD + + def __str__(self): + conf = "CONFIG_%s" % self.name + if self.value == self.VALUE_NO: + return "# %s is not set" % conf + elif self.value == self.VALUE_YES: + return "%s=y" % conf + elif self.value == self.VALUE_MOD: + return "%s=m" % conf + +class KconfigFile(SortedDict): + def __str__(self): + ret = [] + for i in self.str_iter(): + ret.append(i) + return '\n'.join(ret) + '\n' + + def read(self, f): + for line in iter(f.readlines()): + line = line.strip() + if line.startswith("CONFIG_"): + i = line.find('=') + option = line[7:i] + value = line[i+1:] + self.set(option, value) + elif line.startswith("# CONFIG_"): + option = line[9:-11] + self.set(option, 'n') + elif line.startswith("#") or not line: + pass + else: + raise RuntimeError, "Can't recognize %s" % line + + def set(self, key, value): + if value in ('y', 'm', 'n'): + entry = EntryTristate(key, value) + else: + entry = EntryString(key, value) + self[key] = entry + + def str_iter(self): + for key, value in self.iteritems(): + yield str(value) + --- linux-2.6-3.0.0~rc6.orig/debian/lib/python/debian_linux/gencontrol.py +++ linux-2.6-3.0.0~rc6/debian/lib/python/debian_linux/gencontrol.py @@ -0,0 +1,301 @@ +from debian import * +from utils import SortedDict + +class PackagesList(SortedDict): + def append(self, package): + self[package['Package']] = package + + def extend(self, packages): + for package in packages: + self[package['Package']] = package + +class Makefile(object): + def __init__(self): + self.rules = {} + self.add('.NOTPARALLEL') + + def add(self, name, deps = None, cmds = None): + if name in self.rules: + self.rules[name].add(deps, cmds) + else: + self.rules[name] = self.Rule(name, deps, cmds) + if deps is not None: + for i in deps: + if i not in self.rules: + self.rules[i] = self.Rule(i) + + def write(self, out): + r = self.rules.keys() + r.sort() + for i in r: + self.rules[i].write(out) + + class Rule(object): + def __init__(self, name, deps = None, cmds = None): + self.name = name + self.deps, self.cmds = set(), [] + self.add(deps, cmds) + + def add(self, deps = None, cmds = None): + if deps is not None: + self.deps.update(deps) + if cmds is not None: + self.cmds.append(cmds) + + def write(self, out): + deps_string = '' + if self.deps: + deps = list(self.deps) + deps.sort() + deps_string = ' ' + ' '.join(deps) + + if self.cmds: + if deps_string: + out.write('%s::%s\n' % (self.name, deps_string)) + for c in self.cmds: + out.write('%s::\n' % self.name) + for i in c: + out.write('\t%s\n' % i) + else: + out.write('%s:%s\n' % (self.name, deps_string)) + +class MakeFlags(dict): + def __repr__(self): + repr = super(flags, self).__repr__() + return "%s(%s)" % (self.__class__.__name__, repr) + + def __str__(self): + return ' '.join(["%s='%s'" % i for i in sorted(self.iteritems())]) + + def copy(self): + return self.__class__(super(MakeFlags, self).copy()) + +class Gencontrol(object): + makefile_targets = ('binary-arch', 'build', 'setup', 'source') + + def __init__(self, config, templates, version = Version): + self.config, self.templates = config, templates + self.changelog = Changelog(version = version) + + def __call__(self): + packages = PackagesList() + makefile = Makefile() + + self.do_source(packages) + self.do_main(packages, makefile) + self.do_extra(packages, makefile) + + self.write(packages, makefile) + + def do_source(self, packages): + source = self.templates["control.source"][0] + source['Source'] = self.changelog[0].source + packages['source'] = self.process_package(source) + + def do_main(self, packages, makefile): + config_entry = self.config['base',] + vars = self.vars.copy() + + makeflags = MakeFlags() + extra = {} + + self.do_main_setup(vars, makeflags, extra) + self.do_main_makefile(makefile, makeflags, extra) + self.do_main_packages(packages, vars, makeflags, extra) + self.do_main_recurse(packages, makefile, vars, makeflags, extra) + + def do_main_setup(self, vars, makeflags, extra): + pass + + def do_main_makefile(self, makefile, makeflags, extra): + makefile.add('binary-indep', cmds = ["$(MAKE) -f debian/rules.real binary-indep %s" % makeflags]) + + def do_main_packages(self, packages, vars, makeflags, extra): + pass + + def do_main_recurse(self, packages, makefile, vars, makeflags, extra): + for arch in iter(self.config['base',]['arches']): + self.do_arch(packages, makefile, arch, vars.copy(), makeflags.copy(), extra) + + def do_extra(self, packages, makefile): + templates_extra = self.templates.get("control.extra", None) + if templates_extra is None: + return + + packages.extend(self.process_packages(templates_extra, {})) + extra_arches = {} + for package in templates_extra: + arches = package['Architecture'] + for arch in arches: + i = extra_arches.get(arch, []) + i.append(package) + extra_arches[arch] = i + archs = extra_arches.keys() + archs.sort() + for arch in archs: + cmds = [] + for i in extra_arches[arch]: + tmp = [] + if i.has_key('X-Version-Overwrite-Epoch'): + tmp.append("-v1:%s" % self.version['source']) + cmds.append("$(MAKE) -f debian/rules.real install-dummy DH_OPTIONS='-p%s' GENCONTROL_ARGS='%s'" % (i['Package'], ' '.join(tmp))) + makefile.add('binary-arch_%s' % arch ['binary-arch_%s_extra' % arch]) + makefile.add("binary-arch_%s_extra" % arch, cmds = cmds) + + def do_arch(self, packages, makefile, arch, vars, makeflags, extra): + vars['arch'] = arch + + self.do_arch_setup(vars, makeflags, arch, extra) + self.do_arch_makefile(makefile, arch, makeflags, extra) + self.do_arch_packages(packages, makefile, arch, vars, makeflags, extra) + self.do_arch_recurse(packages, makefile, arch, vars, makeflags, extra) + + def do_arch_setup(self, vars, makeflags, arch, extra): + pass + + def do_arch_makefile(self, makefile, arch, makeflags, extra): + makeflags['ARCH'] = arch + + for i in self.makefile_targets: + target1 = i + target2 = '_'.join((target1, arch)) + target3 = '_'.join((target2, 'real')) + makefile.add(target1, [target2]) + makefile.add(target2, [target3]) + + def do_arch_packages(self, packages, makefile, arch, vars, makeflags, extra): + pass + + def do_arch_recurse(self, packages, makefile, arch, vars, makeflags, extra): + for featureset in self.config['base', arch].get('featuresets', ()): + self.do_featureset(packages, makefile, arch, featureset, vars.copy(), makeflags.copy(), extra) + + def do_featureset(self, packages, makefile, arch, featureset, vars, makeflags, extra): + config_base = self.config.merge('base', arch, featureset) + if not config_base.get('enabled', True): + return + + vars['localversion'] = '' + if featureset != 'none': + vars['localversion'] = '-' + featureset + + self.do_featureset_setup(vars, makeflags, arch, featureset, extra) + self.do_featureset_makefile(makefile, arch, featureset, makeflags, extra) + self.do_featureset_packages(packages, makefile, arch, featureset, vars, makeflags, extra) + self.do_featureset_recurse(packages, makefile, arch, featureset, vars, makeflags, extra) + + def do_featureset_setup(self, vars, makeflags, arch, featureset, extra): + pass + + def do_featureset_makefile(self, makefile, arch, featureset, makeflags, extra): + makeflags['FEATURESET'] = featureset + + for i in self.makefile_targets: + target1 = '_'.join((i, arch)) + target2 = '_'.join((target1, featureset)) + target3 = '_'.join((target2, 'real')) + makefile.add(target1, [target2]) + makefile.add(target2, [target3]) + + def do_featureset_packages(self, packages, makefile, arch, featureset, vars, makeflags, extra): + pass + + def do_featureset_recurse(self, packages, makefile, arch, featureset, vars, makeflags, extra): + for flavour in self.config['base', arch, featureset]['flavours']: + self.do_flavour(packages, makefile, arch, featureset, flavour, vars.copy(), makeflags.copy(), extra) + + def do_flavour(self, packages, makefile, arch, featureset, flavour, vars, makeflags, extra): + config_base = self.config.merge('base', arch, featureset, flavour) + + vars['localversion'] += '-' + flavour + + self.do_flavour_setup(vars, makeflags, arch, featureset, flavour, extra) + self.do_flavour_makefile(makefile, arch, featureset, flavour, makeflags, extra) + self.do_flavour_packages(packages, makefile, arch, featureset, flavour, vars, makeflags, extra) + + def do_flavour_setup(self, vars, makeflags, arch, featureset, flavour, extra): + for i in ( + ('kernel-arch', 'KERNEL_ARCH'), + ('localversion', 'LOCALVERSION'), + ): + if vars.has_key(i[0]): + makeflags[i[1]] = vars[i[0]] + + def do_flavour_makefile(self, makefile, arch, featureset, flavour, makeflags, extra): + makeflags['FLAVOUR'] = flavour + + for i in self.makefile_targets: + target1 = '_'.join((i, arch, featureset)) + target2 = '_'.join((target1, flavour)) + target3 = '_'.join((target2, 'real')) + makefile.add(target1, [target2]) + makefile.add(target2, [target3]) + + def do_flavour_packages(self, packages, makefile, arch, featureset, flavour, vars, makeflags, extra): + pass + + def process_relation(self, dep, vars): + import copy + dep = copy.deepcopy(dep) + for groups in dep: + for item in groups: + item.name = self.substitute(item.name, vars) + if item.version: + item.version = self.substitute(item.version, vars) + return dep + + def process_description(self, in_desc, vars): + desc = in_desc.__class__() + desc.short = self.substitute(in_desc.short, vars) + for i in in_desc.long: + desc.append(self.substitute(i, vars)) + return desc + + def process_package(self, in_entry, vars={}): + entry = in_entry.__class__() + for key, value in in_entry.iteritems(): + if isinstance(value, PackageRelation): + value = self.process_relation(value, vars) + elif isinstance(value, PackageDescription): + value = self.process_description(value, vars) + elif key.startswith('X-'): + continue + else: + value = self.substitute(value, vars) + entry[key] = value + return entry + + def process_packages(self, entries, vars): + return [self.process_package(i, vars) for i in entries] + + def substitute(self, s, vars): + if isinstance(s, (list, tuple)): + return [self.substitute(i, vars) for i in s] + def subst(match): + return vars[match.group(1)] + return re.sub(r'@([-_a-z]+)@', subst, s) + + def write(self, packages, makefile): + self.write_control(packages.itervalues()) + self.write_makefile(makefile) + + def write_config(self): + f = file("debian/config.dump", 'w') + self.config.write(f) + f.close() + + def write_control(self, list): + self.write_rfc822(file("debian/control", 'w'), list) + + def write_makefile(self, makefile): + f = file("debian/rules.gen", 'w') + makefile.write(f) + f.close() + + def write_rfc822(self, f, list): + for entry in list: + for key, value in entry.iteritems(): + f.write("%s: %s\n" % (key, value)) + f.write('\n') + + --- linux-2.6-3.0.0~rc6.orig/debian/lib/python/debian_linux/utils.py +++ linux-2.6-3.0.0~rc6/debian/lib/python/debian_linux/utils.py @@ -0,0 +1,111 @@ +from __future__ import absolute_import + +import re, os, textwrap + +_marker = object + +class SortedDict(dict): + __slots__ = '_list', + + def __init__(self, entries = None): + super(SortedDict, self).__init__() + self._list = [] + if entries is not None: + for key, value in entries: + self[key] = value + + def __delitem__(self, key): + super(SortedDict, self).__delitem__(key) + self._list.remove(key) + + def __setitem__(self, key, value): + super(SortedDict, self).__setitem__(key, value) + if key not in self._list: + self._list.append(key) + + def iterkeys(self): + for i in iter(self._list): + yield i + + def iteritems(self): + for i in iter(self._list): + yield (i, self[i]) + + def itervalues(self): + for i in iter(self._list): + yield self[i] + +class Templates(object): + def __init__(self, dirs = ["debian/templates"]): + self.dirs = dirs + + self._cache = {} + + def __getitem__(self, key): + ret = self.get(key) + if ret is not None: + return ret + raise KeyError(key) + + def _read(self, name): + prefix, id = name.split('.', 1) + + for dir in self.dirs: + filename = "%s/%s.in" % (dir, name) + if os.path.exists(filename): + f = file(filename) + if prefix == 'control': + return self._read_control(f) + return f.read() + + def _read_control(self, f): + from .debian import Package + + entries = [] + + while True: + e = Package() + last = None + lines = [] + while True: + line = f.readline() + if not line: + break + line = line.strip('\n') + if not line: + break + if line[0] in ' \t': + if not last: + raise ValueError('Continuation line seen before first header') + lines.append(line.lstrip()) + continue + if last: + e[last] = '\n'.join(lines) + i = line.find(':') + if i < 0: + raise ValueError("Not a header, not a continuation: ``%s''" % line) + last = line[:i] + lines = [line[i+1:].lstrip()] + if last: + e[last] = '\n'.join(lines) + if not e: + break + + entries.append(e) + + return entries + + def get(self, key, default=None): + if key in self._cache: + return self._cache[key] + + value = self._cache.setdefault(key, self._read(key)) + if value is None: + return default + return value + +class TextWrapper(textwrap.TextWrapper): + wordsep_re = re.compile( + r'(\s+|' # any whitespace + r'(?<=[\w\!\"\'\&\.\,\?])-{2,}(?=\w))') # em-dash + --- linux-2.6-3.0.0~rc6.orig/debian/lib/python/debian_linux/__init__.py +++ linux-2.6-3.0.0~rc6/debian/lib/python/debian_linux/__init__.py @@ -0,0 +1 @@ +# Module --- linux-2.6-3.0.0~rc6.orig/debian/lib/python/debian_linux/patches.py +++ linux-2.6-3.0.0~rc6/debian/lib/python/debian_linux/patches.py @@ -0,0 +1,208 @@ +import glob, os, shutil + +class Operation(object): + def __init__(self, name, data): + self.name, self.data = name, data + + def __call__(self, dir = '.', reverse = False): + try: + if not reverse: + self.do(dir) + else: + self.do_reverse(dir) + self._log(True) + except: + self._log(False) + raise + + def _log(self, result): + if result: + s = "OK" + else: + s = "FAIL" + print """ (%s) %-4s %s""" % (self.operation, s, self.name) + + def do(self, dir): + raise NotImplementedError + + def do_reverse(self, dir): + raise NotImplementedError + +class OperationPatch(Operation): + def __init__(self, name, fopen, data): + super(OperationPatch, self).__init__(name, data) + self.fopen = fopen + + def _call(self, dir, extraargs): + cmdline = "cd %s; patch -p1 -f -s -t --no-backup-if-mismatch %s" % (dir, extraargs) + f = os.popen(cmdline, 'wb') + shutil.copyfileobj(self.fopen(), f) + if f.close(): + raise RuntimeError("Patch failed") + + def patch_push(self, dir): + self._call(dir, '--fuzz=1') + + def patch_pop(self, dir): + self._call(dir, '-R') + +class OperationPatchPush(OperationPatch): + operation = '+' + + do = OperationPatch.patch_push + do_reverse = OperationPatch.patch_pop + +class OperationPatchPop(OperationPatch): + operation = '-' + + do = OperationPatch.patch_pop + do_reverse = OperationPatch.patch_push + +class SubOperation(Operation): + def _log(self, result): + if result: + s = "OK" + else: + s = "FAIL" + print """ %-10s %-4s %s""" % ('(%s)' % self.operation, s, self.name) + +class SubOperationFilesRemove(SubOperation): + operation = "remove" + + def do(self, dir): + name = os.path.join(dir, self.name) + for n in glob.iglob(name): + if os.path.isdir(n): + shutil.rmtree(n) + else: + os.unlink(n) + +class SubOperationFilesUnifdef(SubOperation): + operation = "unifdef" + + def do(self, dir): + filename = os.path.join(dir, self.name) + cmdline = "unifdef %s %s" % (filename, ' '.join(self.data)) + f = os.popen(cmdline, 'rb') + data = f.read() + ret = f.close() + if ret is None: + raise RuntimeError("unifdef of %s removed nothing" % self.name) + elif ret != 256: + raise RuntimeError("unifdef failed") + f1 = file(filename, 'wb') + f1.write(data) + f1.close() + +class OperationFiles(Operation): + operation = 'X' + + suboperations = { + 'remove': SubOperationFilesRemove, + 'rm': SubOperationFilesRemove, + 'unifdef': SubOperationFilesUnifdef, + } + + def __init__(self, name, fopen, data): + super(OperationFiles, self).__init__(name, data) + + ops = [] + + for line in fopen(): + line = line.strip() + if not line or line[0] == '#': + continue + + items = line.split() + operation, filename = items[:2] + data = items[2:] + + if operation not in self.suboperations: + raise RuntimeError('Undefined operation "%s" in series %s' % (operation, name)) + + ops.append(self.suboperations[operation](filename, data)) + + self.ops = ops + + def do(self, dir): + for i in self.ops: + i(dir = dir) + +class PatchSeries(list): + operations = { + '+': OperationPatchPush, + '-': OperationPatchPop, + 'X': OperationFiles, + } + + def __init__(self, name, root, fp): + self.name, self.root = name, root + + from gzip import GzipFile + from bz2 import BZ2File + + for line in fp: + line = line.strip() + + if not len(line) or line[0] == '#': + continue + + items = line.split(' ') + operation, filename = items[:2] + data = items[2:] + + if operation in self.operations: + f = os.path.join(self.root, filename) + for suffix, cls in (('', file), ('.bz2', BZ2File), ('.gz', GzipFile)): + f1 = f + suffix + if os.path.exists(f1): + # Must copy current bindings into the lambda-function + fopen = lambda cls=cls, f1=f1: cls(f1) + break + else: + raise RuntimeError("Can't find patch %s for series %s" % (filename, self.name)) + else: + raise RuntimeError('Undefined operation "%s" in series %s' % (operation, name)) + + self.append(self.operations[operation](filename, fopen, data)) + + def __call__(self, cond = bool, dir = '.', reverse = False): + if not reverse: + l = self + else: + l = self[::-1] + for i in l: + if cond(i): + i(dir = dir, reverse = reverse) + + def __repr__(self): + return '<%s object for %s>' % (self.__class__.__name__, self.name) + +class PatchSeriesList(list): + def __call__(self, cond = bool, reverse = False): + if not reverse: + l = self + else: + l = self[::-1] + for i in l: + if reverse: + print "--> Try to unapply %s." % i.name + else: + print "--> Try to apply %s." % i.name + i(cond = cond, reverse = reverse) + if reverse: + print "--> %s fully unapplied." % i.name + else: + print "--> %s fully applied." % i.name + + @classmethod + def read(cls, home, files): + ret = cls() + for i in files: + try: + fp = file(os.path.join(home, 'series', i)) + ret.append(PatchSeries(i, home, fp)) + except IOError: + pass + return ret + --- linux-2.6-3.0.0~rc6.orig/debian/patches/features/all/cgroups-Allow-memory-cgroup-support-to-be-included-b.patch +++ linux-2.6-3.0.0~rc6/debian/patches/features/all/cgroups-Allow-memory-cgroup-support-to-be-included-b.patch @@ -0,0 +1,115 @@ +From: Ben Hutchings +Date: Sun, 30 May 2010 22:43:38 +0100 +Subject: [PATCH 1/2] cgroups: Allow memory cgroup support to be included but + disabled + +Memory cgroup support has some run-time overhead, so it's useful to +include it in a distribution kernel without enabling it by default. +Add a kernel config option to disable it by default and a kernel +parameter 'cgroup_enable' as the opposite to 'cgroup_disable'. + +Signed-off-by: Ben Hutchings +--- + Documentation/kernel-parameters.txt | 4 ++-- + init/Kconfig | 8 ++++++++ + kernel/cgroup.c | 20 ++++++++++++++++---- + mm/memcontrol.c | 3 +++ + 4 files changed, 29 insertions(+), 6 deletions(-) + +diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt +index cc85a92..38e0b44 100644 +--- a/Documentation/kernel-parameters.txt ++++ b/Documentation/kernel-parameters.txt +@@ -425,8 +425,8 @@ bytes respectively. Such letter suffixes can also be entirely omitted. + ccw_timeout_log [S390] + See Documentation/s390/CommonIO for details. + +- cgroup_disable= [KNL] Disable a particular controller +- Format: {name of the controller(s) to disable} ++ cgroup_disable= [KNL] Disable/enable a particular controller ++ cgroup_enable= Format: {name of the controller(s) to disable/enable} + {Currently supported controllers - "memory"} + + checkreqprot [SELINUX] Set initial checkreqprot flag value. +diff --git a/init/Kconfig b/init/Kconfig +index d886b1e..3410369 100644 +--- a/init/Kconfig ++++ b/init/Kconfig +@@ -659,6 +659,14 @@ config CGROUP_MEM_RES_CTLR + This config option also selects MM_OWNER config option, which + could in turn add some fork/exit overhead. + ++config CGROUP_MEM_RES_CTLR_DISABLED ++ bool "Memory Resource Controller disabled by default" ++ depends on CGROUP_MEM_RES_CTLR ++ default n ++ help ++ Disable the memory group resource controller unless explicitly ++ enabled using the kernel parameter "cgroup_enable=memory". ++ + config CGROUP_MEM_RES_CTLR_SWAP + bool "Memory Resource Controller Swap Extension" + depends on CGROUP_MEM_RES_CTLR && SWAP +diff --git a/kernel/cgroup.c b/kernel/cgroup.c +index 25c7eb5..b3c5aa7 100644 +--- a/kernel/cgroup.c ++++ b/kernel/cgroup.c +@@ -4526,7 +4526,7 @@ static void cgroup_release_agent(struct work_struct *work) + mutex_unlock(&cgroup_mutex); + } + +-static int __init cgroup_disable(char *str) ++static int __init cgroup_set_disabled(char *str, int value) + { + int i; + char *token; +@@ -4542,17 +4542,29 @@ static int __init cgroup_disable(char *str) + struct cgroup_subsys *ss = subsys[i]; + + if (!strcmp(token, ss->name)) { +- ss->disabled = 1; +- printk(KERN_INFO "Disabling %s control group" +- " subsystem\n", ss->name); ++ ss->disabled = value; ++ printk(KERN_INFO ++ "%sabling %s control group subsystem\n", ++ value ? "Dis" : "En", ss->name); + break; + } + } + } + return 1; + } ++ ++static int __init cgroup_disable(char *str) ++{ ++ return cgroup_set_disabled(str, 1); ++} + __setup("cgroup_disable=", cgroup_disable); + ++static int __init cgroup_enable(char *str) ++{ ++ return cgroup_set_disabled(str, 0); ++} ++__setup("cgroup_enable=", cgroup_enable); ++ + /* + * Functons for CSS ID. + */ +diff --git a/mm/memcontrol.c b/mm/memcontrol.c +index 010f916..f660a07 100644 +--- a/mm/memcontrol.c ++++ b/mm/memcontrol.c +@@ -5153,6 +5153,9 @@ static void mem_cgroup_move_task(struct cgroup_subsys *ss, + + struct cgroup_subsys mem_cgroup_subsys = { + .name = "memory", ++#ifdef CONFIG_CGROUP_MEM_RES_CTLR_DISABLED ++ .disabled = 1, ++#endif + .subsys_id = mem_cgroup_subsys_id, + .create = mem_cgroup_create, + .pre_destroy = mem_cgroup_pre_destroy, +-- +1.7.4.4 + --- linux-2.6-3.0.0~rc6.orig/debian/patches/features/all/drivers-media-dvb-usb-af9005-request_firmware.patch +++ linux-2.6-3.0.0~rc6/debian/patches/features/all/drivers-media-dvb-usb-af9005-request_firmware.patch @@ -0,0 +1,152 @@ +From 0b8d838ecaa0235000347c084d192aa30b76ae70 Mon Sep 17 00:00:00 2001 +From: Ben Hutchings +Date: Mon, 24 Aug 2009 23:19:58 +0100 +Subject: [PATCH] af9005: Use request_firmware() to load register init script + +Read the register init script from the Windows driver. This is sick +but should avoid the potential copyright infringement in distributing +a version of the script which is directly derived from the driver. +--- + drivers/media/dvb/dvb-usb/Kconfig | 2 +- + drivers/media/dvb/dvb-usb/af9005-fe.c | 66 ++++++++++++++++++++++++++------ + 2 files changed, 54 insertions(+), 14 deletions(-) + +diff --git a/drivers/media/dvb/dvb-usb/Kconfig b/drivers/media/dvb/dvb-usb/Kconfig +index 868e1cb..1c3d56d 100644 +--- a/drivers/media/dvb/dvb-usb/Kconfig ++++ b/drivers/media/dvb/dvb-usb/Kconfig +@@ -238,10 +238,10 @@ config DVB_USB_OPERA1 + + config DVB_USB_AF9005 + tristate "Afatech AF9005 DVB-T USB1.1 support" +- depends on BROKEN + depends on DVB_USB && EXPERIMENTAL + select MEDIA_TUNER_MT2060 if !MEDIA_TUNER_CUSTOMISE + select MEDIA_TUNER_QT1010 if !MEDIA_TUNER_CUSTOMISE ++ select FW_LOADER + help + Say Y here to support the Afatech AF9005 based DVB-T USB1.1 receiver + and the TerraTec Cinergy T USB XE (Rev.1) +diff --git a/drivers/media/dvb/dvb-usb/af9005-fe.c b/drivers/media/dvb/dvb-usb/af9005-fe.c +index 199ece0..bcc26c8 100644 +--- a/drivers/media/dvb/dvb-usb/af9005-fe.c ++++ b/drivers/media/dvb/dvb-usb/af9005-fe.c +@@ -22,10 +22,26 @@ + * see Documentation/dvb/README.dvb-usb for more information + */ + #include "af9005.h" +-#include "af9005-script.h" + #include "mt2060.h" + #include "qt1010.h" + #include ++#include ++ ++/* Register initialisation script to be extracted from the Windows driver */ ++ ++typedef struct { ++ __le16 reg; ++ u8 pos; ++ u8 len; ++ u8 val; ++ u8 pad; ++} __packed RegDesc; ++ ++#define WIN_DRV_NAME "AF05BDA.sys" ++#define WIN_DRV_VERSION "6.3.2.1" ++#define WIN_DRV_SIZE 133504 ++#define WIN_DRV_SCRIPT_OFFSET 88316 ++#define WIN_DRV_SCRIPT_SIZE 1110 + + struct af9005_fe_state { + struct dvb_usb_device *d; +@@ -818,6 +834,8 @@ static int af9005_fe_init(struct dvb_frontend *fe) + { + struct af9005_fe_state *state = fe->demodulator_priv; + struct dvb_usb_adapter *adap = fe->dvb->priv; ++ const struct firmware *fw; ++ const RegDesc *script; + int ret, i, scriptlen; + u8 temp, temp0 = 0, temp1 = 0, temp2 = 0; + u8 buf[2]; +@@ -969,37 +987,55 @@ static int af9005_fe_init(struct dvb_frontend *fe) + if ((ret = af9005_write_ofdm_register(state->d, 0xaefb, 0x01))) + return ret; + +- /* load init script */ +- deb_info("load init script\n"); +- scriptlen = sizeof(script) / sizeof(RegDesc); ++ /* load and validate init script */ ++ deb_info("load init script from Windows driver\n"); ++ ret = request_firmware(&fw, WIN_DRV_NAME, &state->d->udev->dev); ++ if (ret) ++ return ret; ++ BUILD_BUG_ON(sizeof(RegDesc) != 6); ++ if (fw->size != WIN_DRV_SIZE || ++ memcmp(fw->data + WIN_DRV_SCRIPT_OFFSET, ++ "\x80\xa1\x00\x08\x0a\x00", 6) || ++ memcmp(fw->data + WIN_DRV_SCRIPT_OFFSET + WIN_DRV_SCRIPT_SIZE - 6, ++ "\x49\xa3\x00\x06\x02\x00", 6)) { ++ err("%s is invalid - should be version %s, size %u bytes\n", ++ WIN_DRV_NAME, WIN_DRV_VERSION, WIN_DRV_SIZE); ++ ret = -EINVAL; ++ goto fail_release; ++ } ++ ++ script = (const RegDesc *)(fw->data + WIN_DRV_SCRIPT_OFFSET); ++ scriptlen = WIN_DRV_SCRIPT_SIZE / sizeof(RegDesc); + for (i = 0; i < scriptlen; i++) { ++ u16 reg = le16_to_cpu(script[i].reg); + if ((ret = +- af9005_write_register_bits(state->d, script[i].reg, ++ af9005_write_register_bits(state->d, reg, + script[i].pos, + script[i].len, script[i].val))) +- return ret; ++ goto fail_release; + /* save 3 bytes of original fcw */ +- if (script[i].reg == 0xae18) ++ if (reg == 0xae18) + temp2 = script[i].val; +- if (script[i].reg == 0xae19) ++ if (reg == 0xae19) + temp1 = script[i].val; +- if (script[i].reg == 0xae1a) ++ if (reg == 0xae1a) + temp0 = script[i].val; + + /* save original unplug threshold */ +- if (script[i].reg == xd_p_reg_unplug_th) ++ if (reg == xd_p_reg_unplug_th) + state->original_if_unplug_th = script[i].val; +- if (script[i].reg == xd_p_reg_unplug_rf_gain_th) ++ if (reg == xd_p_reg_unplug_rf_gain_th) + state->original_rf_unplug_th = script[i].val; +- if (script[i].reg == xd_p_reg_unplug_dtop_if_gain_th) ++ if (reg == xd_p_reg_unplug_dtop_if_gain_th) + state->original_dtop_if_unplug_th = script[i].val; +- if (script[i].reg == xd_p_reg_unplug_dtop_rf_gain_th) ++ if (reg == xd_p_reg_unplug_dtop_rf_gain_th) + state->original_dtop_rf_unplug_th = script[i].val; + + } + state->original_fcw = + ((u32) temp2 << 16) + ((u32) temp1 << 8) + (u32) temp0; + ++ release_firmware(fw); + + /* save original TOPs */ + deb_info("save original TOPs\n"); +@@ -1079,6 +1115,10 @@ static int af9005_fe_init(struct dvb_frontend *fe) + + deb_info("profit!\n"); + return 0; ++ ++fail_release: ++ release_firmware(fw); ++ return ret; + } + + static int af9005_fe_sleep(struct dvb_frontend *fe) +-- +1.6.3.3 + --- linux-2.6-3.0.0~rc6.orig/debian/patches/features/all/rt2x00-Add-device-ID-for-RT539F-device.patch +++ linux-2.6-3.0.0~rc6/debian/patches/features/all/rt2x00-Add-device-ID-for-RT539F-device.patch @@ -0,0 +1,25 @@ +Subject: [PATCH v2] rt2x00: Add device ID for RT539F device. +From: Gertjan van Wingerde +Date: Sat, 04 Jun 2011 15:55:00 -0500 + +Reported-by: Wim Vander Schelden +Signed-off-by: Gertjan van Wingerde +--- + drivers/net/wireless/rt2x00/rt2800pci.c | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +diff --git a/drivers/net/wireless/rt2x00/rt2800pci.c b/drivers/net/wireless/rt2x00/rt2800pci.c +index 5513edf..fd99449 100644 +--- a/drivers/net/wireless/rt2x00/rt2800pci.c ++++ b/drivers/net/wireless/rt2x00/rt2800pci.c +@@ -1160,6 +1160,7 @@ static DEFINE_PCI_DEVICE_TABLE(rt2800pci_device_table) = { + #endif + #ifdef CONFIG_RT2800PCI_RT53XX + { PCI_DEVICE(0x1814, 0x5390) }, ++ { PCI_DEVICE(0x1814, 0x539f) }, + #endif + { 0, } + }; +-- +1.7.5 + --- linux-2.6-3.0.0~rc6.orig/debian/patches/features/all/Kbuild-kconfig-Verbose-version-of-listnewconfig.patch +++ linux-2.6-3.0.0~rc6/debian/patches/features/all/Kbuild-kconfig-Verbose-version-of-listnewconfig.patch @@ -0,0 +1,159 @@ +From 05bf283675db983cab59159db8fb82b9a2858c7f Mon Sep 17 00:00:00 2001 +From: Ben Hutchings +Date: Tue, 14 Sep 2010 04:33:34 +0100 +Subject: [PATCH] Kbuild: kconfig: Verbose version of --listnewconfig + +If the KBUILD_VERBOSE environment variable is set to non-zero, show +the default values of new symbols and not just their names. + +Based on work by Bastian Blank and +maximilian attems . Simplified by Michal Marek +. + +Signed-off-by: Ben Hutchings +--- + scripts/kconfig/conf.c | 45 +++++++++++++++++++++++++++++++++--------- + scripts/kconfig/confdata.c | 5 ++- + scripts/kconfig/expr.h | 2 + + scripts/kconfig/lkc_proto.h | 1 + + 4 files changed, 41 insertions(+), 12 deletions(-) + +diff --git a/scripts/kconfig/conf.c b/scripts/kconfig/conf.c +index 5459a38..f4752b4 100644 +--- a/scripts/kconfig/conf.c ++++ b/scripts/kconfig/conf.c +@@ -363,7 +363,6 @@ static void conf(struct menu *menu) + switch (prop->type) { + case P_MENU: + if ((input_mode == silentoldconfig || +- input_mode == listnewconfig || + input_mode == oldnoconfig) && + rootEntry != menu) { + check_conf(menu); +@@ -423,11 +422,7 @@ static void check_conf(struct menu *menu) + if (sym && !sym_has_value(sym)) { + if (sym_is_changable(sym) || + (sym_is_choice(sym) && sym_get_tristate_value(sym) == yes)) { +- if (input_mode == listnewconfig) { +- if (sym->name && !sym_is_choice_value(sym)) { +- printf("%s%s\n", CONFIG_, sym->name); +- } +- } else if (input_mode != oldnoconfig) { ++ if (input_mode != oldnoconfig) { + if (!conf_cnt++) + printf(_("*\n* Restart config...\n*\n")); + rootEntry = menu_get_parent_menu(menu); +@@ -440,6 +435,33 @@ static void check_conf(struct menu *menu) + check_conf(child); + } + ++static void report_conf(struct menu *menu, bool verbose) ++{ ++ struct symbol *sym; ++ struct menu *child; ++ ++ if (!menu_is_visible(menu)) ++ return; ++ ++ if (verbose && menu == &rootmenu) { ++ printf("\n#\n" ++ "# Changes:\n" ++ "#\n"); ++ } ++ ++ sym = menu->sym; ++ if (sym && (sym->flags & SYMBOL_NEW) && ++ sym_is_changable(sym) && sym->name && !sym_is_choice_value(sym)) { ++ if (verbose) ++ conf_write_symbol(sym, stdout, true); ++ else ++ printf("CONFIG_%s\n", sym->name); ++ } ++ ++ for (child = menu->list; child; child = child->next) ++ report_conf(child, verbose); ++} ++ + static struct option long_opts[] = { + {"oldaskconfig", no_argument, NULL, oldaskconfig}, + {"oldconfig", no_argument, NULL, oldconfig}, +@@ -460,6 +482,7 @@ int main(int ac, char **av) + { + int opt; + const char *name; ++ const char *value; + struct stat tmpstat; + + setlocale(LC_ALL, ""); +@@ -604,16 +627,18 @@ int main(int ac, char **av) + input_mode = silentoldconfig; + /* fall through */ + case oldconfig: +- case listnewconfig: + case oldnoconfig: + case silentoldconfig: + /* Update until a loop caused no more changes */ + do { + conf_cnt = 0; + check_conf(&rootmenu); +- } while (conf_cnt && +- (input_mode != listnewconfig && +- input_mode != oldnoconfig)); ++ } while (conf_cnt && input_mode != oldnoconfig); ++ break; ++ case listnewconfig: ++ conf_set_all_new_symbols(def_default); ++ value = getenv("KBUILD_VERBOSE"); ++ report_conf(&rootmenu, value && atoi(value)); + break; + } + +diff --git a/scripts/kconfig/confdata.c b/scripts/kconfig/confdata.c +index c06f150..fbbacac 100644 +--- a/scripts/kconfig/confdata.c ++++ b/scripts/kconfig/confdata.c +@@ -440,7 +440,7 @@ static void conf_write_string(bool headerfile, const char *name, + fputs("\"\n", out); + } + +-static void conf_write_symbol(struct symbol *sym, FILE *out, bool write_no) ++void conf_write_symbol(struct symbol *sym, FILE *out, bool write_no) + { + const char *str; + +@@ -1009,6 +1009,7 @@ void conf_set_all_new_symbols(enum conf_def_mode mode) + for_all_symbols(i, sym) { + if (sym_has_value(sym)) + continue; ++ sym->flags |= SYMBOL_NEW; + switch (sym_get_type(sym)) { + case S_BOOLEAN: + case S_TRISTATE: +diff --git a/scripts/kconfig/expr.h b/scripts/kconfig/expr.h +index 184eb6a..b267933 100644 +--- a/scripts/kconfig/expr.h ++++ b/scripts/kconfig/expr.h +@@ -108,6 +108,8 @@ struct symbol { + #define SYMBOL_DEF3 0x40000 /* symbol.def[S_DEF_3] is valid */ + #define SYMBOL_DEF4 0x80000 /* symbol.def[S_DEF_4] is valid */ + ++#define SYMBOL_NEW 0x100000 /* symbol is new (loaded config did not provide a value) */ ++ + #define SYMBOL_MAXLENGTH 256 + #define SYMBOL_HASHSIZE 9973 + +diff --git a/scripts/kconfig/lkc_proto.h b/scripts/kconfig/lkc_proto.h +index 17342fe..6da571b 100644 +--- a/scripts/kconfig/lkc_proto.h ++++ b/scripts/kconfig/lkc_proto.h +@@ -7,6 +7,7 @@ P(conf_read_simple,int,(const char *name, int)); + P(conf_write_defconfig,int,(const char *name)); + P(conf_write,int,(const char *name)); + P(conf_write_autoconf,int,(void)); ++P(conf_write_symbol, void,(struct symbol*, FILE*, bool)); + P(conf_get_changed,bool,(void)); + P(conf_set_changed_callback, void,(void (*fn)(void))); + P(conf_set_message_callback, void,(void (*fn)(const char *fmt, va_list ap))); +-- +1.7.2.3 + --- linux-2.6-3.0.0~rc6.orig/debian/patches/features/all/sound-pci-cs46xx-request_firmware.patch +++ linux-2.6-3.0.0~rc6/debian/patches/features/all/sound-pci-cs46xx-request_firmware.patch @@ -0,0 +1,172 @@ +From: Ben Hutchings +Subject: cs46xx: Use request_firmware() for old DSP code + +Based on work by Kalle Olavi Niemitalo . + +Tested by Antonio Ospite . +Unfortunately we cannot currently distribute the firmware. + +diff --git a/sound/pci/Kconfig b/sound/pci/Kconfig +index 17e03b9..124b3a0 100644 +--- a/sound/pci/Kconfig ++++ b/sound/pci/Kconfig +@@ -229,7 +229,7 @@ config SND_CS4281 + + config SND_CS46XX + tristate "Cirrus Logic (Sound Fusion) CS4280/CS461x/CS462x/CS463x" +- depends on BROKEN ++ select FW_LOADER + select SND_RAWMIDI + select SND_AC97_CODEC + help +@@ -241,6 +241,7 @@ config SND_CS46XX + + config SND_CS46XX_NEW_DSP + bool "Cirrus Logic (Sound Fusion) New DSP support" ++ depends on BROKEN + depends on SND_CS46XX + default y + help +diff --git a/sound/pci/cs46xx/cs46xx_lib.c b/sound/pci/cs46xx/cs46xx_lib.c +index 1be96ea..b12b930 100644 +--- a/sound/pci/cs46xx/cs46xx_lib.c ++++ b/sound/pci/cs46xx/cs46xx_lib.c +@@ -53,6 +53,7 @@ + #include + #include + #include ++#include + + + #include +@@ -308,7 +309,7 @@ static void snd_cs46xx_ac97_write(struct snd_ac97 *ac97, + */ + + int snd_cs46xx_download(struct snd_cs46xx *chip, +- u32 *src, ++ const __le32 *src, + unsigned long offset, + unsigned long len) + { +@@ -321,9 +322,9 @@ int snd_cs46xx_download(struct snd_cs46xx *chip, + dst = chip->region.idx[bank+1].remap_addr + offset; + len /= sizeof(u32); + +- /* writel already converts 32-bit value to right endianess */ + while (len-- > 0) { +- writel(*src++, dst); ++ __raw_writel((__force u32)*src++, dst); ++ mmiowb(); + dst += sizeof(u32); + } + return 0; +@@ -360,23 +361,77 @@ int snd_cs46xx_clear_BA1(struct snd_cs46xx *chip, + + #else /* old DSP image */ + +-#include "cs46xx_image.h" ++struct cs46xx_old_image { ++ __le32 size[BA1_MEMORY_COUNT]; ++ __le32 data[0]; ++}; + +-int snd_cs46xx_download_image(struct snd_cs46xx *chip) ++static int snd_cs46xx_check_image_size(const struct firmware *firmware) + { +- int idx, err; +- unsigned long offset = 0; ++ const struct cs46xx_old_image *image = ++ (const struct cs46xx_old_image *)firmware->data; ++ size_t offset = sizeof(*image); ++ int idx; ++ ++ if (firmware->size < offset) { ++ snd_printk(KERN_ERR "cs46xx: firmware too small\n"); ++ return -EINVAL; ++ } + + for (idx = 0; idx < BA1_MEMORY_COUNT; idx++) { +- if ((err = snd_cs46xx_download(chip, +- &BA1Struct.map[offset], +- BA1Struct.memory[idx].offset, +- BA1Struct.memory[idx].size)) < 0) +- return err; +- offset += BA1Struct.memory[idx].size >> 2; +- } ++ size_t size = le32_to_cpu(image->size[idx]); ++ ++ if (size % sizeof(u32)) { ++ snd_printk(KERN_ERR "cs46xx: firmware hunk misaligned\n"); ++ return -EINVAL; ++ } ++ if (size > BA1_DWORD_SIZE * sizeof(u32)) { ++ snd_printk(KERN_ERR "cs46xx: firmware hunk out of range\n"); ++ return -EINVAL; ++ } ++ offset += size; ++ } ++ ++ if (firmware->size != offset) { ++ snd_printk(KERN_ERR "cs46xx: firmware size mismatch\n"); ++ return -EINVAL; ++ } ++ + return 0; + } ++ ++static int snd_cs46xx_download_image(struct snd_cs46xx *chip) ++{ ++ int idx, err; ++ const struct firmware *firmware = NULL; ++ const struct cs46xx_old_image *image; ++ const __le32 *data; ++ ++ err = request_firmware(&firmware, "cs46xx/cs46xx-old.fw", ++ &chip->pci->dev); ++ if (err < 0) { ++ snd_printk(KERN_ERR "cs46xx: no firmware\n"); ++ return err; ++ } ++ ++ err = snd_cs46xx_check_image_size(firmware); ++ if (err < 0) ++ goto end; ++ image = (const struct cs46xx_old_image *)firmware->data; ++ data = image->data; ++ ++ for (idx = 0; idx < BA1_MEMORY_COUNT; idx++) { ++ size_t size = le32_to_cpu(image->size[idx]); ++ ++ err = snd_cs46xx_download(chip, data, idx << 16, size); ++ if (err < 0) ++ goto end; ++ data += size / sizeof(u32); ++ } ++end: ++ release_firmware(firmware); ++ return err; ++} + #endif /* CONFIG_SND_CS46XX_NEW_DSP */ + + /* +@@ -3874,3 +3929,5 @@ int __devinit snd_cs46xx_create(struct snd_card *card, + *rchip = chip; + return 0; + } ++ ++MODULE_FIRMWARE("cs46xx/cs46xx-old.fw"); +diff --git a/sound/pci/cs46xx/cs46xx_lib.h b/sound/pci/cs46xx/cs46xx_lib.h +index 4eb55aa..85babb5 100644 +--- a/sound/pci/cs46xx/cs46xx_lib.h ++++ b/sound/pci/cs46xx/cs46xx_lib.h +@@ -103,8 +103,8 @@ int cs46xx_dsp_proc_done (struct snd_cs46xx *chip); + #define cs46xx_dsp_proc_done(chip) + #endif + int cs46xx_dsp_scb_and_task_init (struct snd_cs46xx *chip); +-int snd_cs46xx_download (struct snd_cs46xx *chip, u32 *src, unsigned long offset, +- unsigned long len); ++int snd_cs46xx_download(struct snd_cs46xx *chip, const __le32 *src, unsigned long offset, ++ unsigned long len); + int snd_cs46xx_clear_BA1(struct snd_cs46xx *chip, unsigned long offset, unsigned long len); + int cs46xx_dsp_enable_spdif_out (struct snd_cs46xx *chip); + int cs46xx_dsp_enable_spdif_hw (struct snd_cs46xx *chip); --- linux-2.6-3.0.0~rc6.orig/debian/patches/features/all/aufs2/aufs2-add.patch +++ linux-2.6-3.0.0~rc6/debian/patches/features/all/aufs2/aufs2-add.patch @@ -0,0 +1,28589 @@ +diff -urN a/fs/aufs/Kconfig b/fs/aufs/Kconfig +--- a/fs/aufs/Kconfig 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/Kconfig 2011-03-06 23:28:02.616413258 +0000 +@@ -0,0 +1,180 @@ ++config AUFS_FS ++ tristate "Aufs (Advanced multi layered unification filesystem) support" ++ depends on EXPERIMENTAL ++ help ++ Aufs is a stackable unification filesystem such as Unionfs, ++ which unifies several directories and provides a merged single ++ directory. ++ In the early days, aufs was entirely re-designed and ++ re-implemented Unionfs Version 1.x series. Introducing many ++ original ideas, approaches and improvements, it becomes totally ++ different from Unionfs while keeping the basic features. ++ ++if AUFS_FS ++choice ++ prompt "Maximum number of branches" ++ default AUFS_BRANCH_MAX_127 ++ help ++ Specifies the maximum number of branches (or member directories) ++ in a single aufs. The larger value consumes more system ++ resources and has a minor impact to performance. ++config AUFS_BRANCH_MAX_127 ++ bool "127" ++ help ++ Specifies the maximum number of branches (or member directories) ++ in a single aufs. The larger value consumes more system ++ resources and has a minor impact to performance. ++config AUFS_BRANCH_MAX_511 ++ bool "511" ++ help ++ Specifies the maximum number of branches (or member directories) ++ in a single aufs. The larger value consumes more system ++ resources and has a minor impact to performance. ++config AUFS_BRANCH_MAX_1023 ++ bool "1023" ++ help ++ Specifies the maximum number of branches (or member directories) ++ in a single aufs. The larger value consumes more system ++ resources and has a minor impact to performance. ++config AUFS_BRANCH_MAX_32767 ++ bool "32767" ++ help ++ Specifies the maximum number of branches (or member directories) ++ in a single aufs. The larger value consumes more system ++ resources and has a minor impact to performance. ++endchoice ++ ++config AUFS_SBILIST ++ bool ++ depends on AUFS_MAGIC_SYSRQ || PROC_FS ++ default y ++ help ++ Automatic configuration for internal use. ++ When aufs supports Magic SysRq or /proc, enabled automatically. ++ ++config AUFS_HNOTIFY ++ bool "Detect direct branch access (bypassing aufs)" ++ help ++ If you want to modify files on branches directly, eg. bypassing aufs, ++ and want aufs to detect the changes of them fully, then enable this ++ option and use 'udba=notify' mount option. ++ Currently there is only one available configuration, "fsnotify". ++ It will have a negative impact to the performance. ++ See detail in aufs.5. ++ ++choice ++ prompt "method" if AUFS_HNOTIFY ++ default AUFS_HFSNOTIFY ++config AUFS_HFSNOTIFY ++ bool "fsnotify" ++ select FSNOTIFY ++endchoice ++ ++config AUFS_EXPORT ++ bool "NFS-exportable aufs" ++ depends on (AUFS_FS = y && EXPORTFS = y) || (AUFS_FS = m && EXPORTFS) ++ help ++ If you want to export your mounted aufs via NFS, then enable this ++ option. There are several requirements for this configuration. ++ See detail in aufs.5. ++ ++config AUFS_INO_T_64 ++ bool ++ depends on AUFS_EXPORT ++ depends on 64BIT && !(ALPHA || S390) ++ default y ++ help ++ Automatic configuration for internal use. ++ /* typedef unsigned long/int __kernel_ino_t */ ++ /* alpha and s390x are int */ ++ ++config AUFS_RDU ++ bool "Readdir in userspace" ++ help ++ Aufs has two methods to provide a merged view for a directory, ++ by a user-space library and by kernel-space natively. The latter ++ is always enabled but sometimes large and slow. ++ If you enable this option, install the library in aufs2-util ++ package, and set some environment variables for your readdir(3), ++ then the work will be handled in user-space which generally ++ shows better performance in most cases. ++ See detail in aufs.5. ++ ++config AUFS_SP_IATTR ++ bool "Respect the attributes (mtime/ctime mainly) of special files" ++ help ++ When you write something to a special file, some attributes of it ++ (mtime/ctime mainly) may be updated. Generally such updates are ++ less important (actually some device drivers and NFS ignore ++ it). But some applications (such like test program) requires ++ such updates. If you need these updates, then enable this ++ configuration which introduces some overhead. ++ Currently this configuration handles FIFO only. ++ ++config AUFS_SHWH ++ bool "Show whiteouts" ++ help ++ If you want to make the whiteouts in aufs visible, then enable ++ this option and specify 'shwh' mount option. Although it may ++ sounds like philosophy or something, but in technically it ++ simply shows the name of whiteout with keeping its behaviour. ++ ++config AUFS_BR_RAMFS ++ bool "Ramfs (initramfs/rootfs) as an aufs branch" ++ help ++ If you want to use ramfs as an aufs branch fs, then enable this ++ option. Generally tmpfs is recommended. ++ Aufs prohibited them to be a branch fs by default, because ++ initramfs becomes unusable after switch_root or something ++ generally. If you sets initramfs as an aufs branch and boot your ++ system by switch_root, you will meet a problem easily since the ++ files in initramfs may be inaccessible. ++ Unless you are going to use ramfs as an aufs branch fs without ++ switch_root or something, leave it N. ++ ++config AUFS_BR_FUSE ++ bool "Fuse fs as an aufs branch" ++ depends on FUSE_FS ++ select AUFS_POLL ++ help ++ If you want to use fuse-based userspace filesystem as an aufs ++ branch fs, then enable this option. ++ It implements the internal poll(2) operation which is ++ implemented by fuse only (curretnly). ++ ++config AUFS_POLL ++ bool ++ help ++ Automatic configuration for internal use. ++ ++config AUFS_BR_HFSPLUS ++ bool "Hfsplus as an aufs branch" ++ depends on HFSPLUS_FS ++ default y ++ help ++ If you want to use hfsplus fs as an aufs branch fs, then enable ++ this option. This option introduces a small overhead at ++ copying-up a file on hfsplus. ++ ++config AUFS_BDEV_LOOP ++ bool ++ depends on BLK_DEV_LOOP ++ default y ++ help ++ Automatic configuration for internal use. ++ Convert =[ym] into =y. ++ ++config AUFS_DEBUG ++ bool "Debug aufs" ++ help ++ Enable this to compile aufs internal debug code. ++ It will have a negative impact to the performance. ++ ++config AUFS_MAGIC_SYSRQ ++ bool ++ depends on AUFS_DEBUG && MAGIC_SYSRQ ++ default y ++ help ++ Automatic configuration for internal use. ++ When aufs supports Magic SysRq, enabled automatically. ++endif +diff -urN a/fs/aufs/Makefile b/fs/aufs/Makefile +--- a/fs/aufs/Makefile 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/Makefile 2011-03-06 23:28:02.620413138 +0000 +@@ -0,0 +1,38 @@ ++ ++include ${src}/magic.mk ++ifeq (${CONFIG_AUFS_FS},m) ++include ${src}/conf.mk ++endif ++-include ${src}/priv_def.mk ++ ++# cf. include/linux/kernel.h ++# enable pr_debug ++ccflags-y += -DDEBUG ++# sparse doesn't allow spaces ++ccflags-y += -D'pr_fmt(fmt)=AUFS_NAME"\040%s:%d:%s[%d]:\040"fmt,__func__,__LINE__,current->comm,current->pid' ++ ++obj-$(CONFIG_AUFS_FS) += aufs.o ++aufs-y := module.o sbinfo.o super.o branch.o xino.o sysaufs.o opts.o \ ++ wkq.o vfsub.o dcsub.o \ ++ cpup.o whout.o wbr_policy.o \ ++ dinfo.o dentry.o \ ++ dynop.o \ ++ finfo.o file.o f_op.o \ ++ dir.o vdir.o \ ++ iinfo.o inode.o i_op.o i_op_add.o i_op_del.o i_op_ren.o \ ++ ioctl.o ++ ++# all are boolean ++aufs-$(CONFIG_PROC_FS) += procfs.o plink.o ++aufs-$(CONFIG_SYSFS) += sysfs.o ++aufs-$(CONFIG_DEBUG_FS) += dbgaufs.o ++aufs-$(CONFIG_AUFS_BDEV_LOOP) += loop.o ++aufs-$(CONFIG_AUFS_HNOTIFY) += hnotify.o ++aufs-$(CONFIG_AUFS_HFSNOTIFY) += hfsnotify.o ++aufs-$(CONFIG_AUFS_EXPORT) += export.o ++aufs-$(CONFIG_AUFS_POLL) += poll.o ++aufs-$(CONFIG_AUFS_RDU) += rdu.o ++aufs-$(CONFIG_AUFS_SP_IATTR) += f_op_sp.o ++aufs-$(CONFIG_AUFS_BR_HFSPLUS) += hfsplus.o ++aufs-$(CONFIG_AUFS_DEBUG) += debug.o ++aufs-$(CONFIG_AUFS_MAGIC_SYSRQ) += sysrq.o +diff -urN a/fs/aufs/aufs.h b/fs/aufs/aufs.h +--- a/fs/aufs/aufs.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/aufs.h 2011-03-06 23:28:02.616413258 +0000 +@@ -0,0 +1,61 @@ ++/* ++ * Copyright (C) 2005-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * all header files ++ */ ++ ++#ifndef __AUFS_H__ ++#define __AUFS_H__ ++ ++#ifdef __KERNEL__ ++ ++#define AuStub(type, name, body, ...) \ ++ static inline type name(__VA_ARGS__) { body; } ++ ++#define AuStubVoid(name, ...) \ ++ AuStub(void, name, , __VA_ARGS__) ++#define AuStubInt0(name, ...) \ ++ AuStub(int, name, return 0, __VA_ARGS__) ++ ++#include "debug.h" ++ ++#include "branch.h" ++#include "cpup.h" ++#include "dcsub.h" ++#include "dbgaufs.h" ++#include "dentry.h" ++#include "dir.h" ++#include "dynop.h" ++#include "file.h" ++#include "fstype.h" ++#include "inode.h" ++#include "loop.h" ++#include "module.h" ++/* never include ./mtx.h */ ++#include "opts.h" ++#include "rwsem.h" ++#include "spl.h" ++#include "super.h" ++#include "sysaufs.h" ++#include "vfsub.h" ++#include "whout.h" ++#include "wkq.h" ++ ++#endif /* __KERNEL__ */ ++#endif /* __AUFS_H__ */ +diff -urN a/fs/aufs/branch.c b/fs/aufs/branch.c +--- a/fs/aufs/branch.c 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/branch.c 2011-03-06 23:28:02.616413258 +0000 +@@ -0,0 +1,1160 @@ ++/* ++ * Copyright (C) 2005-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * branch management ++ */ ++ ++#include ++#include ++#include ++#include "aufs.h" ++ ++/* ++ * free a single branch ++ */ ++static void au_br_do_free(struct au_branch *br) ++{ ++ int i; ++ struct au_wbr *wbr; ++ struct au_dykey **key; ++ ++ au_hnotify_fin_br(br); ++ ++ if (br->br_xino.xi_file) ++ fput(br->br_xino.xi_file); ++ mutex_destroy(&br->br_xino.xi_nondir_mtx); ++ ++ AuDebugOn(atomic_read(&br->br_count)); ++ ++ wbr = br->br_wbr; ++ if (wbr) { ++ for (i = 0; i < AuBrWh_Last; i++) ++ dput(wbr->wbr_wh[i]); ++ AuDebugOn(atomic_read(&wbr->wbr_wh_running)); ++ AuRwDestroy(&wbr->wbr_wh_rwsem); ++ } ++ ++ key = br->br_dykey; ++ for (i = 0; i < AuBrDynOp; i++, key++) ++ if (*key) ++ au_dy_put(*key); ++ else ++ break; ++ ++ mntput(br->br_mnt); ++ kfree(wbr); ++ kfree(br); ++} ++ ++/* ++ * frees all branches ++ */ ++void au_br_free(struct au_sbinfo *sbinfo) ++{ ++ aufs_bindex_t bmax; ++ struct au_branch **br; ++ ++ AuRwMustWriteLock(&sbinfo->si_rwsem); ++ ++ bmax = sbinfo->si_bend + 1; ++ br = sbinfo->si_branch; ++ while (bmax--) ++ au_br_do_free(*br++); ++} ++ ++/* ++ * find the index of a branch which is specified by @br_id. ++ */ ++int au_br_index(struct super_block *sb, aufs_bindex_t br_id) ++{ ++ aufs_bindex_t bindex, bend; ++ ++ bend = au_sbend(sb); ++ for (bindex = 0; bindex <= bend; bindex++) ++ if (au_sbr_id(sb, bindex) == br_id) ++ return bindex; ++ return -1; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* ++ * add a branch ++ */ ++ ++static int test_overlap(struct super_block *sb, struct dentry *h_adding, ++ struct dentry *h_root) ++{ ++ if (unlikely(h_adding == h_root ++ || au_test_loopback_overlap(sb, h_adding))) ++ return 1; ++ if (h_adding->d_sb != h_root->d_sb) ++ return 0; ++ return au_test_subdir(h_adding, h_root) ++ || au_test_subdir(h_root, h_adding); ++} ++ ++/* ++ * returns a newly allocated branch. @new_nbranch is a number of branches ++ * after adding a branch. ++ */ ++static struct au_branch *au_br_alloc(struct super_block *sb, int new_nbranch, ++ int perm) ++{ ++ struct au_branch *add_branch; ++ struct dentry *root; ++ int err; ++ ++ err = -ENOMEM; ++ root = sb->s_root; ++ add_branch = kmalloc(sizeof(*add_branch), GFP_NOFS); ++ if (unlikely(!add_branch)) ++ goto out; ++ ++ err = au_hnotify_init_br(add_branch, perm); ++ if (unlikely(err)) ++ goto out_br; ++ ++ add_branch->br_wbr = NULL; ++ if (au_br_writable(perm)) { ++ /* may be freed separately at changing the branch permission */ ++ add_branch->br_wbr = kmalloc(sizeof(*add_branch->br_wbr), ++ GFP_NOFS); ++ if (unlikely(!add_branch->br_wbr)) ++ goto out_hnotify; ++ } ++ ++ err = au_sbr_realloc(au_sbi(sb), new_nbranch); ++ if (!err) ++ err = au_di_realloc(au_di(root), new_nbranch); ++ if (!err) ++ err = au_ii_realloc(au_ii(root->d_inode), new_nbranch); ++ if (!err) ++ return add_branch; /* success */ ++ ++ kfree(add_branch->br_wbr); ++ ++out_hnotify: ++ au_hnotify_fin_br(add_branch); ++out_br: ++ kfree(add_branch); ++out: ++ return ERR_PTR(err); ++} ++ ++/* ++ * test if the branch permission is legal or not. ++ */ ++static int test_br(struct inode *inode, int brperm, char *path) ++{ ++ int err; ++ ++ err = (au_br_writable(brperm) && IS_RDONLY(inode)); ++ if (!err) ++ goto out; ++ ++ err = -EINVAL; ++ pr_err("write permission for readonly mount or inode, %s\n", path); ++ ++out: ++ return err; ++} ++ ++/* ++ * returns: ++ * 0: success, the caller will add it ++ * plus: success, it is already unified, the caller should ignore it ++ * minus: error ++ */ ++static int test_add(struct super_block *sb, struct au_opt_add *add, int remount) ++{ ++ int err; ++ aufs_bindex_t bend, bindex; ++ struct dentry *root; ++ struct inode *inode, *h_inode; ++ ++ root = sb->s_root; ++ bend = au_sbend(sb); ++ if (unlikely(bend >= 0 ++ && au_find_dbindex(root, add->path.dentry) >= 0)) { ++ err = 1; ++ if (!remount) { ++ err = -EINVAL; ++ pr_err("%s duplicated\n", add->pathname); ++ } ++ goto out; ++ } ++ ++ err = -ENOSPC; /* -E2BIG; */ ++ if (unlikely(AUFS_BRANCH_MAX <= add->bindex ++ || AUFS_BRANCH_MAX - 1 <= bend)) { ++ pr_err("number of branches exceeded %s\n", add->pathname); ++ goto out; ++ } ++ ++ err = -EDOM; ++ if (unlikely(add->bindex < 0 || bend + 1 < add->bindex)) { ++ pr_err("bad index %d\n", add->bindex); ++ goto out; ++ } ++ ++ inode = add->path.dentry->d_inode; ++ err = -ENOENT; ++ if (unlikely(!inode->i_nlink)) { ++ pr_err("no existence %s\n", add->pathname); ++ goto out; ++ } ++ ++ err = -EINVAL; ++ if (unlikely(inode->i_sb == sb)) { ++ pr_err("%s must be outside\n", add->pathname); ++ goto out; ++ } ++ ++ if (unlikely(au_test_fs_unsuppoted(inode->i_sb))) { ++ pr_err("unsupported filesystem, %s (%s)\n", ++ add->pathname, au_sbtype(inode->i_sb)); ++ goto out; ++ } ++ ++ err = test_br(add->path.dentry->d_inode, add->perm, add->pathname); ++ if (unlikely(err)) ++ goto out; ++ ++ if (bend < 0) ++ return 0; /* success */ ++ ++ err = -EINVAL; ++ for (bindex = 0; bindex <= bend; bindex++) ++ if (unlikely(test_overlap(sb, add->path.dentry, ++ au_h_dptr(root, bindex)))) { ++ pr_err("%s is overlapped\n", add->pathname); ++ goto out; ++ } ++ ++ err = 0; ++ if (au_opt_test(au_mntflags(sb), WARN_PERM)) { ++ h_inode = au_h_dptr(root, 0)->d_inode; ++ if ((h_inode->i_mode & S_IALLUGO) != (inode->i_mode & S_IALLUGO) ++ || h_inode->i_uid != inode->i_uid ++ || h_inode->i_gid != inode->i_gid) ++ pr_warning("uid/gid/perm %s %u/%u/0%o, %u/%u/0%o\n", ++ add->pathname, ++ inode->i_uid, inode->i_gid, ++ (inode->i_mode & S_IALLUGO), ++ h_inode->i_uid, h_inode->i_gid, ++ (h_inode->i_mode & S_IALLUGO)); ++ } ++ ++out: ++ return err; ++} ++ ++/* ++ * initialize or clean the whiteouts for an adding branch ++ */ ++static int au_br_init_wh(struct super_block *sb, struct au_branch *br, ++ int new_perm, struct dentry *h_root) ++{ ++ int err, old_perm; ++ aufs_bindex_t bindex; ++ struct mutex *h_mtx; ++ struct au_wbr *wbr; ++ struct au_hinode *hdir; ++ ++ wbr = br->br_wbr; ++ old_perm = br->br_perm; ++ br->br_perm = new_perm; ++ hdir = NULL; ++ h_mtx = NULL; ++ bindex = au_br_index(sb, br->br_id); ++ if (0 <= bindex) { ++ hdir = au_hi(sb->s_root->d_inode, bindex); ++ au_hn_imtx_lock_nested(hdir, AuLsc_I_PARENT); ++ } else { ++ h_mtx = &h_root->d_inode->i_mutex; ++ mutex_lock_nested(h_mtx, AuLsc_I_PARENT); ++ } ++ if (!wbr) ++ err = au_wh_init(h_root, br, sb); ++ else { ++ wbr_wh_write_lock(wbr); ++ err = au_wh_init(h_root, br, sb); ++ wbr_wh_write_unlock(wbr); ++ } ++ if (hdir) ++ au_hn_imtx_unlock(hdir); ++ else ++ mutex_unlock(h_mtx); ++ br->br_perm = old_perm; ++ ++ if (!err && wbr && !au_br_writable(new_perm)) { ++ kfree(wbr); ++ br->br_wbr = NULL; ++ } ++ ++ return err; ++} ++ ++static int au_wbr_init(struct au_branch *br, struct super_block *sb, ++ int perm, struct path *path) ++{ ++ int err; ++ struct kstatfs kst; ++ struct au_wbr *wbr; ++ struct dentry *h_dentry; ++ ++ wbr = br->br_wbr; ++ au_rw_init(&wbr->wbr_wh_rwsem); ++ memset(wbr->wbr_wh, 0, sizeof(wbr->wbr_wh)); ++ atomic_set(&wbr->wbr_wh_running, 0); ++ wbr->wbr_bytes = 0; ++ ++ /* ++ * a limit for rmdir/rename a dir ++ * cf. AUFS_MAX_NAMELEN in include/linux/aufs_type.h ++ */ ++ err = vfs_statfs(path, &kst); ++ if (unlikely(err)) ++ goto out; ++ err = -EINVAL; ++ h_dentry = path->dentry; ++ if (kst.f_namelen >= NAME_MAX) ++ err = au_br_init_wh(sb, br, perm, h_dentry); ++ else ++ pr_err("%.*s(%s), unsupported namelen %ld\n", ++ AuDLNPair(h_dentry), au_sbtype(h_dentry->d_sb), ++ kst.f_namelen); ++ ++out: ++ return err; ++} ++ ++/* intialize a new branch */ ++static int au_br_init(struct au_branch *br, struct super_block *sb, ++ struct au_opt_add *add) ++{ ++ int err; ++ ++ err = 0; ++ memset(&br->br_xino, 0, sizeof(br->br_xino)); ++ mutex_init(&br->br_xino.xi_nondir_mtx); ++ br->br_perm = add->perm; ++ br->br_mnt = add->path.mnt; /* set first, mntget() later */ ++ spin_lock_init(&br->br_dykey_lock); ++ memset(br->br_dykey, 0, sizeof(br->br_dykey)); ++ atomic_set(&br->br_count, 0); ++ br->br_xino_upper = AUFS_XINO_TRUNC_INIT; ++ atomic_set(&br->br_xino_running, 0); ++ br->br_id = au_new_br_id(sb); ++ AuDebugOn(br->br_id < 0); ++ ++ if (au_br_writable(add->perm)) { ++ err = au_wbr_init(br, sb, add->perm, &add->path); ++ if (unlikely(err)) ++ goto out_err; ++ } ++ ++ if (au_opt_test(au_mntflags(sb), XINO)) { ++ err = au_xino_br(sb, br, add->path.dentry->d_inode->i_ino, ++ au_sbr(sb, 0)->br_xino.xi_file, /*do_test*/1); ++ if (unlikely(err)) { ++ AuDebugOn(br->br_xino.xi_file); ++ goto out_err; ++ } ++ } ++ ++ sysaufs_br_init(br); ++ mntget(add->path.mnt); ++ goto out; /* success */ ++ ++out_err: ++ br->br_mnt = NULL; ++out: ++ return err; ++} ++ ++static void au_br_do_add_brp(struct au_sbinfo *sbinfo, aufs_bindex_t bindex, ++ struct au_branch *br, aufs_bindex_t bend, ++ aufs_bindex_t amount) ++{ ++ struct au_branch **brp; ++ ++ AuRwMustWriteLock(&sbinfo->si_rwsem); ++ ++ brp = sbinfo->si_branch + bindex; ++ memmove(brp + 1, brp, sizeof(*brp) * amount); ++ *brp = br; ++ sbinfo->si_bend++; ++ if (unlikely(bend < 0)) ++ sbinfo->si_bend = 0; ++} ++ ++static void au_br_do_add_hdp(struct au_dinfo *dinfo, aufs_bindex_t bindex, ++ aufs_bindex_t bend, aufs_bindex_t amount) ++{ ++ struct au_hdentry *hdp; ++ ++ AuRwMustWriteLock(&dinfo->di_rwsem); ++ ++ hdp = dinfo->di_hdentry + bindex; ++ memmove(hdp + 1, hdp, sizeof(*hdp) * amount); ++ au_h_dentry_init(hdp); ++ dinfo->di_bend++; ++ if (unlikely(bend < 0)) ++ dinfo->di_bstart = 0; ++} ++ ++static void au_br_do_add_hip(struct au_iinfo *iinfo, aufs_bindex_t bindex, ++ aufs_bindex_t bend, aufs_bindex_t amount) ++{ ++ struct au_hinode *hip; ++ ++ AuRwMustWriteLock(&iinfo->ii_rwsem); ++ ++ hip = iinfo->ii_hinode + bindex; ++ memmove(hip + 1, hip, sizeof(*hip) * amount); ++ hip->hi_inode = NULL; ++ au_hn_init(hip); ++ iinfo->ii_bend++; ++ if (unlikely(bend < 0)) ++ iinfo->ii_bstart = 0; ++} ++ ++static void au_br_do_add(struct super_block *sb, struct dentry *h_dentry, ++ struct au_branch *br, aufs_bindex_t bindex) ++{ ++ struct dentry *root; ++ struct inode *root_inode; ++ aufs_bindex_t bend, amount; ++ ++ root = sb->s_root; ++ root_inode = root->d_inode; ++ bend = au_sbend(sb); ++ amount = bend + 1 - bindex; ++ au_br_do_add_brp(au_sbi(sb), bindex, br, bend, amount); ++ au_br_do_add_hdp(au_di(root), bindex, bend, amount); ++ au_br_do_add_hip(au_ii(root_inode), bindex, bend, amount); ++ au_set_h_dptr(root, bindex, dget(h_dentry)); ++ au_set_h_iptr(root_inode, bindex, au_igrab(h_dentry->d_inode), ++ /*flags*/0); ++} ++ ++int au_br_add(struct super_block *sb, struct au_opt_add *add, int remount) ++{ ++ int err; ++ aufs_bindex_t bend, add_bindex; ++ struct dentry *root, *h_dentry; ++ struct inode *root_inode; ++ struct au_branch *add_branch; ++ ++ root = sb->s_root; ++ root_inode = root->d_inode; ++ IMustLock(root_inode); ++ err = test_add(sb, add, remount); ++ if (unlikely(err < 0)) ++ goto out; ++ if (err) { ++ err = 0; ++ goto out; /* success */ ++ } ++ ++ bend = au_sbend(sb); ++ add_branch = au_br_alloc(sb, bend + 2, add->perm); ++ err = PTR_ERR(add_branch); ++ if (IS_ERR(add_branch)) ++ goto out; ++ ++ err = au_br_init(add_branch, sb, add); ++ if (unlikely(err)) { ++ au_br_do_free(add_branch); ++ goto out; ++ } ++ ++ add_bindex = add->bindex; ++ h_dentry = add->path.dentry; ++ if (!remount) ++ au_br_do_add(sb, h_dentry, add_branch, add_bindex); ++ else { ++ sysaufs_brs_del(sb, add_bindex); ++ au_br_do_add(sb, h_dentry, add_branch, add_bindex); ++ sysaufs_brs_add(sb, add_bindex); ++ } ++ ++ if (!add_bindex) { ++ au_cpup_attr_all(root_inode, /*force*/1); ++ sb->s_maxbytes = h_dentry->d_sb->s_maxbytes; ++ } else ++ au_add_nlink(root_inode, h_dentry->d_inode); ++ ++ /* ++ * this test/set prevents aufs from handling unnecesary notify events ++ * of xino files, in case of re-adding a writable branch which was ++ * once detached from aufs. ++ */ ++ if (au_xino_brid(sb) < 0 ++ && au_br_writable(add_branch->br_perm) ++ && !au_test_fs_bad_xino(h_dentry->d_sb) ++ && add_branch->br_xino.xi_file ++ && add_branch->br_xino.xi_file->f_dentry->d_parent == h_dentry) ++ au_xino_brid_set(sb, add_branch->br_id); ++ ++out: ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* ++ * delete a branch ++ */ ++ ++/* to show the line number, do not make it inlined function */ ++#define AuVerbose(do_info, fmt, ...) do { \ ++ if (do_info) \ ++ pr_info(fmt, ##__VA_ARGS__); \ ++} while (0) ++ ++static int au_test_ibusy(struct inode *inode, aufs_bindex_t bstart, ++ aufs_bindex_t bend) ++{ ++ return (inode && !S_ISDIR(inode->i_mode)) || bstart == bend; ++} ++ ++static int au_test_dbusy(struct dentry *dentry, aufs_bindex_t bstart, ++ aufs_bindex_t bend) ++{ ++ return au_test_ibusy(dentry->d_inode, bstart, bend); ++} ++ ++/* ++ * test if the branch is deletable or not. ++ */ ++static int test_dentry_busy(struct dentry *root, aufs_bindex_t bindex, ++ unsigned int sigen, const unsigned int verbose) ++{ ++ int err, i, j, ndentry; ++ aufs_bindex_t bstart, bend; ++ struct au_dcsub_pages dpages; ++ struct au_dpage *dpage; ++ struct dentry *d; ++ ++ err = au_dpages_init(&dpages, GFP_NOFS); ++ if (unlikely(err)) ++ goto out; ++ err = au_dcsub_pages(&dpages, root, NULL, NULL); ++ if (unlikely(err)) ++ goto out_dpages; ++ ++ for (i = 0; !err && i < dpages.ndpage; i++) { ++ dpage = dpages.dpages + i; ++ ndentry = dpage->ndentry; ++ for (j = 0; !err && j < ndentry; j++) { ++ d = dpage->dentries[j]; ++ AuDebugOn(!d->d_count); ++ if (!au_digen_test(d, sigen)) { ++ di_read_lock_child(d, AuLock_IR); ++ if (unlikely(au_dbrange_test(d))) { ++ di_read_unlock(d, AuLock_IR); ++ continue; ++ } ++ } else { ++ di_write_lock_child(d); ++ if (unlikely(au_dbrange_test(d))) { ++ di_write_unlock(d); ++ continue; ++ } ++ err = au_reval_dpath(d, sigen); ++ if (!err) ++ di_downgrade_lock(d, AuLock_IR); ++ else { ++ di_write_unlock(d); ++ break; ++ } ++ } ++ ++ /* AuDbgDentry(d); */ ++ bstart = au_dbstart(d); ++ bend = au_dbend(d); ++ if (bstart <= bindex ++ && bindex <= bend ++ && au_h_dptr(d, bindex) ++ && au_test_dbusy(d, bstart, bend)) { ++ err = -EBUSY; ++ AuVerbose(verbose, "busy %.*s\n", AuDLNPair(d)); ++ AuDbgDentry(d); ++ } ++ di_read_unlock(d, AuLock_IR); ++ } ++ } ++ ++out_dpages: ++ au_dpages_free(&dpages); ++out: ++ return err; ++} ++ ++static int test_inode_busy(struct super_block *sb, aufs_bindex_t bindex, ++ unsigned int sigen, const unsigned int verbose) ++{ ++ int err; ++ unsigned long long max, ull; ++ struct inode *i, **array; ++ aufs_bindex_t bstart, bend; ++ ++ array = au_iarray_alloc(sb, &max); ++ err = PTR_ERR(array); ++ if (IS_ERR(array)) ++ goto out; ++ ++ err = 0; ++ AuDbg("b%d\n", bindex); ++ for (ull = 0; !err && ull < max; ull++) { ++ i = array[ull]; ++ if (i->i_ino == AUFS_ROOT_INO) ++ continue; ++ ++ /* AuDbgInode(i); */ ++ if (au_iigen(i) == sigen) ++ ii_read_lock_child(i); ++ else { ++ ii_write_lock_child(i); ++ err = au_refresh_hinode_self(i); ++ au_iigen_dec(i); ++ if (!err) ++ ii_downgrade_lock(i); ++ else { ++ ii_write_unlock(i); ++ break; ++ } ++ } ++ ++ bstart = au_ibstart(i); ++ bend = au_ibend(i); ++ if (bstart <= bindex ++ && bindex <= bend ++ && au_h_iptr(i, bindex) ++ && au_test_ibusy(i, bstart, bend)) { ++ err = -EBUSY; ++ AuVerbose(verbose, "busy i%lu\n", i->i_ino); ++ AuDbgInode(i); ++ } ++ ii_read_unlock(i); ++ } ++ au_iarray_free(array, max); ++ ++out: ++ return err; ++} ++ ++static int test_children_busy(struct dentry *root, aufs_bindex_t bindex, ++ const unsigned int verbose) ++{ ++ int err; ++ unsigned int sigen; ++ ++ sigen = au_sigen(root->d_sb); ++ DiMustNoWaiters(root); ++ IiMustNoWaiters(root->d_inode); ++ di_write_unlock(root); ++ err = test_dentry_busy(root, bindex, sigen, verbose); ++ if (!err) ++ err = test_inode_busy(root->d_sb, bindex, sigen, verbose); ++ di_write_lock_child(root); /* aufs_write_lock() calls ..._child() */ ++ ++ return err; ++} ++ ++static void au_br_do_del_brp(struct au_sbinfo *sbinfo, ++ const aufs_bindex_t bindex, ++ const aufs_bindex_t bend) ++{ ++ struct au_branch **brp, **p; ++ ++ AuRwMustWriteLock(&sbinfo->si_rwsem); ++ ++ brp = sbinfo->si_branch + bindex; ++ if (bindex < bend) ++ memmove(brp, brp + 1, sizeof(*brp) * (bend - bindex)); ++ sbinfo->si_branch[0 + bend] = NULL; ++ sbinfo->si_bend--; ++ ++ p = krealloc(sbinfo->si_branch, sizeof(*p) * bend, GFP_NOFS); ++ if (p) ++ sbinfo->si_branch = p; ++ /* harmless error */ ++} ++ ++static void au_br_do_del_hdp(struct au_dinfo *dinfo, const aufs_bindex_t bindex, ++ const aufs_bindex_t bend) ++{ ++ struct au_hdentry *hdp, *p; ++ ++ AuRwMustWriteLock(&dinfo->di_rwsem); ++ ++ hdp = dinfo->di_hdentry; ++ if (bindex < bend) ++ memmove(hdp + bindex, hdp + bindex + 1, ++ sizeof(*hdp) * (bend - bindex)); ++ hdp[0 + bend].hd_dentry = NULL; ++ dinfo->di_bend--; ++ ++ p = krealloc(hdp, sizeof(*p) * bend, GFP_NOFS); ++ if (p) ++ dinfo->di_hdentry = p; ++ /* harmless error */ ++} ++ ++static void au_br_do_del_hip(struct au_iinfo *iinfo, const aufs_bindex_t bindex, ++ const aufs_bindex_t bend) ++{ ++ struct au_hinode *hip, *p; ++ ++ AuRwMustWriteLock(&iinfo->ii_rwsem); ++ ++ hip = iinfo->ii_hinode + bindex; ++ if (bindex < bend) ++ memmove(hip, hip + 1, sizeof(*hip) * (bend - bindex)); ++ iinfo->ii_hinode[0 + bend].hi_inode = NULL; ++ au_hn_init(iinfo->ii_hinode + bend); ++ iinfo->ii_bend--; ++ ++ p = krealloc(iinfo->ii_hinode, sizeof(*p) * bend, GFP_NOFS); ++ if (p) ++ iinfo->ii_hinode = p; ++ /* harmless error */ ++} ++ ++static void au_br_do_del(struct super_block *sb, aufs_bindex_t bindex, ++ struct au_branch *br) ++{ ++ aufs_bindex_t bend; ++ struct au_sbinfo *sbinfo; ++ struct dentry *root; ++ struct inode *inode; ++ ++ SiMustWriteLock(sb); ++ ++ root = sb->s_root; ++ inode = root->d_inode; ++ sbinfo = au_sbi(sb); ++ bend = sbinfo->si_bend; ++ ++ dput(au_h_dptr(root, bindex)); ++ au_hiput(au_hi(inode, bindex)); ++ au_br_do_free(br); ++ ++ au_br_do_del_brp(sbinfo, bindex, bend); ++ au_br_do_del_hdp(au_di(root), bindex, bend); ++ au_br_do_del_hip(au_ii(inode), bindex, bend); ++} ++ ++int au_br_del(struct super_block *sb, struct au_opt_del *del, int remount) ++{ ++ int err, rerr, i; ++ unsigned int mnt_flags; ++ aufs_bindex_t bindex, bend, br_id; ++ unsigned char do_wh, verbose; ++ struct au_branch *br; ++ struct au_wbr *wbr; ++ ++ err = 0; ++ bindex = au_find_dbindex(sb->s_root, del->h_path.dentry); ++ if (bindex < 0) { ++ if (remount) ++ goto out; /* success */ ++ err = -ENOENT; ++ pr_err("%s no such branch\n", del->pathname); ++ goto out; ++ } ++ AuDbg("bindex b%d\n", bindex); ++ ++ err = -EBUSY; ++ mnt_flags = au_mntflags(sb); ++ verbose = !!au_opt_test(mnt_flags, VERBOSE); ++ bend = au_sbend(sb); ++ if (unlikely(!bend)) { ++ AuVerbose(verbose, "no more branches left\n"); ++ goto out; ++ } ++ br = au_sbr(sb, bindex); ++ i = atomic_read(&br->br_count); ++ if (unlikely(i)) { ++ AuVerbose(verbose, "%d file(s) opened\n", i); ++ goto out; ++ } ++ ++ wbr = br->br_wbr; ++ do_wh = wbr && (wbr->wbr_whbase || wbr->wbr_plink || wbr->wbr_orph); ++ if (do_wh) { ++ /* instead of WbrWhMustWriteLock(wbr) */ ++ SiMustWriteLock(sb); ++ for (i = 0; i < AuBrWh_Last; i++) { ++ dput(wbr->wbr_wh[i]); ++ wbr->wbr_wh[i] = NULL; ++ } ++ } ++ ++ err = test_children_busy(sb->s_root, bindex, verbose); ++ if (unlikely(err)) { ++ if (do_wh) ++ goto out_wh; ++ goto out; ++ } ++ ++ err = 0; ++ br_id = br->br_id; ++ if (!remount) ++ au_br_do_del(sb, bindex, br); ++ else { ++ sysaufs_brs_del(sb, bindex); ++ au_br_do_del(sb, bindex, br); ++ sysaufs_brs_add(sb, bindex); ++ } ++ ++ if (!bindex) { ++ au_cpup_attr_all(sb->s_root->d_inode, /*force*/1); ++ sb->s_maxbytes = au_sbr_sb(sb, 0)->s_maxbytes; ++ } else ++ au_sub_nlink(sb->s_root->d_inode, del->h_path.dentry->d_inode); ++ if (au_opt_test(mnt_flags, PLINK)) ++ au_plink_half_refresh(sb, br_id); ++ ++ if (au_xino_brid(sb) == br_id) ++ au_xino_brid_set(sb, -1); ++ goto out; /* success */ ++ ++out_wh: ++ /* revert */ ++ rerr = au_br_init_wh(sb, br, br->br_perm, del->h_path.dentry); ++ if (rerr) ++ pr_warning("failed re-creating base whiteout, %s. (%d)\n", ++ del->pathname, rerr); ++out: ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++static int au_ibusy(struct super_block *sb, struct aufs_ibusy __user *arg) ++{ ++ int err; ++ aufs_bindex_t bstart, bend; ++ struct aufs_ibusy ibusy; ++ struct inode *inode, *h_inode; ++ ++ err = -EPERM; ++ if (unlikely(!capable(CAP_SYS_ADMIN))) ++ goto out; ++ ++ err = copy_from_user(&ibusy, arg, sizeof(ibusy)); ++ if (!err) ++ err = !access_ok(VERIFY_WRITE, &arg->h_ino, sizeof(arg->h_ino)); ++ if (unlikely(err)) { ++ err = -EFAULT; ++ AuTraceErr(err); ++ goto out; ++ } ++ ++ err = -EINVAL; ++ si_read_lock(sb, AuLock_FLUSH); ++ if (unlikely(ibusy.bindex < 0 || ibusy.bindex > au_sbend(sb))) ++ goto out_unlock; ++ ++ err = 0; ++ ibusy.h_ino = 0; /* invalid */ ++ inode = ilookup(sb, ibusy.ino); ++ if (!inode ++ || inode->i_ino == AUFS_ROOT_INO ++ || is_bad_inode(inode)) ++ goto out_unlock; ++ ++ ii_read_lock_child(inode); ++ bstart = au_ibstart(inode); ++ bend = au_ibend(inode); ++ if (bstart <= ibusy.bindex && ibusy.bindex <= bend) { ++ h_inode = au_h_iptr(inode, ibusy.bindex); ++ if (h_inode && au_test_ibusy(inode, bstart, bend)) ++ ibusy.h_ino = h_inode->i_ino; ++ } ++ ii_read_unlock(inode); ++ iput(inode); ++ ++out_unlock: ++ si_read_unlock(sb); ++ if (!err) { ++ err = __put_user(ibusy.h_ino, &arg->h_ino); ++ if (unlikely(err)) { ++ err = -EFAULT; ++ AuTraceErr(err); ++ } ++ } ++out: ++ return err; ++} ++ ++long au_ibusy_ioctl(struct file *file, unsigned long arg) ++{ ++ return au_ibusy(file->f_dentry->d_sb, (void __user *)arg); ++} ++ ++#ifdef CONFIG_COMPAT ++long au_ibusy_compat_ioctl(struct file *file, unsigned long arg) ++{ ++ return au_ibusy(file->f_dentry->d_sb, compat_ptr(arg)); ++} ++#endif ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* ++ * change a branch permission ++ */ ++ ++static void au_warn_ima(void) ++{ ++#ifdef CONFIG_IMA ++ /* since it doesn't support mark_files_ro() */ ++ AuWarn1("RW -> RO makes IMA to produce wrong message\n"); ++#endif ++} ++ ++static int do_need_sigen_inc(int a, int b) ++{ ++ return au_br_whable(a) && !au_br_whable(b); ++} ++ ++static int need_sigen_inc(int old, int new) ++{ ++ return do_need_sigen_inc(old, new) ++ || do_need_sigen_inc(new, old); ++} ++ ++static unsigned long long au_farray_cb(void *a, ++ unsigned long long max __maybe_unused, ++ void *arg) ++{ ++ unsigned long long n; ++ struct file **p, *f; ++ struct super_block *sb = arg; ++ ++ n = 0; ++ p = a; ++ lg_global_lock(files_lglock); ++ do_file_list_for_each_entry(sb, f) { ++ if (au_fi(f) ++ && file_count(f) ++ && !special_file(f->f_dentry->d_inode->i_mode)) { ++ get_file(f); ++ *p++ = f; ++ n++; ++ AuDebugOn(n > max); ++ } ++ } while_file_list_for_each_entry; ++ lg_global_unlock(files_lglock); ++ ++ return n; ++} ++ ++static struct file **au_farray_alloc(struct super_block *sb, ++ unsigned long long *max) ++{ ++ *max = atomic_long_read(&au_sbi(sb)->si_nfiles); ++ return au_array_alloc(max, au_farray_cb, sb); ++} ++ ++static void au_farray_free(struct file **a, unsigned long long max) ++{ ++ unsigned long long ull; ++ ++ for (ull = 0; ull < max; ull++) ++ if (a[ull]) ++ fput(a[ull]); ++ au_array_free(a); ++} ++ ++static int au_br_mod_files_ro(struct super_block *sb, aufs_bindex_t bindex) ++{ ++ int err, do_warn; ++ unsigned int mnt_flags; ++ unsigned long long ull, max; ++ aufs_bindex_t br_id; ++ unsigned char verbose; ++ struct file *file, *hf, **array; ++ struct inode *inode; ++ struct au_hfile *hfile; ++ ++ mnt_flags = au_mntflags(sb); ++ verbose = !!au_opt_test(mnt_flags, VERBOSE); ++ ++ array = au_farray_alloc(sb, &max); ++ err = PTR_ERR(array); ++ if (IS_ERR(array)) ++ goto out; ++ ++ do_warn = 0; ++ br_id = au_sbr_id(sb, bindex); ++ for (ull = 0; ull < max; ull++) { ++ file = array[ull]; ++ ++ /* AuDbg("%.*s\n", AuDLNPair(file->f_dentry)); */ ++ fi_read_lock(file); ++ if (unlikely(au_test_mmapped(file))) { ++ err = -EBUSY; ++ AuVerbose(verbose, "mmapped %.*s\n", ++ AuDLNPair(file->f_dentry)); ++ AuDbgFile(file); ++ FiMustNoWaiters(file); ++ fi_read_unlock(file); ++ goto out_array; ++ } ++ ++ inode = file->f_dentry->d_inode; ++ hfile = &au_fi(file)->fi_htop; ++ hf = hfile->hf_file; ++ if (!S_ISREG(inode->i_mode) ++ || !(file->f_mode & FMODE_WRITE) ++ || hfile->hf_br->br_id != br_id ++ || !(hf->f_mode & FMODE_WRITE)) ++ array[ull] = NULL; ++ else { ++ do_warn = 1; ++ get_file(file); ++ } ++ ++ FiMustNoWaiters(file); ++ fi_read_unlock(file); ++ fput(file); ++ } ++ ++ err = 0; ++ if (do_warn) ++ au_warn_ima(); ++ ++ for (ull = 0; ull < max; ull++) { ++ file = array[ull]; ++ if (!file) ++ continue; ++ ++ /* todo: already flushed? */ ++ /* cf. fs/super.c:mark_files_ro() */ ++ /* fi_read_lock(file); */ ++ hfile = &au_fi(file)->fi_htop; ++ hf = hfile->hf_file; ++ /* fi_read_unlock(file); */ ++ spin_lock(&hf->f_lock); ++ hf->f_mode &= ~FMODE_WRITE; ++ spin_unlock(&hf->f_lock); ++ if (!file_check_writeable(hf)) { ++ file_release_write(hf); ++ mnt_drop_write(hf->f_vfsmnt); ++ } ++ } ++ ++out_array: ++ au_farray_free(array, max); ++out: ++ AuTraceErr(err); ++ return err; ++} ++ ++int au_br_mod(struct super_block *sb, struct au_opt_mod *mod, int remount, ++ int *do_refresh) ++{ ++ int err, rerr; ++ aufs_bindex_t bindex; ++ struct path path; ++ struct dentry *root; ++ struct au_branch *br; ++ ++ root = sb->s_root; ++ bindex = au_find_dbindex(root, mod->h_root); ++ if (bindex < 0) { ++ if (remount) ++ return 0; /* success */ ++ err = -ENOENT; ++ pr_err("%s no such branch\n", mod->path); ++ goto out; ++ } ++ AuDbg("bindex b%d\n", bindex); ++ ++ err = test_br(mod->h_root->d_inode, mod->perm, mod->path); ++ if (unlikely(err)) ++ goto out; ++ ++ br = au_sbr(sb, bindex); ++ if (br->br_perm == mod->perm) ++ return 0; /* success */ ++ ++ if (au_br_writable(br->br_perm)) { ++ /* remove whiteout base */ ++ err = au_br_init_wh(sb, br, mod->perm, mod->h_root); ++ if (unlikely(err)) ++ goto out; ++ ++ if (!au_br_writable(mod->perm)) { ++ /* rw --> ro, file might be mmapped */ ++ DiMustNoWaiters(root); ++ IiMustNoWaiters(root->d_inode); ++ di_write_unlock(root); ++ err = au_br_mod_files_ro(sb, bindex); ++ /* aufs_write_lock() calls ..._child() */ ++ di_write_lock_child(root); ++ ++ if (unlikely(err)) { ++ rerr = -ENOMEM; ++ br->br_wbr = kmalloc(sizeof(*br->br_wbr), ++ GFP_NOFS); ++ if (br->br_wbr) { ++ path.mnt = br->br_mnt; ++ path.dentry = mod->h_root; ++ rerr = au_wbr_init(br, sb, br->br_perm, ++ &path); ++ } ++ if (unlikely(rerr)) { ++ AuIOErr("nested error %d (%d)\n", ++ rerr, err); ++ br->br_perm = mod->perm; ++ } ++ } ++ } ++ } else if (au_br_writable(mod->perm)) { ++ /* ro --> rw */ ++ err = -ENOMEM; ++ br->br_wbr = kmalloc(sizeof(*br->br_wbr), GFP_NOFS); ++ if (br->br_wbr) { ++ path.mnt = br->br_mnt; ++ path.dentry = mod->h_root; ++ err = au_wbr_init(br, sb, mod->perm, &path); ++ if (unlikely(err)) { ++ kfree(br->br_wbr); ++ br->br_wbr = NULL; ++ } ++ } ++ } ++ ++ if (!err) { ++ *do_refresh |= need_sigen_inc(br->br_perm, mod->perm); ++ br->br_perm = mod->perm; ++ } ++ ++out: ++ AuTraceErr(err); ++ return err; ++} +diff -urN a/fs/aufs/branch.h b/fs/aufs/branch.h +--- a/fs/aufs/branch.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/branch.h 2011-03-06 23:28:02.616413258 +0000 +@@ -0,0 +1,233 @@ ++/* ++ * Copyright (C) 2005-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * branch filesystems and xino for them ++ */ ++ ++#ifndef __AUFS_BRANCH_H__ ++#define __AUFS_BRANCH_H__ ++ ++#ifdef __KERNEL__ ++ ++#include ++#include ++#include ++#include "dynop.h" ++#include "rwsem.h" ++#include "super.h" ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* a xino file */ ++struct au_xino_file { ++ struct file *xi_file; ++ struct mutex xi_nondir_mtx; ++ ++ /* todo: make xino files an array to support huge inode number */ ++ ++#ifdef CONFIG_DEBUG_FS ++ struct dentry *xi_dbgaufs; ++#endif ++}; ++ ++/* members for writable branch only */ ++enum {AuBrWh_BASE, AuBrWh_PLINK, AuBrWh_ORPH, AuBrWh_Last}; ++struct au_wbr { ++ struct au_rwsem wbr_wh_rwsem; ++ struct dentry *wbr_wh[AuBrWh_Last]; ++ atomic_t wbr_wh_running; ++#define wbr_whbase wbr_wh[AuBrWh_BASE] /* whiteout base */ ++#define wbr_plink wbr_wh[AuBrWh_PLINK] /* pseudo-link dir */ ++#define wbr_orph wbr_wh[AuBrWh_ORPH] /* dir for orphans */ ++ ++ /* mfs mode */ ++ unsigned long long wbr_bytes; ++}; ++ ++/* ext2 has 3 types of operations at least, ext3 has 4 */ ++#define AuBrDynOp (AuDyLast * 4) ++ ++/* protected by superblock rwsem */ ++struct au_branch { ++ struct au_xino_file br_xino; ++ ++ aufs_bindex_t br_id; ++ ++ int br_perm; ++ struct vfsmount *br_mnt; ++ spinlock_t br_dykey_lock; ++ struct au_dykey *br_dykey[AuBrDynOp]; ++ atomic_t br_count; ++ ++ struct au_wbr *br_wbr; ++ ++ /* xino truncation */ ++ blkcnt_t br_xino_upper; /* watermark in blocks */ ++ atomic_t br_xino_running; ++ ++#ifdef CONFIG_AUFS_HFSNOTIFY ++ struct fsnotify_group *br_hfsn_group; ++ struct fsnotify_ops br_hfsn_ops; ++#endif ++ ++#ifdef CONFIG_SYSFS ++ /* an entry under sysfs per mount-point */ ++ char br_name[8]; ++ struct attribute br_attr; ++#endif ++}; ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* branch permission and attribute */ ++enum { ++ AuBrPerm_RW, /* writable, linkable wh */ ++ AuBrPerm_RO, /* readonly, no wh */ ++ AuBrPerm_RR, /* natively readonly, no wh */ ++ ++ AuBrPerm_RWNoLinkWH, /* un-linkable whiteouts */ ++ ++ AuBrPerm_ROWH, /* whiteout-able */ ++ AuBrPerm_RRWH, /* whiteout-able */ ++ ++ AuBrPerm_Last ++}; ++ ++static inline int au_br_writable(int brperm) ++{ ++ return brperm == AuBrPerm_RW || brperm == AuBrPerm_RWNoLinkWH; ++} ++ ++static inline int au_br_whable(int brperm) ++{ ++ return brperm == AuBrPerm_RW ++ || brperm == AuBrPerm_ROWH ++ || brperm == AuBrPerm_RRWH; ++} ++ ++static inline int au_br_rdonly(struct au_branch *br) ++{ ++ return ((br->br_mnt->mnt_sb->s_flags & MS_RDONLY) ++ || !au_br_writable(br->br_perm)) ++ ? -EROFS : 0; ++} ++ ++static inline int au_br_hnotifyable(int brperm __maybe_unused) ++{ ++#ifdef CONFIG_AUFS_HNOTIFY ++ return brperm != AuBrPerm_RR && brperm != AuBrPerm_RRWH; ++#else ++ return 0; ++#endif ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* branch.c */ ++struct au_sbinfo; ++void au_br_free(struct au_sbinfo *sinfo); ++int au_br_index(struct super_block *sb, aufs_bindex_t br_id); ++struct au_opt_add; ++int au_br_add(struct super_block *sb, struct au_opt_add *add, int remount); ++struct au_opt_del; ++int au_br_del(struct super_block *sb, struct au_opt_del *del, int remount); ++long au_ibusy_ioctl(struct file *file, unsigned long arg); ++#ifdef CONFIG_COMPAT ++long au_ibusy_compat_ioctl(struct file *file, unsigned long arg); ++#endif ++struct au_opt_mod; ++int au_br_mod(struct super_block *sb, struct au_opt_mod *mod, int remount, ++ int *do_refresh); ++ ++/* xino.c */ ++static const loff_t au_loff_max = LLONG_MAX; ++ ++int au_xib_trunc(struct super_block *sb); ++ssize_t xino_fread(au_readf_t func, struct file *file, void *buf, size_t size, ++ loff_t *pos); ++ssize_t xino_fwrite(au_writef_t func, struct file *file, void *buf, size_t size, ++ loff_t *pos); ++struct file *au_xino_create2(struct file *base_file, struct file *copy_src); ++struct file *au_xino_create(struct super_block *sb, char *fname, int silent); ++ino_t au_xino_new_ino(struct super_block *sb); ++void au_xino_delete_inode(struct inode *inode, const int unlinked); ++int au_xino_write(struct super_block *sb, aufs_bindex_t bindex, ino_t h_ino, ++ ino_t ino); ++int au_xino_read(struct super_block *sb, aufs_bindex_t bindex, ino_t h_ino, ++ ino_t *ino); ++int au_xino_br(struct super_block *sb, struct au_branch *br, ino_t hino, ++ struct file *base_file, int do_test); ++int au_xino_trunc(struct super_block *sb, aufs_bindex_t bindex); ++ ++struct au_opt_xino; ++int au_xino_set(struct super_block *sb, struct au_opt_xino *xino, int remount); ++void au_xino_clr(struct super_block *sb); ++struct file *au_xino_def(struct super_block *sb); ++int au_xino_path(struct seq_file *seq, struct file *file); ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* Superblock to branch */ ++static inline ++aufs_bindex_t au_sbr_id(struct super_block *sb, aufs_bindex_t bindex) ++{ ++ return au_sbr(sb, bindex)->br_id; ++} ++ ++static inline ++struct vfsmount *au_sbr_mnt(struct super_block *sb, aufs_bindex_t bindex) ++{ ++ return au_sbr(sb, bindex)->br_mnt; ++} ++ ++static inline ++struct super_block *au_sbr_sb(struct super_block *sb, aufs_bindex_t bindex) ++{ ++ return au_sbr_mnt(sb, bindex)->mnt_sb; ++} ++ ++static inline void au_sbr_put(struct super_block *sb, aufs_bindex_t bindex) ++{ ++ atomic_dec(&au_sbr(sb, bindex)->br_count); ++} ++ ++static inline int au_sbr_perm(struct super_block *sb, aufs_bindex_t bindex) ++{ ++ return au_sbr(sb, bindex)->br_perm; ++} ++ ++static inline int au_sbr_whable(struct super_block *sb, aufs_bindex_t bindex) ++{ ++ return au_br_whable(au_sbr_perm(sb, bindex)); ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* ++ * wbr_wh_read_lock, wbr_wh_write_lock ++ * wbr_wh_read_unlock, wbr_wh_write_unlock, wbr_wh_downgrade_lock ++ */ ++AuSimpleRwsemFuncs(wbr_wh, struct au_wbr *wbr, &wbr->wbr_wh_rwsem); ++ ++#define WbrWhMustNoWaiters(wbr) AuRwMustNoWaiters(&wbr->wbr_wh_rwsem) ++#define WbrWhMustAnyLock(wbr) AuRwMustAnyLock(&wbr->wbr_wh_rwsem) ++#define WbrWhMustWriteLock(wbr) AuRwMustWriteLock(&wbr->wbr_wh_rwsem) ++ ++#endif /* __KERNEL__ */ ++#endif /* __AUFS_BRANCH_H__ */ +diff -urN a/fs/aufs/conf.mk b/fs/aufs/conf.mk +--- a/fs/aufs/conf.mk 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/conf.mk 2011-03-06 23:28:02.620413138 +0000 +@@ -0,0 +1,37 @@ ++ ++AuConfStr = CONFIG_AUFS_FS=${CONFIG_AUFS_FS} ++ ++define AuConf ++ifdef ${1} ++AuConfStr += ${1}=${${1}} ++endif ++endef ++ ++AuConfAll = BRANCH_MAX_127 BRANCH_MAX_511 BRANCH_MAX_1023 BRANCH_MAX_32767 \ ++ SBILIST \ ++ HNOTIFY HFSNOTIFY \ ++ EXPORT INO_T_64 \ ++ RDU \ ++ SP_IATTR \ ++ SHWH \ ++ BR_RAMFS \ ++ BR_FUSE POLL \ ++ BR_HFSPLUS \ ++ BDEV_LOOP \ ++ DEBUG MAGIC_SYSRQ ++$(foreach i, ${AuConfAll}, \ ++ $(eval $(call AuConf,CONFIG_AUFS_${i}))) ++ ++AuConfName = ${obj}/conf.str ++${AuConfName}.tmp: FORCE ++ @echo ${AuConfStr} | tr ' ' '\n' | sed -e 's/^/"/' -e 's/$$/\\n"/' > $@ ++${AuConfName}: ${AuConfName}.tmp ++ @diff -q $< $@ > /dev/null 2>&1 || { \ ++ echo ' GEN ' $@; \ ++ cp -p $< $@; \ ++ } ++FORCE: ++clean-files += ${AuConfName} ${AuConfName}.tmp ++${obj}/sysfs.o: ${AuConfName} ++ ++-include ${srctree}/${src}/conf_priv.mk +diff -urN a/fs/aufs/cpup.c b/fs/aufs/cpup.c +--- a/fs/aufs/cpup.c 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/cpup.c 2011-03-06 23:28:02.620413138 +0000 +@@ -0,0 +1,1063 @@ ++/* ++ * Copyright (C) 2005-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * copy-up functions, see wbr_policy.c for copy-down ++ */ ++ ++#include ++#include ++#include ++#include ++#include "aufs.h" ++ ++void au_cpup_attr_flags(struct inode *dst, struct inode *src) ++{ ++ const unsigned int mask = S_DEAD | S_SWAPFILE | S_PRIVATE ++ | S_NOATIME | S_NOCMTIME; ++ ++ dst->i_flags |= src->i_flags & ~mask; ++ if (au_test_fs_notime(dst->i_sb)) ++ dst->i_flags |= S_NOATIME | S_NOCMTIME; ++} ++ ++void au_cpup_attr_timesizes(struct inode *inode) ++{ ++ struct inode *h_inode; ++ ++ h_inode = au_h_iptr(inode, au_ibstart(inode)); ++ fsstack_copy_attr_times(inode, h_inode); ++ fsstack_copy_inode_size(inode, h_inode); ++} ++ ++void au_cpup_attr_nlink(struct inode *inode, int force) ++{ ++ struct inode *h_inode; ++ struct super_block *sb; ++ aufs_bindex_t bindex, bend; ++ ++ sb = inode->i_sb; ++ bindex = au_ibstart(inode); ++ h_inode = au_h_iptr(inode, bindex); ++ if (!force ++ && !S_ISDIR(h_inode->i_mode) ++ && au_opt_test(au_mntflags(sb), PLINK) ++ && au_plink_test(inode)) ++ return; ++ ++ inode->i_nlink = h_inode->i_nlink; ++ ++ /* ++ * fewer nlink makes find(1) noisy, but larger nlink doesn't. ++ * it may includes whplink directory. ++ */ ++ if (S_ISDIR(h_inode->i_mode)) { ++ bend = au_ibend(inode); ++ for (bindex++; bindex <= bend; bindex++) { ++ h_inode = au_h_iptr(inode, bindex); ++ if (h_inode) ++ au_add_nlink(inode, h_inode); ++ } ++ } ++} ++ ++void au_cpup_attr_changeable(struct inode *inode) ++{ ++ struct inode *h_inode; ++ ++ h_inode = au_h_iptr(inode, au_ibstart(inode)); ++ inode->i_mode = h_inode->i_mode; ++ inode->i_uid = h_inode->i_uid; ++ inode->i_gid = h_inode->i_gid; ++ au_cpup_attr_timesizes(inode); ++ au_cpup_attr_flags(inode, h_inode); ++} ++ ++void au_cpup_igen(struct inode *inode, struct inode *h_inode) ++{ ++ struct au_iinfo *iinfo = au_ii(inode); ++ ++ IiMustWriteLock(inode); ++ ++ iinfo->ii_higen = h_inode->i_generation; ++ iinfo->ii_hsb1 = h_inode->i_sb; ++} ++ ++void au_cpup_attr_all(struct inode *inode, int force) ++{ ++ struct inode *h_inode; ++ ++ h_inode = au_h_iptr(inode, au_ibstart(inode)); ++ au_cpup_attr_changeable(inode); ++ if (inode->i_nlink > 0) ++ au_cpup_attr_nlink(inode, force); ++ inode->i_rdev = h_inode->i_rdev; ++ inode->i_blkbits = h_inode->i_blkbits; ++ au_cpup_igen(inode, h_inode); ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* Note: dt_dentry and dt_h_dentry are not dget/dput-ed */ ++ ++/* keep the timestamps of the parent dir when cpup */ ++void au_dtime_store(struct au_dtime *dt, struct dentry *dentry, ++ struct path *h_path) ++{ ++ struct inode *h_inode; ++ ++ dt->dt_dentry = dentry; ++ dt->dt_h_path = *h_path; ++ h_inode = h_path->dentry->d_inode; ++ dt->dt_atime = h_inode->i_atime; ++ dt->dt_mtime = h_inode->i_mtime; ++ /* smp_mb(); */ ++} ++ ++void au_dtime_revert(struct au_dtime *dt) ++{ ++ struct iattr attr; ++ int err; ++ ++ attr.ia_atime = dt->dt_atime; ++ attr.ia_mtime = dt->dt_mtime; ++ attr.ia_valid = ATTR_FORCE | ATTR_MTIME | ATTR_MTIME_SET ++ | ATTR_ATIME | ATTR_ATIME_SET; ++ ++ err = vfsub_notify_change(&dt->dt_h_path, &attr); ++ if (unlikely(err)) ++ pr_warning("restoring timestamps failed(%d). ignored\n", err); ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++static noinline_for_stack ++int cpup_iattr(struct dentry *dst, aufs_bindex_t bindex, struct dentry *h_src) ++{ ++ int err, sbits; ++ struct iattr ia; ++ struct path h_path; ++ struct inode *h_isrc, *h_idst; ++ ++ h_path.dentry = au_h_dptr(dst, bindex); ++ h_idst = h_path.dentry->d_inode; ++ h_path.mnt = au_sbr_mnt(dst->d_sb, bindex); ++ h_isrc = h_src->d_inode; ++ ia.ia_valid = ATTR_FORCE | ATTR_UID | ATTR_GID ++ | ATTR_ATIME | ATTR_MTIME ++ | ATTR_ATIME_SET | ATTR_MTIME_SET; ++ ia.ia_uid = h_isrc->i_uid; ++ ia.ia_gid = h_isrc->i_gid; ++ ia.ia_atime = h_isrc->i_atime; ++ ia.ia_mtime = h_isrc->i_mtime; ++ if (h_idst->i_mode != h_isrc->i_mode ++ && !S_ISLNK(h_idst->i_mode)) { ++ ia.ia_valid |= ATTR_MODE; ++ ia.ia_mode = h_isrc->i_mode; ++ } ++ sbits = !!(h_isrc->i_mode & (S_ISUID | S_ISGID)); ++ au_cpup_attr_flags(h_idst, h_isrc); ++ err = vfsub_notify_change(&h_path, &ia); ++ ++ /* is this nfs only? */ ++ if (!err && sbits && au_test_nfs(h_path.dentry->d_sb)) { ++ ia.ia_valid = ATTR_FORCE | ATTR_MODE; ++ ia.ia_mode = h_isrc->i_mode; ++ err = vfsub_notify_change(&h_path, &ia); ++ } ++ ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++static int au_do_copy_file(struct file *dst, struct file *src, loff_t len, ++ char *buf, unsigned long blksize) ++{ ++ int err; ++ size_t sz, rbytes, wbytes; ++ unsigned char all_zero; ++ char *p, *zp; ++ struct mutex *h_mtx; ++ /* reduce stack usage */ ++ struct iattr *ia; ++ ++ zp = page_address(ZERO_PAGE(0)); ++ if (unlikely(!zp)) ++ return -ENOMEM; /* possible? */ ++ ++ err = 0; ++ all_zero = 0; ++ while (len) { ++ AuDbg("len %lld\n", len); ++ sz = blksize; ++ if (len < blksize) ++ sz = len; ++ ++ rbytes = 0; ++ /* todo: signal_pending? */ ++ while (!rbytes || err == -EAGAIN || err == -EINTR) { ++ rbytes = vfsub_read_k(src, buf, sz, &src->f_pos); ++ err = rbytes; ++ } ++ if (unlikely(err < 0)) ++ break; ++ ++ all_zero = 0; ++ if (len >= rbytes && rbytes == blksize) ++ all_zero = !memcmp(buf, zp, rbytes); ++ if (!all_zero) { ++ wbytes = rbytes; ++ p = buf; ++ while (wbytes) { ++ size_t b; ++ ++ b = vfsub_write_k(dst, p, wbytes, &dst->f_pos); ++ err = b; ++ /* todo: signal_pending? */ ++ if (unlikely(err == -EAGAIN || err == -EINTR)) ++ continue; ++ if (unlikely(err < 0)) ++ break; ++ wbytes -= b; ++ p += b; ++ } ++ } else { ++ loff_t res; ++ ++ AuLabel(hole); ++ res = vfsub_llseek(dst, rbytes, SEEK_CUR); ++ err = res; ++ if (unlikely(res < 0)) ++ break; ++ } ++ len -= rbytes; ++ err = 0; ++ } ++ ++ /* the last block may be a hole */ ++ if (!err && all_zero) { ++ AuLabel(last hole); ++ ++ err = 1; ++ if (au_test_nfs(dst->f_dentry->d_sb)) { ++ /* nfs requires this step to make last hole */ ++ /* is this only nfs? */ ++ do { ++ /* todo: signal_pending? */ ++ err = vfsub_write_k(dst, "\0", 1, &dst->f_pos); ++ } while (err == -EAGAIN || err == -EINTR); ++ if (err == 1) ++ dst->f_pos--; ++ } ++ ++ if (err == 1) { ++ ia = (void *)buf; ++ ia->ia_size = dst->f_pos; ++ ia->ia_valid = ATTR_SIZE | ATTR_FILE; ++ ia->ia_file = dst; ++ h_mtx = &dst->f_dentry->d_inode->i_mutex; ++ mutex_lock_nested(h_mtx, AuLsc_I_CHILD2); ++ err = vfsub_notify_change(&dst->f_path, ia); ++ mutex_unlock(h_mtx); ++ } ++ } ++ ++ return err; ++} ++ ++int au_copy_file(struct file *dst, struct file *src, loff_t len) ++{ ++ int err; ++ unsigned long blksize; ++ unsigned char do_kfree; ++ char *buf; ++ ++ err = -ENOMEM; ++ blksize = dst->f_dentry->d_sb->s_blocksize; ++ if (!blksize || PAGE_SIZE < blksize) ++ blksize = PAGE_SIZE; ++ AuDbg("blksize %lu\n", blksize); ++ do_kfree = (blksize != PAGE_SIZE && blksize >= sizeof(struct iattr *)); ++ if (do_kfree) ++ buf = kmalloc(blksize, GFP_NOFS); ++ else ++ buf = (void *)__get_free_page(GFP_NOFS); ++ if (unlikely(!buf)) ++ goto out; ++ ++ if (len > (1 << 22)) ++ AuDbg("copying a large file %lld\n", (long long)len); ++ ++ src->f_pos = 0; ++ dst->f_pos = 0; ++ err = au_do_copy_file(dst, src, len, buf, blksize); ++ if (do_kfree) ++ kfree(buf); ++ else ++ free_page((unsigned long)buf); ++ ++out: ++ return err; ++} ++ ++/* ++ * to support a sparse file which is opened with O_APPEND, ++ * we need to close the file. ++ */ ++static int au_cp_regular(struct dentry *dentry, aufs_bindex_t bdst, ++ aufs_bindex_t bsrc, loff_t len) ++{ ++ int err, i; ++ enum { SRC, DST }; ++ struct { ++ aufs_bindex_t bindex; ++ unsigned int flags; ++ struct dentry *dentry; ++ struct file *file; ++ void *label, *label_file; ++ } *f, file[] = { ++ { ++ .bindex = bsrc, ++ .flags = O_RDONLY | O_NOATIME | O_LARGEFILE, ++ .file = NULL, ++ .label = &&out, ++ .label_file = &&out_src ++ }, ++ { ++ .bindex = bdst, ++ .flags = O_WRONLY | O_NOATIME | O_LARGEFILE, ++ .file = NULL, ++ .label = &&out_src, ++ .label_file = &&out_dst ++ } ++ }; ++ struct super_block *sb; ++ ++ /* bsrc branch can be ro/rw. */ ++ sb = dentry->d_sb; ++ f = file; ++ for (i = 0; i < 2; i++, f++) { ++ f->dentry = au_h_dptr(dentry, f->bindex); ++ f->file = au_h_open(dentry, f->bindex, f->flags, /*file*/NULL); ++ err = PTR_ERR(f->file); ++ if (IS_ERR(f->file)) ++ goto *f->label; ++ err = -EINVAL; ++ if (unlikely(!f->file->f_op)) ++ goto *f->label_file; ++ } ++ ++ /* try stopping to update while we copyup */ ++ IMustLock(file[SRC].dentry->d_inode); ++ err = au_copy_file(file[DST].file, file[SRC].file, len); ++ ++out_dst: ++ fput(file[DST].file); ++ au_sbr_put(sb, file[DST].bindex); ++out_src: ++ fput(file[SRC].file); ++ au_sbr_put(sb, file[SRC].bindex); ++out: ++ return err; ++} ++ ++static int au_do_cpup_regular(struct dentry *dentry, aufs_bindex_t bdst, ++ aufs_bindex_t bsrc, loff_t len, ++ struct inode *h_dir, struct path *h_path) ++{ ++ int err, rerr; ++ loff_t l; ++ ++ err = 0; ++ l = i_size_read(au_h_iptr(dentry->d_inode, bsrc)); ++ if (len == -1 || l < len) ++ len = l; ++ if (len) ++ err = au_cp_regular(dentry, bdst, bsrc, len); ++ if (!err) ++ goto out; /* success */ ++ ++ rerr = vfsub_unlink(h_dir, h_path, /*force*/0); ++ if (rerr) { ++ AuIOErr("failed unlinking cpup-ed %.*s(%d, %d)\n", ++ AuDLNPair(h_path->dentry), err, rerr); ++ err = -EIO; ++ } ++ ++out: ++ return err; ++} ++ ++static int au_do_cpup_symlink(struct path *h_path, struct dentry *h_src, ++ struct inode *h_dir) ++{ ++ int err, symlen; ++ mm_segment_t old_fs; ++ union { ++ char *k; ++ char __user *u; ++ } sym; ++ ++ err = -ENOSYS; ++ if (unlikely(!h_src->d_inode->i_op->readlink)) ++ goto out; ++ ++ err = -ENOMEM; ++ sym.k = __getname_gfp(GFP_NOFS); ++ if (unlikely(!sym.k)) ++ goto out; ++ ++ old_fs = get_fs(); ++ set_fs(KERNEL_DS); ++ symlen = h_src->d_inode->i_op->readlink(h_src, sym.u, PATH_MAX); ++ err = symlen; ++ set_fs(old_fs); ++ ++ if (symlen > 0) { ++ sym.k[symlen] = 0; ++ err = vfsub_symlink(h_dir, h_path, sym.k); ++ } ++ __putname(sym.k); ++ ++out: ++ return err; ++} ++ ++/* return with the lower dst inode is locked */ ++static noinline_for_stack ++int cpup_entry(struct dentry *dentry, aufs_bindex_t bdst, ++ aufs_bindex_t bsrc, loff_t len, unsigned int flags, ++ struct dentry *dst_parent) ++{ ++ int err; ++ umode_t mode; ++ unsigned int mnt_flags; ++ unsigned char isdir; ++ const unsigned char do_dt = !!au_ftest_cpup(flags, DTIME); ++ struct au_dtime dt; ++ struct path h_path; ++ struct dentry *h_src, *h_dst, *h_parent; ++ struct inode *h_inode, *h_dir; ++ struct super_block *sb; ++ ++ /* bsrc branch can be ro/rw. */ ++ h_src = au_h_dptr(dentry, bsrc); ++ h_inode = h_src->d_inode; ++ AuDebugOn(h_inode != au_h_iptr(dentry->d_inode, bsrc)); ++ ++ /* try stopping to be referenced while we are creating */ ++ h_dst = au_h_dptr(dentry, bdst); ++ h_parent = h_dst->d_parent; /* dir inode is locked */ ++ h_dir = h_parent->d_inode; ++ IMustLock(h_dir); ++ AuDebugOn(h_parent != h_dst->d_parent); ++ ++ sb = dentry->d_sb; ++ h_path.mnt = au_sbr_mnt(sb, bdst); ++ if (do_dt) { ++ h_path.dentry = h_parent; ++ au_dtime_store(&dt, dst_parent, &h_path); ++ } ++ h_path.dentry = h_dst; ++ ++ isdir = 0; ++ mode = h_inode->i_mode; ++ switch (mode & S_IFMT) { ++ case S_IFREG: ++ /* try stopping to update while we are referencing */ ++ IMustLock(h_inode); ++ err = vfsub_create(h_dir, &h_path, mode | S_IWUSR); ++ if (!err) ++ err = au_do_cpup_regular ++ (dentry, bdst, bsrc, len, ++ au_h_iptr(dst_parent->d_inode, bdst), &h_path); ++ break; ++ case S_IFDIR: ++ isdir = 1; ++ err = vfsub_mkdir(h_dir, &h_path, mode); ++ if (!err) { ++ /* ++ * strange behaviour from the users view, ++ * particularry setattr case ++ */ ++ if (au_ibstart(dst_parent->d_inode) == bdst) ++ au_cpup_attr_nlink(dst_parent->d_inode, ++ /*force*/1); ++ au_cpup_attr_nlink(dentry->d_inode, /*force*/1); ++ } ++ break; ++ case S_IFLNK: ++ err = au_do_cpup_symlink(&h_path, h_src, h_dir); ++ break; ++ case S_IFCHR: ++ case S_IFBLK: ++ AuDebugOn(!capable(CAP_MKNOD)); ++ /*FALLTHROUGH*/ ++ case S_IFIFO: ++ case S_IFSOCK: ++ err = vfsub_mknod(h_dir, &h_path, mode, h_inode->i_rdev); ++ break; ++ default: ++ AuIOErr("Unknown inode type 0%o\n", mode); ++ err = -EIO; ++ } ++ ++ mnt_flags = au_mntflags(sb); ++ if (!au_opt_test(mnt_flags, UDBA_NONE) ++ && !isdir ++ && au_opt_test(mnt_flags, XINO) ++ && h_inode->i_nlink == 1 ++ /* todo: unnecessary? */ ++ /* && dentry->d_inode->i_nlink == 1 */ ++ && bdst < bsrc ++ && !au_ftest_cpup(flags, KEEPLINO)) ++ au_xino_write(sb, bsrc, h_inode->i_ino, /*ino*/0); ++ /* ignore this error */ ++ ++ if (do_dt) ++ au_dtime_revert(&dt); ++ return err; ++} ++ ++/* ++ * copyup the @dentry from @bsrc to @bdst. ++ * the caller must set the both of lower dentries. ++ * @len is for truncating when it is -1 copyup the entire file. ++ * in link/rename cases, @dst_parent may be different from the real one. ++ */ ++static int au_cpup_single(struct dentry *dentry, aufs_bindex_t bdst, ++ aufs_bindex_t bsrc, loff_t len, unsigned int flags, ++ struct dentry *dst_parent) ++{ ++ int err, rerr; ++ aufs_bindex_t old_ibstart; ++ unsigned char isdir, plink; ++ struct au_dtime dt; ++ struct path h_path; ++ struct dentry *h_src, *h_dst, *h_parent; ++ struct inode *dst_inode, *h_dir, *inode; ++ struct super_block *sb; ++ ++ AuDebugOn(bsrc <= bdst); ++ ++ sb = dentry->d_sb; ++ h_path.mnt = au_sbr_mnt(sb, bdst); ++ h_dst = au_h_dptr(dentry, bdst); ++ h_parent = h_dst->d_parent; /* dir inode is locked */ ++ h_dir = h_parent->d_inode; ++ IMustLock(h_dir); ++ ++ h_src = au_h_dptr(dentry, bsrc); ++ inode = dentry->d_inode; ++ ++ if (!dst_parent) ++ dst_parent = dget_parent(dentry); ++ else ++ dget(dst_parent); ++ ++ plink = !!au_opt_test(au_mntflags(sb), PLINK); ++ dst_inode = au_h_iptr(inode, bdst); ++ if (dst_inode) { ++ if (unlikely(!plink)) { ++ err = -EIO; ++ AuIOErr("hi%lu(i%lu) exists on b%d " ++ "but plink is disabled\n", ++ dst_inode->i_ino, inode->i_ino, bdst); ++ goto out; ++ } ++ ++ if (dst_inode->i_nlink) { ++ const int do_dt = au_ftest_cpup(flags, DTIME); ++ ++ h_src = au_plink_lkup(inode, bdst); ++ err = PTR_ERR(h_src); ++ if (IS_ERR(h_src)) ++ goto out; ++ if (unlikely(!h_src->d_inode)) { ++ err = -EIO; ++ AuIOErr("i%lu exists on a upper branch " ++ "but not pseudo-linked\n", ++ inode->i_ino); ++ dput(h_src); ++ goto out; ++ } ++ ++ if (do_dt) { ++ h_path.dentry = h_parent; ++ au_dtime_store(&dt, dst_parent, &h_path); ++ } ++ h_path.dentry = h_dst; ++ err = vfsub_link(h_src, h_dir, &h_path); ++ if (do_dt) ++ au_dtime_revert(&dt); ++ dput(h_src); ++ goto out; ++ } else ++ /* todo: cpup_wh_file? */ ++ /* udba work */ ++ au_update_ibrange(inode, /*do_put_zero*/1); ++ } ++ ++ old_ibstart = au_ibstart(inode); ++ err = cpup_entry(dentry, bdst, bsrc, len, flags, dst_parent); ++ if (unlikely(err)) ++ goto out; ++ dst_inode = h_dst->d_inode; ++ mutex_lock_nested(&dst_inode->i_mutex, AuLsc_I_CHILD2); ++ ++ err = cpup_iattr(dentry, bdst, h_src); ++ isdir = S_ISDIR(dst_inode->i_mode); ++ if (!err) { ++ if (bdst < old_ibstart) { ++ if (S_ISREG(inode->i_mode)) { ++ err = au_dy_iaop(inode, bdst, dst_inode); ++ if (unlikely(err)) ++ goto out_rev; ++ } ++ au_set_ibstart(inode, bdst); ++ } ++ au_set_h_iptr(inode, bdst, au_igrab(dst_inode), ++ au_hi_flags(inode, isdir)); ++ mutex_unlock(&dst_inode->i_mutex); ++ if (!isdir ++ && h_src->d_inode->i_nlink > 1 ++ && plink) ++ au_plink_append(inode, bdst, h_dst); ++ goto out; /* success */ ++ } ++ ++ /* revert */ ++out_rev: ++ h_path.dentry = h_parent; ++ mutex_unlock(&dst_inode->i_mutex); ++ au_dtime_store(&dt, dst_parent, &h_path); ++ h_path.dentry = h_dst; ++ if (!isdir) ++ rerr = vfsub_unlink(h_dir, &h_path, /*force*/0); ++ else ++ rerr = vfsub_rmdir(h_dir, &h_path); ++ au_dtime_revert(&dt); ++ if (rerr) { ++ AuIOErr("failed removing broken entry(%d, %d)\n", err, rerr); ++ err = -EIO; ++ } ++ ++out: ++ dput(dst_parent); ++ return err; ++} ++ ++struct au_cpup_single_args { ++ int *errp; ++ struct dentry *dentry; ++ aufs_bindex_t bdst, bsrc; ++ loff_t len; ++ unsigned int flags; ++ struct dentry *dst_parent; ++}; ++ ++static void au_call_cpup_single(void *args) ++{ ++ struct au_cpup_single_args *a = args; ++ *a->errp = au_cpup_single(a->dentry, a->bdst, a->bsrc, a->len, ++ a->flags, a->dst_parent); ++} ++ ++int au_sio_cpup_single(struct dentry *dentry, aufs_bindex_t bdst, ++ aufs_bindex_t bsrc, loff_t len, unsigned int flags, ++ struct dentry *dst_parent) ++{ ++ int err, wkq_err; ++ umode_t mode; ++ struct dentry *h_dentry; ++ ++ h_dentry = au_h_dptr(dentry, bsrc); ++ mode = h_dentry->d_inode->i_mode & S_IFMT; ++ if ((mode != S_IFCHR && mode != S_IFBLK) ++ || capable(CAP_MKNOD)) ++ err = au_cpup_single(dentry, bdst, bsrc, len, flags, ++ dst_parent); ++ else { ++ struct au_cpup_single_args args = { ++ .errp = &err, ++ .dentry = dentry, ++ .bdst = bdst, ++ .bsrc = bsrc, ++ .len = len, ++ .flags = flags, ++ .dst_parent = dst_parent ++ }; ++ wkq_err = au_wkq_wait(au_call_cpup_single, &args); ++ if (unlikely(wkq_err)) ++ err = wkq_err; ++ } ++ ++ return err; ++} ++ ++/* ++ * copyup the @dentry from the first active lower branch to @bdst, ++ * using au_cpup_single(). ++ */ ++static int au_cpup_simple(struct dentry *dentry, aufs_bindex_t bdst, loff_t len, ++ unsigned int flags) ++{ ++ int err; ++ aufs_bindex_t bsrc, bend; ++ ++ bend = au_dbend(dentry); ++ for (bsrc = bdst + 1; bsrc <= bend; bsrc++) ++ if (au_h_dptr(dentry, bsrc)) ++ break; ++ ++ err = au_lkup_neg(dentry, bdst); ++ if (!err) { ++ err = au_cpup_single(dentry, bdst, bsrc, len, flags, NULL); ++ if (!err) ++ return 0; /* success */ ++ ++ /* revert */ ++ au_set_h_dptr(dentry, bdst, NULL); ++ au_set_dbstart(dentry, bsrc); ++ } ++ ++ return err; ++} ++ ++struct au_cpup_simple_args { ++ int *errp; ++ struct dentry *dentry; ++ aufs_bindex_t bdst; ++ loff_t len; ++ unsigned int flags; ++}; ++ ++static void au_call_cpup_simple(void *args) ++{ ++ struct au_cpup_simple_args *a = args; ++ *a->errp = au_cpup_simple(a->dentry, a->bdst, a->len, a->flags); ++} ++ ++int au_sio_cpup_simple(struct dentry *dentry, aufs_bindex_t bdst, loff_t len, ++ unsigned int flags) ++{ ++ int err, wkq_err; ++ unsigned char do_sio; ++ struct dentry *parent; ++ struct inode *h_dir; ++ ++ parent = dget_parent(dentry); ++ h_dir = au_h_iptr(parent->d_inode, bdst); ++ do_sio = !!au_test_h_perm_sio(h_dir, MAY_EXEC | MAY_WRITE); ++ if (!do_sio) { ++ /* ++ * testing CAP_MKNOD is for generic fs, ++ * but CAP_FSETID is for xfs only, currently. ++ */ ++ umode_t mode = dentry->d_inode->i_mode; ++ do_sio = (((mode & (S_IFCHR | S_IFBLK)) ++ && !capable(CAP_MKNOD)) ++ || ((mode & (S_ISUID | S_ISGID)) ++ && !capable(CAP_FSETID))); ++ } ++ if (!do_sio) ++ err = au_cpup_simple(dentry, bdst, len, flags); ++ else { ++ struct au_cpup_simple_args args = { ++ .errp = &err, ++ .dentry = dentry, ++ .bdst = bdst, ++ .len = len, ++ .flags = flags ++ }; ++ wkq_err = au_wkq_wait(au_call_cpup_simple, &args); ++ if (unlikely(wkq_err)) ++ err = wkq_err; ++ } ++ ++ dput(parent); ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* ++ * copyup the deleted file for writing. ++ */ ++static int au_do_cpup_wh(struct dentry *dentry, aufs_bindex_t bdst, ++ struct dentry *wh_dentry, struct file *file, ++ loff_t len) ++{ ++ int err; ++ aufs_bindex_t bstart; ++ struct au_dinfo *dinfo; ++ struct dentry *h_d_dst, *h_d_start; ++ struct au_hdentry *hdp; ++ ++ dinfo = au_di(dentry); ++ AuRwMustWriteLock(&dinfo->di_rwsem); ++ ++ bstart = dinfo->di_bstart; ++ hdp = dinfo->di_hdentry; ++ h_d_dst = hdp[0 + bdst].hd_dentry; ++ dinfo->di_bstart = bdst; ++ hdp[0 + bdst].hd_dentry = wh_dentry; ++ if (file) { ++ h_d_start = hdp[0 + bstart].hd_dentry; ++ hdp[0 + bstart].hd_dentry = au_hf_top(file)->f_dentry; ++ } ++ err = au_cpup_single(dentry, bdst, bstart, len, !AuCpup_DTIME, ++ /*h_parent*/NULL); ++ if (file) { ++ if (!err) ++ err = au_reopen_nondir(file); ++ hdp[0 + bstart].hd_dentry = h_d_start; ++ } ++ hdp[0 + bdst].hd_dentry = h_d_dst; ++ dinfo->di_bstart = bstart; ++ ++ return err; ++} ++ ++static int au_cpup_wh(struct dentry *dentry, aufs_bindex_t bdst, loff_t len, ++ struct file *file) ++{ ++ int err; ++ struct au_dtime dt; ++ struct dentry *parent, *h_parent, *wh_dentry; ++ struct au_branch *br; ++ struct path h_path; ++ ++ br = au_sbr(dentry->d_sb, bdst); ++ parent = dget_parent(dentry); ++ h_parent = au_h_dptr(parent, bdst); ++ wh_dentry = au_whtmp_lkup(h_parent, br, &dentry->d_name); ++ err = PTR_ERR(wh_dentry); ++ if (IS_ERR(wh_dentry)) ++ goto out; ++ ++ h_path.dentry = h_parent; ++ h_path.mnt = br->br_mnt; ++ au_dtime_store(&dt, parent, &h_path); ++ err = au_do_cpup_wh(dentry, bdst, wh_dentry, file, len); ++ if (unlikely(err)) ++ goto out_wh; ++ ++ dget(wh_dentry); ++ h_path.dentry = wh_dentry; ++ if (!S_ISDIR(wh_dentry->d_inode->i_mode)) ++ err = vfsub_unlink(h_parent->d_inode, &h_path, /*force*/0); ++ else ++ err = vfsub_rmdir(h_parent->d_inode, &h_path); ++ if (unlikely(err)) { ++ AuIOErr("failed remove copied-up tmp file %.*s(%d)\n", ++ AuDLNPair(wh_dentry), err); ++ err = -EIO; ++ } ++ au_dtime_revert(&dt); ++ au_set_hi_wh(dentry->d_inode, bdst, wh_dentry); ++ ++out_wh: ++ dput(wh_dentry); ++out: ++ dput(parent); ++ return err; ++} ++ ++struct au_cpup_wh_args { ++ int *errp; ++ struct dentry *dentry; ++ aufs_bindex_t bdst; ++ loff_t len; ++ struct file *file; ++}; ++ ++static void au_call_cpup_wh(void *args) ++{ ++ struct au_cpup_wh_args *a = args; ++ *a->errp = au_cpup_wh(a->dentry, a->bdst, a->len, a->file); ++} ++ ++int au_sio_cpup_wh(struct dentry *dentry, aufs_bindex_t bdst, loff_t len, ++ struct file *file) ++{ ++ int err, wkq_err; ++ struct dentry *parent, *h_orph, *h_parent, *h_dentry; ++ struct inode *dir, *h_dir, *h_tmpdir, *h_inode; ++ struct au_wbr *wbr; ++ ++ parent = dget_parent(dentry); ++ dir = parent->d_inode; ++ h_orph = NULL; ++ h_parent = NULL; ++ h_dir = au_igrab(au_h_iptr(dir, bdst)); ++ h_tmpdir = h_dir; ++ if (!h_dir->i_nlink) { ++ wbr = au_sbr(dentry->d_sb, bdst)->br_wbr; ++ h_orph = wbr->wbr_orph; ++ ++ h_parent = dget(au_h_dptr(parent, bdst)); ++ au_set_h_dptr(parent, bdst, dget(h_orph)); ++ h_tmpdir = h_orph->d_inode; ++ au_set_h_iptr(dir, bdst, au_igrab(h_tmpdir), /*flags*/0); ++ ++ /* this temporary unlock is safe */ ++ if (file) ++ h_dentry = au_hf_top(file)->f_dentry; ++ else ++ h_dentry = au_h_dptr(dentry, au_dbstart(dentry)); ++ h_inode = h_dentry->d_inode; ++ IMustLock(h_inode); ++ mutex_unlock(&h_inode->i_mutex); ++ mutex_lock_nested(&h_tmpdir->i_mutex, AuLsc_I_PARENT3); ++ mutex_lock_nested(&h_inode->i_mutex, AuLsc_I_CHILD); ++ /* todo: au_h_open_pre()? */ ++ } ++ ++ if (!au_test_h_perm_sio(h_tmpdir, MAY_EXEC | MAY_WRITE)) ++ err = au_cpup_wh(dentry, bdst, len, file); ++ else { ++ struct au_cpup_wh_args args = { ++ .errp = &err, ++ .dentry = dentry, ++ .bdst = bdst, ++ .len = len, ++ .file = file ++ }; ++ wkq_err = au_wkq_wait(au_call_cpup_wh, &args); ++ if (unlikely(wkq_err)) ++ err = wkq_err; ++ } ++ ++ if (h_orph) { ++ mutex_unlock(&h_tmpdir->i_mutex); ++ /* todo: au_h_open_post()? */ ++ au_set_h_iptr(dir, bdst, au_igrab(h_dir), /*flags*/0); ++ au_set_h_dptr(parent, bdst, h_parent); ++ } ++ iput(h_dir); ++ dput(parent); ++ ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* ++ * generic routine for both of copy-up and copy-down. ++ */ ++/* cf. revalidate function in file.c */ ++int au_cp_dirs(struct dentry *dentry, aufs_bindex_t bdst, ++ int (*cp)(struct dentry *dentry, aufs_bindex_t bdst, ++ struct dentry *h_parent, void *arg), ++ void *arg) ++{ ++ int err; ++ struct au_pin pin; ++ struct dentry *d, *parent, *h_parent, *real_parent; ++ ++ err = 0; ++ parent = dget_parent(dentry); ++ if (IS_ROOT(parent)) ++ goto out; ++ ++ au_pin_init(&pin, dentry, bdst, AuLsc_DI_PARENT2, AuLsc_I_PARENT2, ++ au_opt_udba(dentry->d_sb), AuPin_MNT_WRITE); ++ ++ /* do not use au_dpage */ ++ real_parent = parent; ++ while (1) { ++ dput(parent); ++ parent = dget_parent(dentry); ++ h_parent = au_h_dptr(parent, bdst); ++ if (h_parent) ++ goto out; /* success */ ++ ++ /* find top dir which is necessary to cpup */ ++ do { ++ d = parent; ++ dput(parent); ++ parent = dget_parent(d); ++ di_read_lock_parent3(parent, !AuLock_IR); ++ h_parent = au_h_dptr(parent, bdst); ++ di_read_unlock(parent, !AuLock_IR); ++ } while (!h_parent); ++ ++ if (d != real_parent) ++ di_write_lock_child3(d); ++ ++ /* somebody else might create while we were sleeping */ ++ if (!au_h_dptr(d, bdst) || !au_h_dptr(d, bdst)->d_inode) { ++ if (au_h_dptr(d, bdst)) ++ au_update_dbstart(d); ++ ++ au_pin_set_dentry(&pin, d); ++ err = au_do_pin(&pin); ++ if (!err) { ++ err = cp(d, bdst, h_parent, arg); ++ au_unpin(&pin); ++ } ++ } ++ ++ if (d != real_parent) ++ di_write_unlock(d); ++ if (unlikely(err)) ++ break; ++ } ++ ++out: ++ dput(parent); ++ return err; ++} ++ ++static int au_cpup_dir(struct dentry *dentry, aufs_bindex_t bdst, ++ struct dentry *h_parent __maybe_unused , ++ void *arg __maybe_unused) ++{ ++ return au_sio_cpup_simple(dentry, bdst, -1, AuCpup_DTIME); ++} ++ ++int au_cpup_dirs(struct dentry *dentry, aufs_bindex_t bdst) ++{ ++ return au_cp_dirs(dentry, bdst, au_cpup_dir, NULL); ++} ++ ++int au_test_and_cpup_dirs(struct dentry *dentry, aufs_bindex_t bdst) ++{ ++ int err; ++ struct dentry *parent; ++ struct inode *dir; ++ ++ parent = dget_parent(dentry); ++ dir = parent->d_inode; ++ err = 0; ++ if (au_h_iptr(dir, bdst)) ++ goto out; ++ ++ di_read_unlock(parent, AuLock_IR); ++ di_write_lock_parent(parent); ++ /* someone else might change our inode while we were sleeping */ ++ if (!au_h_iptr(dir, bdst)) ++ err = au_cpup_dirs(dentry, bdst); ++ di_downgrade_lock(parent, AuLock_IR); ++ ++out: ++ dput(parent); ++ return err; ++} +diff -urN a/fs/aufs/cpup.h b/fs/aufs/cpup.h +--- a/fs/aufs/cpup.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/cpup.h 2011-03-06 23:28:02.620413138 +0000 +@@ -0,0 +1,83 @@ ++/* ++ * Copyright (C) 2005-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * copy-up/down functions ++ */ ++ ++#ifndef __AUFS_CPUP_H__ ++#define __AUFS_CPUP_H__ ++ ++#ifdef __KERNEL__ ++ ++#include ++#include ++#include ++ ++struct inode; ++struct file; ++ ++void au_cpup_attr_flags(struct inode *dst, struct inode *src); ++void au_cpup_attr_timesizes(struct inode *inode); ++void au_cpup_attr_nlink(struct inode *inode, int force); ++void au_cpup_attr_changeable(struct inode *inode); ++void au_cpup_igen(struct inode *inode, struct inode *h_inode); ++void au_cpup_attr_all(struct inode *inode, int force); ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* cpup flags */ ++#define AuCpup_DTIME 1 /* do dtime_store/revert */ ++#define AuCpup_KEEPLINO (1 << 1) /* do not clear the lower xino, ++ for link(2) */ ++#define au_ftest_cpup(flags, name) ((flags) & AuCpup_##name) ++#define au_fset_cpup(flags, name) \ ++ do { (flags) |= AuCpup_##name; } while (0) ++#define au_fclr_cpup(flags, name) \ ++ do { (flags) &= ~AuCpup_##name; } while (0) ++ ++int au_copy_file(struct file *dst, struct file *src, loff_t len); ++int au_sio_cpup_single(struct dentry *dentry, aufs_bindex_t bdst, ++ aufs_bindex_t bsrc, loff_t len, unsigned int flags, ++ struct dentry *dst_parent); ++int au_sio_cpup_simple(struct dentry *dentry, aufs_bindex_t bdst, loff_t len, ++ unsigned int flags); ++int au_sio_cpup_wh(struct dentry *dentry, aufs_bindex_t bdst, loff_t len, ++ struct file *file); ++ ++int au_cp_dirs(struct dentry *dentry, aufs_bindex_t bdst, ++ int (*cp)(struct dentry *dentry, aufs_bindex_t bdst, ++ struct dentry *h_parent, void *arg), ++ void *arg); ++int au_cpup_dirs(struct dentry *dentry, aufs_bindex_t bdst); ++int au_test_and_cpup_dirs(struct dentry *dentry, aufs_bindex_t bdst); ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* keep timestamps when copyup */ ++struct au_dtime { ++ struct dentry *dt_dentry; ++ struct path dt_h_path; ++ struct timespec dt_atime, dt_mtime; ++}; ++void au_dtime_store(struct au_dtime *dt, struct dentry *dentry, ++ struct path *h_path); ++void au_dtime_revert(struct au_dtime *dt); ++ ++#endif /* __KERNEL__ */ ++#endif /* __AUFS_CPUP_H__ */ +diff -urN a/fs/aufs/dbgaufs.c b/fs/aufs/dbgaufs.c +--- a/fs/aufs/dbgaufs.c 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/dbgaufs.c 2011-03-06 23:28:02.620413138 +0000 +@@ -0,0 +1,334 @@ ++/* ++ * Copyright (C) 2005-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * debugfs interface ++ */ ++ ++#include ++#include "aufs.h" ++ ++#ifndef CONFIG_SYSFS ++#error DEBUG_FS depends upon SYSFS ++#endif ++ ++static struct dentry *dbgaufs; ++static const mode_t dbgaufs_mode = S_IRUSR | S_IRGRP | S_IROTH; ++ ++/* 20 is max digits length of ulong 64 */ ++struct dbgaufs_arg { ++ int n; ++ char a[20 * 4]; ++}; ++ ++/* ++ * common function for all XINO files ++ */ ++static int dbgaufs_xi_release(struct inode *inode __maybe_unused, ++ struct file *file) ++{ ++ kfree(file->private_data); ++ return 0; ++} ++ ++static int dbgaufs_xi_open(struct file *xf, struct file *file, int do_fcnt) ++{ ++ int err; ++ struct kstat st; ++ struct dbgaufs_arg *p; ++ ++ err = -ENOMEM; ++ p = kmalloc(sizeof(*p), GFP_NOFS); ++ if (unlikely(!p)) ++ goto out; ++ ++ err = 0; ++ p->n = 0; ++ file->private_data = p; ++ if (!xf) ++ goto out; ++ ++ err = vfs_getattr(xf->f_vfsmnt, xf->f_dentry, &st); ++ if (!err) { ++ if (do_fcnt) ++ p->n = snprintf ++ (p->a, sizeof(p->a), "%ld, %llux%lu %lld\n", ++ (long)file_count(xf), st.blocks, st.blksize, ++ (long long)st.size); ++ else ++ p->n = snprintf(p->a, sizeof(p->a), "%llux%lu %lld\n", ++ st.blocks, st.blksize, ++ (long long)st.size); ++ AuDebugOn(p->n >= sizeof(p->a)); ++ } else { ++ p->n = snprintf(p->a, sizeof(p->a), "err %d\n", err); ++ err = 0; ++ } ++ ++out: ++ return err; ++ ++} ++ ++static ssize_t dbgaufs_xi_read(struct file *file, char __user *buf, ++ size_t count, loff_t *ppos) ++{ ++ struct dbgaufs_arg *p; ++ ++ p = file->private_data; ++ return simple_read_from_buffer(buf, count, ppos, p->a, p->n); ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++static int dbgaufs_xib_open(struct inode *inode, struct file *file) ++{ ++ int err; ++ struct au_sbinfo *sbinfo; ++ struct super_block *sb; ++ ++ sbinfo = inode->i_private; ++ sb = sbinfo->si_sb; ++ si_noflush_read_lock(sb); ++ err = dbgaufs_xi_open(sbinfo->si_xib, file, /*do_fcnt*/0); ++ si_read_unlock(sb); ++ return err; ++} ++ ++static const struct file_operations dbgaufs_xib_fop = { ++ .owner = THIS_MODULE, ++ .open = dbgaufs_xib_open, ++ .release = dbgaufs_xi_release, ++ .read = dbgaufs_xi_read ++}; ++ ++/* ---------------------------------------------------------------------- */ ++ ++#define DbgaufsXi_PREFIX "xi" ++ ++static int dbgaufs_xino_open(struct inode *inode, struct file *file) ++{ ++ int err; ++ long l; ++ struct au_sbinfo *sbinfo; ++ struct super_block *sb; ++ struct file *xf; ++ struct qstr *name; ++ ++ err = -ENOENT; ++ xf = NULL; ++ name = &file->f_dentry->d_name; ++ if (unlikely(name->len < sizeof(DbgaufsXi_PREFIX) ++ || memcmp(name->name, DbgaufsXi_PREFIX, ++ sizeof(DbgaufsXi_PREFIX) - 1))) ++ goto out; ++ err = strict_strtol(name->name + sizeof(DbgaufsXi_PREFIX) - 1, 10, &l); ++ if (unlikely(err)) ++ goto out; ++ ++ sbinfo = inode->i_private; ++ sb = sbinfo->si_sb; ++ si_noflush_read_lock(sb); ++ if (l <= au_sbend(sb)) { ++ xf = au_sbr(sb, (aufs_bindex_t)l)->br_xino.xi_file; ++ err = dbgaufs_xi_open(xf, file, /*do_fcnt*/1); ++ } else ++ err = -ENOENT; ++ si_read_unlock(sb); ++ ++out: ++ return err; ++} ++ ++static const struct file_operations dbgaufs_xino_fop = { ++ .owner = THIS_MODULE, ++ .open = dbgaufs_xino_open, ++ .release = dbgaufs_xi_release, ++ .read = dbgaufs_xi_read ++}; ++ ++void dbgaufs_brs_del(struct super_block *sb, aufs_bindex_t bindex) ++{ ++ aufs_bindex_t bend; ++ struct au_branch *br; ++ struct au_xino_file *xi; ++ ++ if (!au_sbi(sb)->si_dbgaufs) ++ return; ++ ++ bend = au_sbend(sb); ++ for (; bindex <= bend; bindex++) { ++ br = au_sbr(sb, bindex); ++ xi = &br->br_xino; ++ if (xi->xi_dbgaufs) { ++ debugfs_remove(xi->xi_dbgaufs); ++ xi->xi_dbgaufs = NULL; ++ } ++ } ++} ++ ++void dbgaufs_brs_add(struct super_block *sb, aufs_bindex_t bindex) ++{ ++ struct au_sbinfo *sbinfo; ++ struct dentry *parent; ++ struct au_branch *br; ++ struct au_xino_file *xi; ++ aufs_bindex_t bend; ++ char name[sizeof(DbgaufsXi_PREFIX) + 5]; /* "xi" bindex NULL */ ++ ++ sbinfo = au_sbi(sb); ++ parent = sbinfo->si_dbgaufs; ++ if (!parent) ++ return; ++ ++ bend = au_sbend(sb); ++ for (; bindex <= bend; bindex++) { ++ snprintf(name, sizeof(name), DbgaufsXi_PREFIX "%d", bindex); ++ br = au_sbr(sb, bindex); ++ xi = &br->br_xino; ++ AuDebugOn(xi->xi_dbgaufs); ++ xi->xi_dbgaufs = debugfs_create_file(name, dbgaufs_mode, parent, ++ sbinfo, &dbgaufs_xino_fop); ++ /* ignore an error */ ++ if (unlikely(!xi->xi_dbgaufs)) ++ AuWarn1("failed %s under debugfs\n", name); ++ } ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++#ifdef CONFIG_AUFS_EXPORT ++static int dbgaufs_xigen_open(struct inode *inode, struct file *file) ++{ ++ int err; ++ struct au_sbinfo *sbinfo; ++ struct super_block *sb; ++ ++ sbinfo = inode->i_private; ++ sb = sbinfo->si_sb; ++ si_noflush_read_lock(sb); ++ err = dbgaufs_xi_open(sbinfo->si_xigen, file, /*do_fcnt*/0); ++ si_read_unlock(sb); ++ return err; ++} ++ ++static const struct file_operations dbgaufs_xigen_fop = { ++ .owner = THIS_MODULE, ++ .open = dbgaufs_xigen_open, ++ .release = dbgaufs_xi_release, ++ .read = dbgaufs_xi_read ++}; ++ ++static int dbgaufs_xigen_init(struct au_sbinfo *sbinfo) ++{ ++ int err; ++ ++ /* ++ * This function is a dynamic '__init' fucntion actually, ++ * so the tiny check for si_rwsem is unnecessary. ++ */ ++ /* AuRwMustWriteLock(&sbinfo->si_rwsem); */ ++ ++ err = -EIO; ++ sbinfo->si_dbgaufs_xigen = debugfs_create_file ++ ("xigen", dbgaufs_mode, sbinfo->si_dbgaufs, sbinfo, ++ &dbgaufs_xigen_fop); ++ if (sbinfo->si_dbgaufs_xigen) ++ err = 0; ++ ++ return err; ++} ++#else ++static int dbgaufs_xigen_init(struct au_sbinfo *sbinfo) ++{ ++ return 0; ++} ++#endif /* CONFIG_AUFS_EXPORT */ ++ ++/* ---------------------------------------------------------------------- */ ++ ++void dbgaufs_si_fin(struct au_sbinfo *sbinfo) ++{ ++ /* ++ * This function is a dynamic '__init' fucntion actually, ++ * so the tiny check for si_rwsem is unnecessary. ++ */ ++ /* AuRwMustWriteLock(&sbinfo->si_rwsem); */ ++ ++ debugfs_remove_recursive(sbinfo->si_dbgaufs); ++ sbinfo->si_dbgaufs = NULL; ++ kobject_put(&sbinfo->si_kobj); ++} ++ ++int dbgaufs_si_init(struct au_sbinfo *sbinfo) ++{ ++ int err; ++ char name[SysaufsSiNameLen]; ++ ++ /* ++ * This function is a dynamic '__init' fucntion actually, ++ * so the tiny check for si_rwsem is unnecessary. ++ */ ++ /* AuRwMustWriteLock(&sbinfo->si_rwsem); */ ++ ++ err = -ENOENT; ++ if (!dbgaufs) { ++ AuErr1("/debug/aufs is uninitialized\n"); ++ goto out; ++ } ++ ++ err = -EIO; ++ sysaufs_name(sbinfo, name); ++ sbinfo->si_dbgaufs = debugfs_create_dir(name, dbgaufs); ++ if (unlikely(!sbinfo->si_dbgaufs)) ++ goto out; ++ kobject_get(&sbinfo->si_kobj); ++ ++ sbinfo->si_dbgaufs_xib = debugfs_create_file ++ ("xib", dbgaufs_mode, sbinfo->si_dbgaufs, sbinfo, ++ &dbgaufs_xib_fop); ++ if (unlikely(!sbinfo->si_dbgaufs_xib)) ++ goto out_dir; ++ ++ err = dbgaufs_xigen_init(sbinfo); ++ if (!err) ++ goto out; /* success */ ++ ++out_dir: ++ dbgaufs_si_fin(sbinfo); ++out: ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++void dbgaufs_fin(void) ++{ ++ debugfs_remove(dbgaufs); ++} ++ ++int __init dbgaufs_init(void) ++{ ++ int err; ++ ++ err = -EIO; ++ dbgaufs = debugfs_create_dir(AUFS_NAME, NULL); ++ if (dbgaufs) ++ err = 0; ++ return err; ++} +diff -urN a/fs/aufs/dbgaufs.h b/fs/aufs/dbgaufs.h +--- a/fs/aufs/dbgaufs.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/dbgaufs.h 2011-03-06 23:28:02.620413138 +0000 +@@ -0,0 +1,52 @@ ++/* ++ * Copyright (C) 2005-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * debugfs interface ++ */ ++ ++#ifndef __DBGAUFS_H__ ++#define __DBGAUFS_H__ ++ ++#ifdef __KERNEL__ ++ ++#include ++#include ++ ++struct super_block; ++struct au_sbinfo; ++ ++#ifdef CONFIG_DEBUG_FS ++/* dbgaufs.c */ ++void dbgaufs_brs_del(struct super_block *sb, aufs_bindex_t bindex); ++void dbgaufs_brs_add(struct super_block *sb, aufs_bindex_t bindex); ++void dbgaufs_si_fin(struct au_sbinfo *sbinfo); ++int dbgaufs_si_init(struct au_sbinfo *sbinfo); ++void dbgaufs_fin(void); ++int __init dbgaufs_init(void); ++#else ++AuStubVoid(dbgaufs_brs_del, struct super_block *sb, aufs_bindex_t bindex) ++AuStubVoid(dbgaufs_brs_add, struct super_block *sb, aufs_bindex_t bindex) ++AuStubVoid(dbgaufs_si_fin, struct au_sbinfo *sbinfo) ++AuStubInt0(dbgaufs_si_init, struct au_sbinfo *sbinfo) ++AuStubVoid(dbgaufs_fin, void) ++AuStubInt0(__init dbgaufs_init, void) ++#endif /* CONFIG_DEBUG_FS */ ++ ++#endif /* __KERNEL__ */ ++#endif /* __DBGAUFS_H__ */ +diff -urN a/fs/aufs/dcsub.c b/fs/aufs/dcsub.c +--- a/fs/aufs/dcsub.c 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/dcsub.c 2011-03-06 23:28:02.620413138 +0000 +@@ -0,0 +1,243 @@ ++/* ++ * Copyright (C) 2005-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * sub-routines for dentry cache ++ */ ++ ++#include "aufs.h" ++ ++static void au_dpage_free(struct au_dpage *dpage) ++{ ++ int i; ++ struct dentry **p; ++ ++ p = dpage->dentries; ++ for (i = 0; i < dpage->ndentry; i++) ++ dput(*p++); ++ free_page((unsigned long)dpage->dentries); ++} ++ ++int au_dpages_init(struct au_dcsub_pages *dpages, gfp_t gfp) ++{ ++ int err; ++ void *p; ++ ++ err = -ENOMEM; ++ dpages->dpages = kmalloc(sizeof(*dpages->dpages), gfp); ++ if (unlikely(!dpages->dpages)) ++ goto out; ++ ++ p = (void *)__get_free_page(gfp); ++ if (unlikely(!p)) ++ goto out_dpages; ++ ++ dpages->dpages[0].ndentry = 0; ++ dpages->dpages[0].dentries = p; ++ dpages->ndpage = 1; ++ return 0; /* success */ ++ ++out_dpages: ++ kfree(dpages->dpages); ++out: ++ return err; ++} ++ ++void au_dpages_free(struct au_dcsub_pages *dpages) ++{ ++ int i; ++ struct au_dpage *p; ++ ++ p = dpages->dpages; ++ for (i = 0; i < dpages->ndpage; i++) ++ au_dpage_free(p++); ++ kfree(dpages->dpages); ++} ++ ++static int au_dpages_append(struct au_dcsub_pages *dpages, ++ struct dentry *dentry, gfp_t gfp) ++{ ++ int err, sz; ++ struct au_dpage *dpage; ++ void *p; ++ ++ dpage = dpages->dpages + dpages->ndpage - 1; ++ sz = PAGE_SIZE / sizeof(dentry); ++ if (unlikely(dpage->ndentry >= sz)) { ++ AuLabel(new dpage); ++ err = -ENOMEM; ++ sz = dpages->ndpage * sizeof(*dpages->dpages); ++ p = au_kzrealloc(dpages->dpages, sz, ++ sz + sizeof(*dpages->dpages), gfp); ++ if (unlikely(!p)) ++ goto out; ++ ++ dpages->dpages = p; ++ dpage = dpages->dpages + dpages->ndpage; ++ p = (void *)__get_free_page(gfp); ++ if (unlikely(!p)) ++ goto out; ++ ++ dpage->ndentry = 0; ++ dpage->dentries = p; ++ dpages->ndpage++; ++ } ++ ++ AuDebugOn(!dentry->d_count); ++ dpage->dentries[dpage->ndentry++] = dget_dlock(dentry); ++ return 0; /* success */ ++ ++out: ++ return err; ++} ++ ++int au_dcsub_pages(struct au_dcsub_pages *dpages, struct dentry *root, ++ au_dpages_test test, void *arg) ++{ ++ int err; ++ struct dentry *this_parent; ++ struct list_head *next; ++ struct super_block *sb = root->d_sb; ++ ++ err = 0; ++ write_seqlock(&rename_lock); ++ this_parent = root; ++ spin_lock(&this_parent->d_lock); ++repeat: ++ next = this_parent->d_subdirs.next; ++resume: ++ if (this_parent->d_sb == sb ++ && !IS_ROOT(this_parent) ++ && au_di(this_parent) ++ && this_parent->d_count ++ && (!test || test(this_parent, arg))) { ++ err = au_dpages_append(dpages, this_parent, GFP_ATOMIC); ++ if (unlikely(err)) ++ goto out; ++ } ++ ++ while (next != &this_parent->d_subdirs) { ++ struct list_head *tmp = next; ++ struct dentry *dentry = list_entry(tmp, struct dentry, ++ d_u.d_child); ++ ++ next = tmp->next; ++ spin_lock_nested(&dentry->d_lock, DENTRY_D_LOCK_NESTED); ++ if (dentry->d_count) { ++ if (!list_empty(&dentry->d_subdirs)) { ++ spin_unlock(&this_parent->d_lock); ++ spin_release(&dentry->d_lock.dep_map, 1, ++ _RET_IP_); ++ this_parent = dentry; ++ spin_acquire(&this_parent->d_lock.dep_map, 0, 1, ++ _RET_IP_); ++ goto repeat; ++ } ++ if (dentry->d_sb == sb ++ && au_di(dentry) ++ && (!test || test(dentry, arg))) ++ err = au_dpages_append(dpages, dentry, ++ GFP_ATOMIC); ++ } ++ spin_unlock(&dentry->d_lock); ++ if (unlikely(err)) ++ goto out; ++ } ++ ++ if (this_parent != root) { ++ struct dentry *tmp; ++ struct dentry *child; ++ ++ tmp = this_parent->d_parent; ++ rcu_read_lock(); ++ spin_unlock(&this_parent->d_lock); ++ child = this_parent; ++ this_parent = tmp; ++ spin_lock(&this_parent->d_lock); ++ rcu_read_unlock(); ++ next = child->d_u.d_child.next; ++ goto resume; ++ } ++ ++out: ++ spin_unlock(&this_parent->d_lock); ++ write_sequnlock(&rename_lock); ++ return err; ++} ++ ++int au_dcsub_pages_rev(struct au_dcsub_pages *dpages, struct dentry *dentry, ++ int do_include, au_dpages_test test, void *arg) ++{ ++ int err; ++ ++ err = 0; ++ write_seqlock(&rename_lock); ++ spin_lock(&dentry->d_lock); ++ if (do_include ++ && dentry->d_count ++ && (!test || test(dentry, arg))) ++ err = au_dpages_append(dpages, dentry, GFP_ATOMIC); ++ spin_unlock(&dentry->d_lock); ++ if (unlikely(err)) ++ goto out; ++ ++ /* ++ * vfsmount_lock is unnecessary since this is a traverse in a single ++ * mount ++ */ ++ while (!IS_ROOT(dentry)) { ++ dentry = dentry->d_parent; /* rename_lock is locked */ ++ spin_lock(&dentry->d_lock); ++ if (dentry->d_count ++ && (!test || test(dentry, arg))) ++ err = au_dpages_append(dpages, dentry, GFP_ATOMIC); ++ spin_unlock(&dentry->d_lock); ++ if (unlikely(err)) ++ break; ++ } ++ ++out: ++ write_sequnlock(&rename_lock); ++ return err; ++} ++ ++static inline int au_dcsub_dpages_aufs(struct dentry *dentry, void *arg) ++{ ++ return au_di(dentry) && dentry->d_sb == arg; ++} ++ ++int au_dcsub_pages_rev_aufs(struct au_dcsub_pages *dpages, ++ struct dentry *dentry, int do_include) ++{ ++ return au_dcsub_pages_rev(dpages, dentry, do_include, ++ au_dcsub_dpages_aufs, dentry->d_sb); ++} ++ ++int au_test_subdir(struct dentry *d1, struct dentry *d2) ++{ ++ struct path path[2] = { ++ { ++ .dentry = d1 ++ }, ++ { ++ .dentry = d2 ++ } ++ }; ++ ++ return path_is_under(path + 0, path + 1); ++} +diff -urN a/fs/aufs/dcsub.h b/fs/aufs/dcsub.h +--- a/fs/aufs/dcsub.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/dcsub.h 2011-03-06 23:28:02.620413138 +0000 +@@ -0,0 +1,95 @@ ++/* ++ * Copyright (C) 2005-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * sub-routines for dentry cache ++ */ ++ ++#ifndef __AUFS_DCSUB_H__ ++#define __AUFS_DCSUB_H__ ++ ++#ifdef __KERNEL__ ++ ++#include ++#include ++#include ++ ++struct dentry; ++ ++struct au_dpage { ++ int ndentry; ++ struct dentry **dentries; ++}; ++ ++struct au_dcsub_pages { ++ int ndpage; ++ struct au_dpage *dpages; ++}; ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* dcsub.c */ ++int au_dpages_init(struct au_dcsub_pages *dpages, gfp_t gfp); ++void au_dpages_free(struct au_dcsub_pages *dpages); ++typedef int (*au_dpages_test)(struct dentry *dentry, void *arg); ++int au_dcsub_pages(struct au_dcsub_pages *dpages, struct dentry *root, ++ au_dpages_test test, void *arg); ++int au_dcsub_pages_rev(struct au_dcsub_pages *dpages, struct dentry *dentry, ++ int do_include, au_dpages_test test, void *arg); ++int au_dcsub_pages_rev_aufs(struct au_dcsub_pages *dpages, ++ struct dentry *dentry, int do_include); ++int au_test_subdir(struct dentry *d1, struct dentry *d2); ++ ++/* ---------------------------------------------------------------------- */ ++ ++static inline int au_d_hashed_positive(struct dentry *d) ++{ ++ int err; ++ struct inode *inode = d->d_inode; ++ err = 0; ++ if (unlikely(d_unhashed(d) || !inode || !inode->i_nlink)) ++ err = -ENOENT; ++ return err; ++} ++ ++static inline int au_d_alive(struct dentry *d) ++{ ++ int err; ++ struct inode *inode; ++ err = 0; ++ if (!IS_ROOT(d)) ++ err = au_d_hashed_positive(d); ++ else { ++ inode = d->d_inode; ++ if (unlikely(d_unlinked(d) || !inode || !inode->i_nlink)) ++ err = -ENOENT; ++ } ++ return err; ++} ++ ++static inline int au_alive_dir(struct dentry *d) ++{ ++ int err; ++ err = au_d_alive(d); ++ if (unlikely(err || IS_DEADDIR(d->d_inode))) ++ err = -ENOENT; ++ return err; ++} ++ ++#endif /* __KERNEL__ */ ++#endif /* __AUFS_DCSUB_H__ */ +diff -urN a/fs/aufs/debug.c b/fs/aufs/debug.c +--- a/fs/aufs/debug.c 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/debug.c 2011-03-06 23:28:02.616413258 +0000 +@@ -0,0 +1,469 @@ ++/* ++ * Copyright (C) 2005-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * debug print functions ++ */ ++ ++#include ++#include ++#include "aufs.h" ++ ++int aufs_debug; ++MODULE_PARM_DESC(debug, "debug print"); ++module_param_named(debug, aufs_debug, int, S_IRUGO | S_IWUSR | S_IWGRP); ++ ++char *au_plevel = KERN_DEBUG; ++#define dpri(fmt, ...) do { \ ++ if ((au_plevel \ ++ && strcmp(au_plevel, KERN_DEBUG)) \ ++ || au_debug_test()) \ ++ printk("%s" fmt, au_plevel, ##__VA_ARGS__); \ ++} while (0) ++ ++/* ---------------------------------------------------------------------- */ ++ ++void au_dpri_whlist(struct au_nhash *whlist) ++{ ++ unsigned long ul, n; ++ struct hlist_head *head; ++ struct au_vdir_wh *tpos; ++ struct hlist_node *pos; ++ ++ n = whlist->nh_num; ++ head = whlist->nh_head; ++ for (ul = 0; ul < n; ul++) { ++ hlist_for_each_entry(tpos, pos, head, wh_hash) ++ dpri("b%d, %.*s, %d\n", ++ tpos->wh_bindex, ++ tpos->wh_str.len, tpos->wh_str.name, ++ tpos->wh_str.len); ++ head++; ++ } ++} ++ ++void au_dpri_vdir(struct au_vdir *vdir) ++{ ++ unsigned long ul; ++ union au_vdir_deblk_p p; ++ unsigned char *o; ++ ++ if (!vdir || IS_ERR(vdir)) { ++ dpri("err %ld\n", PTR_ERR(vdir)); ++ return; ++ } ++ ++ dpri("deblk %u, nblk %lu, deblk %p, last{%lu, %p}, ver %lu\n", ++ vdir->vd_deblk_sz, vdir->vd_nblk, vdir->vd_deblk, ++ vdir->vd_last.ul, vdir->vd_last.p.deblk, vdir->vd_version); ++ for (ul = 0; ul < vdir->vd_nblk; ul++) { ++ p.deblk = vdir->vd_deblk[ul]; ++ o = p.deblk; ++ dpri("[%lu]: %p\n", ul, o); ++ } ++} ++ ++static int do_pri_inode(aufs_bindex_t bindex, struct inode *inode, ++ struct dentry *wh) ++{ ++ char *n = NULL; ++ int l = 0; ++ ++ if (!inode || IS_ERR(inode)) { ++ dpri("i%d: err %ld\n", bindex, PTR_ERR(inode)); ++ return -1; ++ } ++ ++ /* the type of i_blocks depends upon CONFIG_LSF */ ++ BUILD_BUG_ON(sizeof(inode->i_blocks) != sizeof(unsigned long) ++ && sizeof(inode->i_blocks) != sizeof(u64)); ++ if (wh) { ++ n = (void *)wh->d_name.name; ++ l = wh->d_name.len; ++ } ++ ++ dpri("i%d: i%lu, %s, cnt %d, nl %u, 0%o, sz %llu, blk %llu," ++ " ct %lld, np %lu, st 0x%lx, f 0x%x, v %llu, g %x%s%.*s\n", ++ bindex, ++ inode->i_ino, inode->i_sb ? au_sbtype(inode->i_sb) : "??", ++ atomic_read(&inode->i_count), inode->i_nlink, inode->i_mode, ++ i_size_read(inode), (unsigned long long)inode->i_blocks, ++ (long long)timespec_to_ns(&inode->i_ctime) & 0x0ffff, ++ inode->i_mapping ? inode->i_mapping->nrpages : 0, ++ inode->i_state, inode->i_flags, inode->i_version, ++ inode->i_generation, ++ l ? ", wh " : "", l, n); ++ return 0; ++} ++ ++void au_dpri_inode(struct inode *inode) ++{ ++ struct au_iinfo *iinfo; ++ aufs_bindex_t bindex; ++ int err; ++ ++ err = do_pri_inode(-1, inode, NULL); ++ if (err || !au_test_aufs(inode->i_sb)) ++ return; ++ ++ iinfo = au_ii(inode); ++ if (!iinfo) ++ return; ++ dpri("i-1: bstart %d, bend %d, gen %d\n", ++ iinfo->ii_bstart, iinfo->ii_bend, au_iigen(inode)); ++ if (iinfo->ii_bstart < 0) ++ return; ++ for (bindex = iinfo->ii_bstart; bindex <= iinfo->ii_bend; bindex++) ++ do_pri_inode(bindex, iinfo->ii_hinode[0 + bindex].hi_inode, ++ iinfo->ii_hinode[0 + bindex].hi_whdentry); ++} ++ ++static int do_pri_dentry(aufs_bindex_t bindex, struct dentry *dentry) ++{ ++ struct dentry *wh = NULL; ++ ++ if (!dentry || IS_ERR(dentry)) { ++ dpri("d%d: err %ld\n", bindex, PTR_ERR(dentry)); ++ return -1; ++ } ++ /* do not call dget_parent() here */ ++ /* note: access d_xxx without d_lock */ ++ dpri("d%d: %.*s?/%.*s, %s, cnt %d, flags 0x%x\n", ++ bindex, ++ AuDLNPair(dentry->d_parent), AuDLNPair(dentry), ++ dentry->d_sb ? au_sbtype(dentry->d_sb) : "??", ++ dentry->d_count, dentry->d_flags); ++ if (bindex >= 0 && dentry->d_inode && au_test_aufs(dentry->d_sb)) { ++ struct au_iinfo *iinfo = au_ii(dentry->d_inode); ++ if (iinfo) ++ wh = iinfo->ii_hinode[0 + bindex].hi_whdentry; ++ } ++ do_pri_inode(bindex, dentry->d_inode, wh); ++ return 0; ++} ++ ++void au_dpri_dentry(struct dentry *dentry) ++{ ++ struct au_dinfo *dinfo; ++ aufs_bindex_t bindex; ++ int err; ++ struct au_hdentry *hdp; ++ ++ err = do_pri_dentry(-1, dentry); ++ if (err || !au_test_aufs(dentry->d_sb)) ++ return; ++ ++ dinfo = au_di(dentry); ++ if (!dinfo) ++ return; ++ dpri("d-1: bstart %d, bend %d, bwh %d, bdiropq %d, gen %d\n", ++ dinfo->di_bstart, dinfo->di_bend, ++ dinfo->di_bwh, dinfo->di_bdiropq, au_digen(dentry)); ++ if (dinfo->di_bstart < 0) ++ return; ++ hdp = dinfo->di_hdentry; ++ for (bindex = dinfo->di_bstart; bindex <= dinfo->di_bend; bindex++) ++ do_pri_dentry(bindex, hdp[0 + bindex].hd_dentry); ++} ++ ++static int do_pri_file(aufs_bindex_t bindex, struct file *file) ++{ ++ char a[32]; ++ ++ if (!file || IS_ERR(file)) { ++ dpri("f%d: err %ld\n", bindex, PTR_ERR(file)); ++ return -1; ++ } ++ a[0] = 0; ++ if (bindex < 0 ++ && file->f_dentry ++ && au_test_aufs(file->f_dentry->d_sb) ++ && au_fi(file)) ++ snprintf(a, sizeof(a), ", gen %d, mmapped %d", ++ au_figen(file), !!au_fi(file)->fi_hvmop); ++ dpri("f%d: mode 0x%x, flags 0%o, cnt %ld, v %llu, pos %llu%s\n", ++ bindex, file->f_mode, file->f_flags, (long)file_count(file), ++ file->f_version, file->f_pos, a); ++ if (file->f_dentry) ++ do_pri_dentry(bindex, file->f_dentry); ++ return 0; ++} ++ ++void au_dpri_file(struct file *file) ++{ ++ struct au_finfo *finfo; ++ struct au_fidir *fidir; ++ struct au_hfile *hfile; ++ aufs_bindex_t bindex; ++ int err; ++ ++ err = do_pri_file(-1, file); ++ if (err || !file->f_dentry || !au_test_aufs(file->f_dentry->d_sb)) ++ return; ++ ++ finfo = au_fi(file); ++ if (!finfo) ++ return; ++ if (finfo->fi_btop < 0) ++ return; ++ fidir = finfo->fi_hdir; ++ if (!fidir) ++ do_pri_file(finfo->fi_btop, finfo->fi_htop.hf_file); ++ else ++ for (bindex = finfo->fi_btop; ++ bindex >= 0 && bindex <= fidir->fd_bbot; ++ bindex++) { ++ hfile = fidir->fd_hfile + bindex; ++ do_pri_file(bindex, hfile ? hfile->hf_file : NULL); ++ } ++} ++ ++static int do_pri_br(aufs_bindex_t bindex, struct au_branch *br) ++{ ++ struct vfsmount *mnt; ++ struct super_block *sb; ++ ++ if (!br || IS_ERR(br)) ++ goto out; ++ mnt = br->br_mnt; ++ if (!mnt || IS_ERR(mnt)) ++ goto out; ++ sb = mnt->mnt_sb; ++ if (!sb || IS_ERR(sb)) ++ goto out; ++ ++ dpri("s%d: {perm 0x%x, cnt %d, wbr %p}, " ++ "%s, dev 0x%02x%02x, flags 0x%lx, cnt %d, active %d, " ++ "xino %d\n", ++ bindex, br->br_perm, atomic_read(&br->br_count), br->br_wbr, ++ au_sbtype(sb), MAJOR(sb->s_dev), MINOR(sb->s_dev), ++ sb->s_flags, sb->s_count, ++ atomic_read(&sb->s_active), !!br->br_xino.xi_file); ++ return 0; ++ ++out: ++ dpri("s%d: err %ld\n", bindex, PTR_ERR(br)); ++ return -1; ++} ++ ++void au_dpri_sb(struct super_block *sb) ++{ ++ struct au_sbinfo *sbinfo; ++ aufs_bindex_t bindex; ++ int err; ++ /* to reuduce stack size */ ++ struct { ++ struct vfsmount mnt; ++ struct au_branch fake; ++ } *a; ++ ++ /* this function can be called from magic sysrq */ ++ a = kzalloc(sizeof(*a), GFP_ATOMIC); ++ if (unlikely(!a)) { ++ dpri("no memory\n"); ++ return; ++ } ++ ++ a->mnt.mnt_sb = sb; ++ a->fake.br_perm = 0; ++ a->fake.br_mnt = &a->mnt; ++ a->fake.br_xino.xi_file = NULL; ++ atomic_set(&a->fake.br_count, 0); ++ smp_mb(); /* atomic_set */ ++ err = do_pri_br(-1, &a->fake); ++ kfree(a); ++ dpri("dev 0x%x\n", sb->s_dev); ++ if (err || !au_test_aufs(sb)) ++ return; ++ ++ sbinfo = au_sbi(sb); ++ if (!sbinfo) ++ return; ++ dpri("nw %d, gen %u, kobj %d\n", ++ atomic_read(&sbinfo->si_nowait.nw_len), sbinfo->si_generation, ++ atomic_read(&sbinfo->si_kobj.kref.refcount)); ++ for (bindex = 0; bindex <= sbinfo->si_bend; bindex++) ++ do_pri_br(bindex, sbinfo->si_branch[0 + bindex]); ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++void au_dbg_sleep_jiffy(int jiffy) ++{ ++ while (jiffy) ++ jiffy = schedule_timeout_uninterruptible(jiffy); ++} ++ ++void au_dbg_iattr(struct iattr *ia) ++{ ++#define AuBit(name) if (ia->ia_valid & ATTR_ ## name) \ ++ dpri(#name "\n") ++ AuBit(MODE); ++ AuBit(UID); ++ AuBit(GID); ++ AuBit(SIZE); ++ AuBit(ATIME); ++ AuBit(MTIME); ++ AuBit(CTIME); ++ AuBit(ATIME_SET); ++ AuBit(MTIME_SET); ++ AuBit(FORCE); ++ AuBit(ATTR_FLAG); ++ AuBit(KILL_SUID); ++ AuBit(KILL_SGID); ++ AuBit(FILE); ++ AuBit(KILL_PRIV); ++ AuBit(OPEN); ++ AuBit(TIMES_SET); ++#undef AuBit ++ dpri("ia_file %p\n", ia->ia_file); ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++void __au_dbg_verify_dinode(struct dentry *dentry, const char *func, int line) ++{ ++ struct inode *h_inode, *inode = dentry->d_inode; ++ struct dentry *h_dentry; ++ aufs_bindex_t bindex, bend, bi; ++ ++ if (!inode /* || au_di(dentry)->di_lsc == AuLsc_DI_TMP */) ++ return; ++ ++ bend = au_dbend(dentry); ++ bi = au_ibend(inode); ++ if (bi < bend) ++ bend = bi; ++ bindex = au_dbstart(dentry); ++ bi = au_ibstart(inode); ++ if (bi > bindex) ++ bindex = bi; ++ ++ for (; bindex <= bend; bindex++) { ++ h_dentry = au_h_dptr(dentry, bindex); ++ if (!h_dentry) ++ continue; ++ h_inode = au_h_iptr(inode, bindex); ++ if (unlikely(h_inode != h_dentry->d_inode)) { ++ int old = au_debug_test(); ++ if (!old) ++ au_debug(1); ++ AuDbg("b%d, %s:%d\n", bindex, func, line); ++ AuDbgDentry(dentry); ++ AuDbgInode(inode); ++ if (!old) ++ au_debug(0); ++ BUG(); ++ } ++ } ++} ++ ++void au_dbg_verify_dir_parent(struct dentry *dentry, unsigned int sigen) ++{ ++ struct dentry *parent; ++ ++ parent = dget_parent(dentry); ++ AuDebugOn(!S_ISDIR(dentry->d_inode->i_mode)); ++ AuDebugOn(IS_ROOT(dentry)); ++ AuDebugOn(au_digen_test(parent, sigen)); ++ dput(parent); ++} ++ ++void au_dbg_verify_nondir_parent(struct dentry *dentry, unsigned int sigen) ++{ ++ struct dentry *parent; ++ struct inode *inode; ++ ++ parent = dget_parent(dentry); ++ inode = dentry->d_inode; ++ AuDebugOn(inode && S_ISDIR(dentry->d_inode->i_mode)); ++ AuDebugOn(au_digen_test(parent, sigen)); ++ dput(parent); ++} ++ ++void au_dbg_verify_gen(struct dentry *parent, unsigned int sigen) ++{ ++ int err, i, j; ++ struct au_dcsub_pages dpages; ++ struct au_dpage *dpage; ++ struct dentry **dentries; ++ ++ err = au_dpages_init(&dpages, GFP_NOFS); ++ AuDebugOn(err); ++ err = au_dcsub_pages_rev_aufs(&dpages, parent, /*do_include*/1); ++ AuDebugOn(err); ++ for (i = dpages.ndpage - 1; !err && i >= 0; i--) { ++ dpage = dpages.dpages + i; ++ dentries = dpage->dentries; ++ for (j = dpage->ndentry - 1; !err && j >= 0; j--) ++ AuDebugOn(au_digen_test(dentries[j], sigen)); ++ } ++ au_dpages_free(&dpages); ++} ++ ++void au_dbg_verify_kthread(void) ++{ ++ if (current->flags & PF_WQ_WORKER) { ++ au_dbg_blocked(); ++ WARN_ON(1); ++ } ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++void au_debug_sbinfo_init(struct au_sbinfo *sbinfo __maybe_unused) ++{ ++#ifdef AuForceNoPlink ++ au_opt_clr(sbinfo->si_mntflags, PLINK); ++#endif ++#ifdef AuForceNoXino ++ au_opt_clr(sbinfo->si_mntflags, XINO); ++#endif ++#ifdef AuForceNoRefrof ++ au_opt_clr(sbinfo->si_mntflags, REFROF); ++#endif ++#ifdef AuForceHnotify ++ au_opt_set_udba(sbinfo->si_mntflags, UDBA_HNOTIFY); ++#endif ++#ifdef AuForceRd0 ++ sbinfo->si_rdblk = 0; ++ sbinfo->si_rdhash = 0; ++#endif ++} ++ ++int __init au_debug_init(void) ++{ ++ aufs_bindex_t bindex; ++ struct au_vdir_destr destr; ++ ++ bindex = -1; ++ AuDebugOn(bindex >= 0); ++ ++ destr.len = -1; ++ AuDebugOn(destr.len < NAME_MAX); ++ ++#ifdef CONFIG_4KSTACKS ++ pr_warning("CONFIG_4KSTACKS is defined.\n"); ++#endif ++ ++#ifdef AuForceNoBrs ++ sysaufs_brs = 0; ++#endif ++ ++ return 0; ++} +diff -urN a/fs/aufs/debug.h b/fs/aufs/debug.h +--- a/fs/aufs/debug.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/debug.h 2011-03-06 23:28:02.616413258 +0000 +@@ -0,0 +1,245 @@ ++/* ++ * Copyright (C) 2005-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * debug print functions ++ */ ++ ++#ifndef __AUFS_DEBUG_H__ ++#define __AUFS_DEBUG_H__ ++ ++#ifdef __KERNEL__ ++ ++#include ++#include ++/* #include */ ++#include ++#include ++#include ++/* #include */ ++#include ++/* #include */ ++#include ++#include ++ ++#include ++ ++#ifdef CONFIG_AUFS_DEBUG ++#define AuDebugOn(a) BUG_ON(a) ++ ++/* module parameter */ ++extern int aufs_debug; ++static inline void au_debug(int n) ++{ ++ aufs_debug = n; ++ smp_mb(); ++} ++ ++static inline int au_debug_test(void) ++{ ++ return aufs_debug; ++} ++#else ++#define AuDebugOn(a) do {} while (0) ++AuStubVoid(au_debug, int n) ++AuStubInt0(au_debug_test, void) ++#endif /* CONFIG_AUFS_DEBUG */ ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* debug print */ ++ ++#define AuDbg(fmt, ...) do { \ ++ if (au_debug_test()) \ ++ pr_debug("DEBUG: " fmt, ##__VA_ARGS__); \ ++} while (0) ++#define AuLabel(l) AuDbg(#l "\n") ++#define AuIOErr(fmt, ...) pr_err("I/O Error, " fmt, ##__VA_ARGS__) ++#define AuWarn1(fmt, ...) do { \ ++ static unsigned char _c; \ ++ if (!_c++) \ ++ pr_warning(fmt, ##__VA_ARGS__); \ ++} while (0) ++ ++#define AuErr1(fmt, ...) do { \ ++ static unsigned char _c; \ ++ if (!_c++) \ ++ pr_err(fmt, ##__VA_ARGS__); \ ++} while (0) ++ ++#define AuIOErr1(fmt, ...) do { \ ++ static unsigned char _c; \ ++ if (!_c++) \ ++ AuIOErr(fmt, ##__VA_ARGS__); \ ++} while (0) ++ ++#define AuUnsupportMsg "This operation is not supported." \ ++ " Please report this application to aufs-users ML." ++#define AuUnsupport(fmt, ...) do { \ ++ pr_err(AuUnsupportMsg "\n" fmt, ##__VA_ARGS__); \ ++ dump_stack(); \ ++} while (0) ++ ++#define AuTraceErr(e) do { \ ++ if (unlikely((e) < 0)) \ ++ AuDbg("err %d\n", (int)(e)); \ ++} while (0) ++ ++#define AuTraceErrPtr(p) do { \ ++ if (IS_ERR(p)) \ ++ AuDbg("err %ld\n", PTR_ERR(p)); \ ++} while (0) ++ ++/* dirty macros for debug print, use with "%.*s" and caution */ ++#define AuLNPair(qstr) (qstr)->len, (qstr)->name ++#define AuDLNPair(d) AuLNPair(&(d)->d_name) ++ ++/* ---------------------------------------------------------------------- */ ++ ++struct au_sbinfo; ++struct au_finfo; ++struct dentry; ++#ifdef CONFIG_AUFS_DEBUG ++extern char *au_plevel; ++struct au_nhash; ++void au_dpri_whlist(struct au_nhash *whlist); ++struct au_vdir; ++void au_dpri_vdir(struct au_vdir *vdir); ++struct inode; ++void au_dpri_inode(struct inode *inode); ++void au_dpri_dentry(struct dentry *dentry); ++struct file; ++void au_dpri_file(struct file *filp); ++struct super_block; ++void au_dpri_sb(struct super_block *sb); ++ ++void au_dbg_sleep_jiffy(int jiffy); ++struct iattr; ++void au_dbg_iattr(struct iattr *ia); ++ ++#define au_dbg_verify_dinode(d) __au_dbg_verify_dinode(d, __func__, __LINE__) ++void __au_dbg_verify_dinode(struct dentry *dentry, const char *func, int line); ++void au_dbg_verify_dir_parent(struct dentry *dentry, unsigned int sigen); ++void au_dbg_verify_nondir_parent(struct dentry *dentry, unsigned int sigen); ++void au_dbg_verify_gen(struct dentry *parent, unsigned int sigen); ++void au_dbg_verify_kthread(void); ++ ++int __init au_debug_init(void); ++void au_debug_sbinfo_init(struct au_sbinfo *sbinfo); ++#define AuDbgWhlist(w) do { \ ++ AuDbg(#w "\n"); \ ++ au_dpri_whlist(w); \ ++} while (0) ++ ++#define AuDbgVdir(v) do { \ ++ AuDbg(#v "\n"); \ ++ au_dpri_vdir(v); \ ++} while (0) ++ ++#define AuDbgInode(i) do { \ ++ AuDbg(#i "\n"); \ ++ au_dpri_inode(i); \ ++} while (0) ++ ++#define AuDbgDentry(d) do { \ ++ AuDbg(#d "\n"); \ ++ au_dpri_dentry(d); \ ++} while (0) ++ ++#define AuDbgFile(f) do { \ ++ AuDbg(#f "\n"); \ ++ au_dpri_file(f); \ ++} while (0) ++ ++#define AuDbgSb(sb) do { \ ++ AuDbg(#sb "\n"); \ ++ au_dpri_sb(sb); \ ++} while (0) ++ ++#define AuDbgSleep(sec) do { \ ++ AuDbg("sleep %d sec\n", sec); \ ++ ssleep(sec); \ ++} while (0) ++ ++#define AuDbgSleepJiffy(jiffy) do { \ ++ AuDbg("sleep %d jiffies\n", jiffy); \ ++ au_dbg_sleep_jiffy(jiffy); \ ++} while (0) ++ ++#define AuDbgIAttr(ia) do { \ ++ AuDbg("ia_valid 0x%x\n", (ia)->ia_valid); \ ++ au_dbg_iattr(ia); \ ++} while (0) ++ ++#define AuDbgSym(addr) do { \ ++ char sym[KSYM_SYMBOL_LEN]; \ ++ sprint_symbol(sym, (unsigned long)addr); \ ++ AuDbg("%s\n", sym); \ ++} while (0) ++ ++#define AuInfoSym(addr) do { \ ++ char sym[KSYM_SYMBOL_LEN]; \ ++ sprint_symbol(sym, (unsigned long)addr); \ ++ AuInfo("%s\n", sym); \ ++} while (0) ++#else ++AuStubVoid(au_dbg_verify_dinode, struct dentry *dentry) ++AuStubVoid(au_dbg_verify_dir_parent, struct dentry *dentry, unsigned int sigen) ++AuStubVoid(au_dbg_verify_nondir_parent, struct dentry *dentry, ++ unsigned int sigen) ++AuStubVoid(au_dbg_verify_gen, struct dentry *parent, unsigned int sigen) ++AuStubVoid(au_dbg_verify_kthread, void) ++AuStubInt0(__init au_debug_init, void) ++AuStubVoid(au_debug_sbinfo_init, struct au_sbinfo *sbinfo) ++ ++#define AuDbgWhlist(w) do {} while (0) ++#define AuDbgVdir(v) do {} while (0) ++#define AuDbgInode(i) do {} while (0) ++#define AuDbgDentry(d) do {} while (0) ++#define AuDbgFile(f) do {} while (0) ++#define AuDbgSb(sb) do {} while (0) ++#define AuDbgSleep(sec) do {} while (0) ++#define AuDbgSleepJiffy(jiffy) do {} while (0) ++#define AuDbgIAttr(ia) do {} while (0) ++#define AuDbgSym(addr) do {} while (0) ++#define AuInfoSym(addr) do {} while (0) ++#endif /* CONFIG_AUFS_DEBUG */ ++ ++/* ---------------------------------------------------------------------- */ ++ ++#ifdef CONFIG_AUFS_MAGIC_SYSRQ ++int __init au_sysrq_init(void); ++void au_sysrq_fin(void); ++ ++#ifdef CONFIG_HW_CONSOLE ++#define au_dbg_blocked() do { \ ++ WARN_ON(1); \ ++ handle_sysrq('w'); \ ++} while (0) ++#else ++AuStubVoid(au_dbg_blocked, void) ++#endif ++ ++#else ++AuStubInt0(__init au_sysrq_init, void) ++AuStubVoid(au_sysrq_fin, void) ++AuStubVoid(au_dbg_blocked, void) ++#endif /* CONFIG_AUFS_MAGIC_SYSRQ */ ++ ++#endif /* __KERNEL__ */ ++#endif /* __AUFS_DEBUG_H__ */ +diff -urN a/fs/aufs/dentry.c b/fs/aufs/dentry.c +--- a/fs/aufs/dentry.c 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/dentry.c 2011-03-06 23:28:02.620413138 +0000 +@@ -0,0 +1,1140 @@ ++/* ++ * Copyright (C) 2005-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * lookup and dentry operations ++ */ ++ ++#include ++#include "aufs.h" ++ ++static void au_h_nd(struct nameidata *h_nd, struct nameidata *nd) ++{ ++ if (nd) { ++ *h_nd = *nd; ++ ++ /* ++ * gave up supporting LOOKUP_CREATE/OPEN for lower fs, ++ * due to whiteout and branch permission. ++ */ ++ h_nd->flags &= ~(/*LOOKUP_PARENT |*/ LOOKUP_OPEN | LOOKUP_CREATE ++ | LOOKUP_FOLLOW | LOOKUP_EXCL); ++ /* unnecessary? */ ++ h_nd->intent.open.file = NULL; ++ } else ++ memset(h_nd, 0, sizeof(*h_nd)); ++} ++ ++struct au_lkup_one_args { ++ struct dentry **errp; ++ struct qstr *name; ++ struct dentry *h_parent; ++ struct au_branch *br; ++ struct nameidata *nd; ++}; ++ ++struct dentry *au_lkup_one(struct qstr *name, struct dentry *h_parent, ++ struct au_branch *br, struct nameidata *nd) ++{ ++ struct dentry *h_dentry; ++ int err; ++ struct nameidata h_nd; ++ ++ if (au_test_fs_null_nd(h_parent->d_sb)) ++ return vfsub_lookup_one_len(name->name, h_parent, name->len); ++ ++ au_h_nd(&h_nd, nd); ++ h_nd.path.dentry = h_parent; ++ h_nd.path.mnt = br->br_mnt; ++ ++ err = __lookup_one_len(name->name, &h_nd.last, NULL, name->len); ++ h_dentry = ERR_PTR(err); ++ if (!err) { ++ path_get(&h_nd.path); ++ h_dentry = vfsub_lookup_hash(&h_nd); ++ path_put(&h_nd.path); ++ } ++ ++ AuTraceErrPtr(h_dentry); ++ return h_dentry; ++} ++ ++static void au_call_lkup_one(void *args) ++{ ++ struct au_lkup_one_args *a = args; ++ *a->errp = au_lkup_one(a->name, a->h_parent, a->br, a->nd); ++} ++ ++#define AuLkup_ALLOW_NEG 1 ++#define au_ftest_lkup(flags, name) ((flags) & AuLkup_##name) ++#define au_fset_lkup(flags, name) \ ++ do { (flags) |= AuLkup_##name; } while (0) ++#define au_fclr_lkup(flags, name) \ ++ do { (flags) &= ~AuLkup_##name; } while (0) ++ ++struct au_do_lookup_args { ++ unsigned int flags; ++ mode_t type; ++ struct nameidata *nd; ++}; ++ ++/* ++ * returns positive/negative dentry, NULL or an error. ++ * NULL means whiteout-ed or not-found. ++ */ ++static struct dentry* ++au_do_lookup(struct dentry *h_parent, struct dentry *dentry, ++ aufs_bindex_t bindex, struct qstr *wh_name, ++ struct au_do_lookup_args *args) ++{ ++ struct dentry *h_dentry; ++ struct inode *h_inode, *inode; ++ struct au_branch *br; ++ int wh_found, opq; ++ unsigned char wh_able; ++ const unsigned char allow_neg = !!au_ftest_lkup(args->flags, ALLOW_NEG); ++ ++ wh_found = 0; ++ br = au_sbr(dentry->d_sb, bindex); ++ wh_able = !!au_br_whable(br->br_perm); ++ if (wh_able) ++ wh_found = au_wh_test(h_parent, wh_name, br, /*try_sio*/0); ++ h_dentry = ERR_PTR(wh_found); ++ if (!wh_found) ++ goto real_lookup; ++ if (unlikely(wh_found < 0)) ++ goto out; ++ ++ /* We found a whiteout */ ++ /* au_set_dbend(dentry, bindex); */ ++ au_set_dbwh(dentry, bindex); ++ if (!allow_neg) ++ return NULL; /* success */ ++ ++real_lookup: ++ h_dentry = au_lkup_one(&dentry->d_name, h_parent, br, args->nd); ++ if (IS_ERR(h_dentry)) ++ goto out; ++ ++ h_inode = h_dentry->d_inode; ++ if (!h_inode) { ++ if (!allow_neg) ++ goto out_neg; ++ } else if (wh_found ++ || (args->type && args->type != (h_inode->i_mode & S_IFMT))) ++ goto out_neg; ++ ++ if (au_dbend(dentry) <= bindex) ++ au_set_dbend(dentry, bindex); ++ if (au_dbstart(dentry) < 0 || bindex < au_dbstart(dentry)) ++ au_set_dbstart(dentry, bindex); ++ au_set_h_dptr(dentry, bindex, h_dentry); ++ ++ inode = dentry->d_inode; ++ if (!h_inode || !S_ISDIR(h_inode->i_mode) || !wh_able ++ || (inode && !S_ISDIR(inode->i_mode))) ++ goto out; /* success */ ++ ++ mutex_lock_nested(&h_inode->i_mutex, AuLsc_I_CHILD); ++ opq = au_diropq_test(h_dentry, br); ++ mutex_unlock(&h_inode->i_mutex); ++ if (opq > 0) ++ au_set_dbdiropq(dentry, bindex); ++ else if (unlikely(opq < 0)) { ++ au_set_h_dptr(dentry, bindex, NULL); ++ h_dentry = ERR_PTR(opq); ++ } ++ goto out; ++ ++out_neg: ++ dput(h_dentry); ++ h_dentry = NULL; ++out: ++ return h_dentry; ++} ++ ++static int au_test_shwh(struct super_block *sb, const struct qstr *name) ++{ ++ if (unlikely(!au_opt_test(au_mntflags(sb), SHWH) ++ && !strncmp(name->name, AUFS_WH_PFX, AUFS_WH_PFX_LEN))) ++ return -EPERM; ++ return 0; ++} ++ ++/* ++ * returns the number of lower positive dentries, ++ * otherwise an error. ++ * can be called at unlinking with @type is zero. ++ */ ++int au_lkup_dentry(struct dentry *dentry, aufs_bindex_t bstart, mode_t type, ++ struct nameidata *nd) ++{ ++ int npositive, err; ++ aufs_bindex_t bindex, btail, bdiropq; ++ unsigned char isdir; ++ struct qstr whname; ++ struct au_do_lookup_args args = { ++ .flags = 0, ++ .type = type, ++ .nd = nd ++ }; ++ const struct qstr *name = &dentry->d_name; ++ struct dentry *parent; ++ struct inode *inode; ++ ++ err = au_test_shwh(dentry->d_sb, name); ++ if (unlikely(err)) ++ goto out; ++ ++ err = au_wh_name_alloc(&whname, name); ++ if (unlikely(err)) ++ goto out; ++ ++ inode = dentry->d_inode; ++ isdir = !!(inode && S_ISDIR(inode->i_mode)); ++ if (!type) ++ au_fset_lkup(args.flags, ALLOW_NEG); ++ ++ npositive = 0; ++ parent = dget_parent(dentry); ++ btail = au_dbtaildir(parent); ++ for (bindex = bstart; bindex <= btail; bindex++) { ++ struct dentry *h_parent, *h_dentry; ++ struct inode *h_inode, *h_dir; ++ ++ h_dentry = au_h_dptr(dentry, bindex); ++ if (h_dentry) { ++ if (h_dentry->d_inode) ++ npositive++; ++ if (type != S_IFDIR) ++ break; ++ continue; ++ } ++ h_parent = au_h_dptr(parent, bindex); ++ if (!h_parent) ++ continue; ++ h_dir = h_parent->d_inode; ++ if (!h_dir || !S_ISDIR(h_dir->i_mode)) ++ continue; ++ ++ mutex_lock_nested(&h_dir->i_mutex, AuLsc_I_PARENT); ++ h_dentry = au_do_lookup(h_parent, dentry, bindex, &whname, ++ &args); ++ mutex_unlock(&h_dir->i_mutex); ++ err = PTR_ERR(h_dentry); ++ if (IS_ERR(h_dentry)) ++ goto out_parent; ++ au_fclr_lkup(args.flags, ALLOW_NEG); ++ ++ if (au_dbwh(dentry) >= 0) ++ break; ++ if (!h_dentry) ++ continue; ++ h_inode = h_dentry->d_inode; ++ if (!h_inode) ++ continue; ++ npositive++; ++ if (!args.type) ++ args.type = h_inode->i_mode & S_IFMT; ++ if (args.type != S_IFDIR) ++ break; ++ else if (isdir) { ++ /* the type of lower may be different */ ++ bdiropq = au_dbdiropq(dentry); ++ if (bdiropq >= 0 && bdiropq <= bindex) ++ break; ++ } ++ } ++ ++ if (npositive) { ++ AuLabel(positive); ++ au_update_dbstart(dentry); ++ } ++ err = npositive; ++ if (unlikely(!au_opt_test(au_mntflags(dentry->d_sb), UDBA_NONE) ++ && au_dbstart(dentry) < 0)) { ++ err = -EIO; ++ AuIOErr("both of real entry and whiteout found, %.*s, err %d\n", ++ AuDLNPair(dentry), err); ++ } ++ ++out_parent: ++ dput(parent); ++ kfree(whname.name); ++out: ++ return err; ++} ++ ++struct dentry *au_sio_lkup_one(struct qstr *name, struct dentry *parent, ++ struct au_branch *br) ++{ ++ struct dentry *dentry; ++ int wkq_err; ++ ++ if (!au_test_h_perm_sio(parent->d_inode, MAY_EXEC)) ++ dentry = au_lkup_one(name, parent, br, /*nd*/NULL); ++ else { ++ struct au_lkup_one_args args = { ++ .errp = &dentry, ++ .name = name, ++ .h_parent = parent, ++ .br = br, ++ .nd = NULL ++ }; ++ ++ wkq_err = au_wkq_wait(au_call_lkup_one, &args); ++ if (unlikely(wkq_err)) ++ dentry = ERR_PTR(wkq_err); ++ } ++ ++ return dentry; ++} ++ ++/* ++ * lookup @dentry on @bindex which should be negative. ++ */ ++int au_lkup_neg(struct dentry *dentry, aufs_bindex_t bindex) ++{ ++ int err; ++ struct dentry *parent, *h_parent, *h_dentry; ++ ++ parent = dget_parent(dentry); ++ h_parent = au_h_dptr(parent, bindex); ++ h_dentry = au_sio_lkup_one(&dentry->d_name, h_parent, ++ au_sbr(dentry->d_sb, bindex)); ++ err = PTR_ERR(h_dentry); ++ if (IS_ERR(h_dentry)) ++ goto out; ++ if (unlikely(h_dentry->d_inode)) { ++ err = -EIO; ++ AuIOErr("%.*s should be negative on b%d.\n", ++ AuDLNPair(h_dentry), bindex); ++ dput(h_dentry); ++ goto out; ++ } ++ ++ err = 0; ++ if (bindex < au_dbstart(dentry)) ++ au_set_dbstart(dentry, bindex); ++ if (au_dbend(dentry) < bindex) ++ au_set_dbend(dentry, bindex); ++ au_set_h_dptr(dentry, bindex, h_dentry); ++ ++out: ++ dput(parent); ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* subset of struct inode */ ++struct au_iattr { ++ unsigned long i_ino; ++ /* unsigned int i_nlink; */ ++ uid_t i_uid; ++ gid_t i_gid; ++ u64 i_version; ++/* ++ loff_t i_size; ++ blkcnt_t i_blocks; ++*/ ++ umode_t i_mode; ++}; ++ ++static void au_iattr_save(struct au_iattr *ia, struct inode *h_inode) ++{ ++ ia->i_ino = h_inode->i_ino; ++ /* ia->i_nlink = h_inode->i_nlink; */ ++ ia->i_uid = h_inode->i_uid; ++ ia->i_gid = h_inode->i_gid; ++ ia->i_version = h_inode->i_version; ++/* ++ ia->i_size = h_inode->i_size; ++ ia->i_blocks = h_inode->i_blocks; ++*/ ++ ia->i_mode = (h_inode->i_mode & S_IFMT); ++} ++ ++static int au_iattr_test(struct au_iattr *ia, struct inode *h_inode) ++{ ++ return ia->i_ino != h_inode->i_ino ++ /* || ia->i_nlink != h_inode->i_nlink */ ++ || ia->i_uid != h_inode->i_uid ++ || ia->i_gid != h_inode->i_gid ++ || ia->i_version != h_inode->i_version ++/* ++ || ia->i_size != h_inode->i_size ++ || ia->i_blocks != h_inode->i_blocks ++*/ ++ || ia->i_mode != (h_inode->i_mode & S_IFMT); ++} ++ ++static int au_h_verify_dentry(struct dentry *h_dentry, struct dentry *h_parent, ++ struct au_branch *br) ++{ ++ int err; ++ struct au_iattr ia; ++ struct inode *h_inode; ++ struct dentry *h_d; ++ struct super_block *h_sb; ++ ++ err = 0; ++ memset(&ia, -1, sizeof(ia)); ++ h_sb = h_dentry->d_sb; ++ h_inode = h_dentry->d_inode; ++ if (h_inode) ++ au_iattr_save(&ia, h_inode); ++ else if (au_test_nfs(h_sb) || au_test_fuse(h_sb)) ++ /* nfs d_revalidate may return 0 for negative dentry */ ++ /* fuse d_revalidate always return 0 for negative dentry */ ++ goto out; ++ ++ /* main purpose is namei.c:cached_lookup() and d_revalidate */ ++ h_d = au_lkup_one(&h_dentry->d_name, h_parent, br, /*nd*/NULL); ++ err = PTR_ERR(h_d); ++ if (IS_ERR(h_d)) ++ goto out; ++ ++ err = 0; ++ if (unlikely(h_d != h_dentry ++ || h_d->d_inode != h_inode ++ || (h_inode && au_iattr_test(&ia, h_inode)))) ++ err = au_busy_or_stale(); ++ dput(h_d); ++ ++out: ++ AuTraceErr(err); ++ return err; ++} ++ ++int au_h_verify(struct dentry *h_dentry, unsigned int udba, struct inode *h_dir, ++ struct dentry *h_parent, struct au_branch *br) ++{ ++ int err; ++ ++ err = 0; ++ if (udba == AuOpt_UDBA_REVAL ++ && !au_test_fs_remote(h_dentry->d_sb)) { ++ IMustLock(h_dir); ++ err = (h_dentry->d_parent->d_inode != h_dir); ++ } else if (udba != AuOpt_UDBA_NONE) ++ err = au_h_verify_dentry(h_dentry, h_parent, br); ++ ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++static int au_do_refresh_hdentry(struct dentry *dentry, struct dentry *parent) ++{ ++ int err; ++ aufs_bindex_t new_bindex, bindex, bend, bwh, bdiropq; ++ struct au_hdentry tmp, *p, *q; ++ struct au_dinfo *dinfo; ++ struct super_block *sb; ++ ++ DiMustWriteLock(dentry); ++ ++ sb = dentry->d_sb; ++ dinfo = au_di(dentry); ++ bend = dinfo->di_bend; ++ bwh = dinfo->di_bwh; ++ bdiropq = dinfo->di_bdiropq; ++ p = dinfo->di_hdentry + dinfo->di_bstart; ++ for (bindex = dinfo->di_bstart; bindex <= bend; bindex++, p++) { ++ if (!p->hd_dentry) ++ continue; ++ ++ new_bindex = au_br_index(sb, p->hd_id); ++ if (new_bindex == bindex) ++ continue; ++ ++ if (dinfo->di_bwh == bindex) ++ bwh = new_bindex; ++ if (dinfo->di_bdiropq == bindex) ++ bdiropq = new_bindex; ++ if (new_bindex < 0) { ++ au_hdput(p); ++ p->hd_dentry = NULL; ++ continue; ++ } ++ ++ /* swap two lower dentries, and loop again */ ++ q = dinfo->di_hdentry + new_bindex; ++ tmp = *q; ++ *q = *p; ++ *p = tmp; ++ if (tmp.hd_dentry) { ++ bindex--; ++ p--; ++ } ++ } ++ ++ dinfo->di_bwh = -1; ++ if (bwh >= 0 && bwh <= au_sbend(sb) && au_sbr_whable(sb, bwh)) ++ dinfo->di_bwh = bwh; ++ ++ dinfo->di_bdiropq = -1; ++ if (bdiropq >= 0 ++ && bdiropq <= au_sbend(sb) ++ && au_sbr_whable(sb, bdiropq)) ++ dinfo->di_bdiropq = bdiropq; ++ ++ err = -EIO; ++ dinfo->di_bstart = -1; ++ dinfo->di_bend = -1; ++ bend = au_dbend(parent); ++ p = dinfo->di_hdentry; ++ for (bindex = 0; bindex <= bend; bindex++, p++) ++ if (p->hd_dentry) { ++ dinfo->di_bstart = bindex; ++ break; ++ } ++ ++ if (dinfo->di_bstart >= 0) { ++ p = dinfo->di_hdentry + bend; ++ for (bindex = bend; bindex >= 0; bindex--, p--) ++ if (p->hd_dentry) { ++ dinfo->di_bend = bindex; ++ err = 0; ++ break; ++ } ++ } ++ ++ return err; ++} ++ ++static void au_do_hide(struct dentry *dentry) ++{ ++ struct inode *inode; ++ ++ inode = dentry->d_inode; ++ if (inode) { ++ if (!S_ISDIR(inode->i_mode)) { ++ if (inode->i_nlink && !d_unhashed(dentry)) ++ drop_nlink(inode); ++ } else { ++ clear_nlink(inode); ++ /* stop next lookup */ ++ inode->i_flags |= S_DEAD; ++ } ++ smp_mb(); /* necessary? */ ++ } ++ d_drop(dentry); ++} ++ ++static int au_hide_children(struct dentry *parent) ++{ ++ int err, i, j, ndentry; ++ struct au_dcsub_pages dpages; ++ struct au_dpage *dpage; ++ struct dentry *dentry; ++ ++ err = au_dpages_init(&dpages, GFP_NOFS); ++ if (unlikely(err)) ++ goto out; ++ err = au_dcsub_pages(&dpages, parent, NULL, NULL); ++ if (unlikely(err)) ++ goto out_dpages; ++ ++ /* in reverse order */ ++ for (i = dpages.ndpage - 1; i >= 0; i--) { ++ dpage = dpages.dpages + i; ++ ndentry = dpage->ndentry; ++ for (j = ndentry - 1; j >= 0; j--) { ++ dentry = dpage->dentries[j]; ++ if (dentry != parent) ++ au_do_hide(dentry); ++ } ++ } ++ ++out_dpages: ++ au_dpages_free(&dpages); ++out: ++ return err; ++} ++ ++static void au_hide(struct dentry *dentry) ++{ ++ int err; ++ struct inode *inode; ++ ++ AuDbgDentry(dentry); ++ inode = dentry->d_inode; ++ if (inode && S_ISDIR(inode->i_mode)) { ++ /* shrink_dcache_parent(dentry); */ ++ err = au_hide_children(dentry); ++ if (unlikely(err)) ++ AuIOErr("%.*s, failed hiding children, ignored %d\n", ++ AuDLNPair(dentry), err); ++ } ++ au_do_hide(dentry); ++} ++ ++/* ++ * By adding a dirty branch, a cached dentry may be affected in various ways. ++ * ++ * a dirty branch is added ++ * - on the top of layers ++ * - in the middle of layers ++ * - to the bottom of layers ++ * ++ * on the added branch there exists ++ * - a whiteout ++ * - a diropq ++ * - a same named entry ++ * + exist ++ * * negative --> positive ++ * * positive --> positive ++ * - type is unchanged ++ * - type is changed ++ * + doesn't exist ++ * * negative --> negative ++ * * positive --> negative (rejected by au_br_del() for non-dir case) ++ * - none ++ */ ++static int au_refresh_by_dinfo(struct dentry *dentry, struct au_dinfo *dinfo, ++ struct au_dinfo *tmp) ++{ ++ int err; ++ aufs_bindex_t bindex, bend; ++ struct { ++ struct dentry *dentry; ++ struct inode *inode; ++ mode_t mode; ++ } orig_h, tmp_h; ++ struct au_hdentry *hd; ++ struct inode *inode, *h_inode; ++ struct dentry *h_dentry; ++ ++ err = 0; ++ AuDebugOn(dinfo->di_bstart < 0); ++ orig_h.dentry = dinfo->di_hdentry[dinfo->di_bstart].hd_dentry; ++ orig_h.inode = orig_h.dentry->d_inode; ++ orig_h.mode = 0; ++ if (orig_h.inode) ++ orig_h.mode = orig_h.inode->i_mode & S_IFMT; ++ memset(&tmp_h, 0, sizeof(tmp_h)); ++ if (tmp->di_bstart >= 0) { ++ tmp_h.dentry = tmp->di_hdentry[tmp->di_bstart].hd_dentry; ++ tmp_h.inode = tmp_h.dentry->d_inode; ++ if (tmp_h.inode) ++ tmp_h.mode = tmp_h.inode->i_mode & S_IFMT; ++ } ++ ++ inode = dentry->d_inode; ++ if (!orig_h.inode) { ++ AuDbg("nagative originally\n"); ++ if (inode) { ++ au_hide(dentry); ++ goto out; ++ } ++ AuDebugOn(inode); ++ AuDebugOn(dinfo->di_bstart != dinfo->di_bend); ++ AuDebugOn(dinfo->di_bdiropq != -1); ++ ++ if (!tmp_h.inode) { ++ AuDbg("negative --> negative\n"); ++ /* should have only one negative lower */ ++ if (tmp->di_bstart >= 0 ++ && tmp->di_bstart < dinfo->di_bstart) { ++ AuDebugOn(tmp->di_bstart != tmp->di_bend); ++ AuDebugOn(dinfo->di_bstart != dinfo->di_bend); ++ au_set_h_dptr(dentry, dinfo->di_bstart, NULL); ++ au_di_cp(dinfo, tmp); ++ hd = tmp->di_hdentry + tmp->di_bstart; ++ au_set_h_dptr(dentry, tmp->di_bstart, ++ dget(hd->hd_dentry)); ++ } ++ au_dbg_verify_dinode(dentry); ++ } else { ++ AuDbg("negative --> positive\n"); ++ /* ++ * similar to the behaviour of creating with bypassing ++ * aufs. ++ * unhash it in order to force an error in the ++ * succeeding create operation. ++ * we should not set S_DEAD here. ++ */ ++ d_drop(dentry); ++ /* au_di_swap(tmp, dinfo); */ ++ au_dbg_verify_dinode(dentry); ++ } ++ } else { ++ AuDbg("positive originally\n"); ++ /* inode may be NULL */ ++ AuDebugOn(inode && (inode->i_mode & S_IFMT) != orig_h.mode); ++ if (!tmp_h.inode) { ++ AuDbg("positive --> negative\n"); ++ /* or bypassing aufs */ ++ au_hide(dentry); ++ if (tmp->di_bwh >= 0 && tmp->di_bwh <= dinfo->di_bstart) ++ dinfo->di_bwh = tmp->di_bwh; ++ if (inode) ++ err = au_refresh_hinode_self(inode); ++ au_dbg_verify_dinode(dentry); ++ } else if (orig_h.mode == tmp_h.mode) { ++ AuDbg("positive --> positive, same type\n"); ++ if (!S_ISDIR(orig_h.mode) ++ && dinfo->di_bstart > tmp->di_bstart) { ++ /* ++ * similar to the behaviour of removing and ++ * creating. ++ */ ++ au_hide(dentry); ++ if (inode) ++ err = au_refresh_hinode_self(inode); ++ au_dbg_verify_dinode(dentry); ++ } else { ++ /* fill empty slots */ ++ if (dinfo->di_bstart > tmp->di_bstart) ++ dinfo->di_bstart = tmp->di_bstart; ++ if (dinfo->di_bend < tmp->di_bend) ++ dinfo->di_bend = tmp->di_bend; ++ dinfo->di_bwh = tmp->di_bwh; ++ dinfo->di_bdiropq = tmp->di_bdiropq; ++ hd = tmp->di_hdentry; ++ bend = dinfo->di_bend; ++ for (bindex = tmp->di_bstart; bindex <= bend; ++ bindex++) { ++ if (au_h_dptr(dentry, bindex)) ++ continue; ++ h_dentry = hd[bindex].hd_dentry; ++ if (!h_dentry) ++ continue; ++ h_inode = h_dentry->d_inode; ++ AuDebugOn(!h_inode); ++ AuDebugOn(orig_h.mode ++ != (h_inode->i_mode ++ & S_IFMT)); ++ au_set_h_dptr(dentry, bindex, ++ dget(h_dentry)); ++ } ++ err = au_refresh_hinode(inode, dentry); ++ au_dbg_verify_dinode(dentry); ++ } ++ } else { ++ AuDbg("positive --> positive, different type\n"); ++ /* similar to the behaviour of removing and creating */ ++ au_hide(dentry); ++ if (inode) ++ err = au_refresh_hinode_self(inode); ++ au_dbg_verify_dinode(dentry); ++ } ++ } ++ ++out: ++ return err; ++} ++ ++int au_refresh_dentry(struct dentry *dentry, struct dentry *parent) ++{ ++ int err, ebrange; ++ unsigned int sigen; ++ struct au_dinfo *dinfo, *tmp; ++ struct super_block *sb; ++ struct inode *inode; ++ ++ DiMustWriteLock(dentry); ++ AuDebugOn(IS_ROOT(dentry)); ++ AuDebugOn(!parent->d_inode); ++ ++ sb = dentry->d_sb; ++ inode = dentry->d_inode; ++ sigen = au_sigen(sb); ++ err = au_digen_test(parent, sigen); ++ if (unlikely(err)) ++ goto out; ++ ++ dinfo = au_di(dentry); ++ err = au_di_realloc(dinfo, au_sbend(sb) + 1); ++ if (unlikely(err)) ++ goto out; ++ ebrange = au_dbrange_test(dentry); ++ if (!ebrange) ++ ebrange = au_do_refresh_hdentry(dentry, parent); ++ ++ if (d_unhashed(dentry) || ebrange) { ++ AuDebugOn(au_dbstart(dentry) < 0 && au_dbend(dentry) >= 0); ++ if (inode) ++ err = au_refresh_hinode_self(inode); ++ au_dbg_verify_dinode(dentry); ++ if (!err) ++ goto out_dgen; /* success */ ++ goto out; ++ } ++ ++ /* temporary dinfo */ ++ AuDbgDentry(dentry); ++ err = -ENOMEM; ++ tmp = au_di_alloc(sb, AuLsc_DI_TMP); ++ if (unlikely(!tmp)) ++ goto out; ++ au_di_swap(tmp, dinfo); ++ /* returns the number of positive dentries */ ++ /* ++ * if current working dir is removed, it returns an error. ++ * but the dentry is legal. ++ */ ++ err = au_lkup_dentry(dentry, /*bstart*/0, /*type*/0, /*nd*/NULL); ++ AuDbgDentry(dentry); ++ au_di_swap(tmp, dinfo); ++ if (err == -ENOENT) ++ err = 0; ++ if (err >= 0) { ++ /* compare/refresh by dinfo */ ++ AuDbgDentry(dentry); ++ err = au_refresh_by_dinfo(dentry, dinfo, tmp); ++ au_dbg_verify_dinode(dentry); ++ AuTraceErr(err); ++ } ++ au_rw_write_unlock(&tmp->di_rwsem); ++ au_di_free(tmp); ++ if (unlikely(err)) ++ goto out; ++ ++out_dgen: ++ au_update_digen(dentry); ++out: ++ if (unlikely(err && !(dentry->d_flags & DCACHE_NFSFS_RENAMED))) { ++ AuIOErr("failed refreshing %.*s, %d\n", ++ AuDLNPair(dentry), err); ++ AuDbgDentry(dentry); ++ } ++ AuTraceErr(err); ++ return err; ++} ++ ++static noinline_for_stack ++int au_do_h_d_reval(struct dentry *h_dentry, struct nameidata *nd, ++ struct dentry *dentry, aufs_bindex_t bindex) ++{ ++ int err, valid; ++ int (*reval)(struct dentry *, struct nameidata *); ++ ++ err = 0; ++ if (!(h_dentry->d_flags & DCACHE_OP_REVALIDATE)) ++ goto out; ++ reval = h_dentry->d_op->d_revalidate; ++ ++ AuDbg("b%d\n", bindex); ++ if (au_test_fs_null_nd(h_dentry->d_sb)) ++ /* it may return tri-state */ ++ valid = reval(h_dentry, NULL); ++ else { ++ struct nameidata h_nd; ++ int locked; ++ struct dentry *parent; ++ ++ au_h_nd(&h_nd, nd); ++ parent = nd->path.dentry; ++ locked = (nd && nd->path.dentry != dentry); ++ if (locked) ++ di_read_lock_parent(parent, AuLock_IR); ++ BUG_ON(bindex > au_dbend(parent)); ++ h_nd.path.dentry = au_h_dptr(parent, bindex); ++ BUG_ON(!h_nd.path.dentry); ++ h_nd.path.mnt = au_sbr(parent->d_sb, bindex)->br_mnt; ++ path_get(&h_nd.path); ++ valid = reval(h_dentry, &h_nd); ++ path_put(&h_nd.path); ++ if (locked) ++ di_read_unlock(parent, AuLock_IR); ++ } ++ ++ if (unlikely(valid < 0)) ++ err = valid; ++ else if (!valid) ++ err = -EINVAL; ++ ++out: ++ AuTraceErr(err); ++ return err; ++} ++ ++/* todo: remove this */ ++static int h_d_revalidate(struct dentry *dentry, struct inode *inode, ++ struct nameidata *nd, int do_udba) ++{ ++ int err; ++ umode_t mode, h_mode; ++ aufs_bindex_t bindex, btail, bstart, ibs, ibe; ++ unsigned char plus, unhashed, is_root, h_plus; ++ struct inode *h_inode, *h_cached_inode; ++ struct dentry *h_dentry; ++ struct qstr *name, *h_name; ++ ++ err = 0; ++ plus = 0; ++ mode = 0; ++ ibs = -1; ++ ibe = -1; ++ unhashed = !!d_unhashed(dentry); ++ is_root = !!IS_ROOT(dentry); ++ name = &dentry->d_name; ++ ++ /* ++ * Theoretically, REVAL test should be unnecessary in case of ++ * {FS,I}NOTIFY. ++ * But {fs,i}notify doesn't fire some necessary events, ++ * IN_ATTRIB for atime/nlink/pageio ++ * IN_DELETE for NFS dentry ++ * Let's do REVAL test too. ++ */ ++ if (do_udba && inode) { ++ mode = (inode->i_mode & S_IFMT); ++ plus = (inode->i_nlink > 0); ++ ibs = au_ibstart(inode); ++ ibe = au_ibend(inode); ++ } ++ ++ bstart = au_dbstart(dentry); ++ btail = bstart; ++ if (inode && S_ISDIR(inode->i_mode)) ++ btail = au_dbtaildir(dentry); ++ for (bindex = bstart; bindex <= btail; bindex++) { ++ h_dentry = au_h_dptr(dentry, bindex); ++ if (!h_dentry) ++ continue; ++ ++ AuDbg("b%d, %.*s\n", bindex, AuDLNPair(h_dentry)); ++ spin_lock(&h_dentry->d_lock); ++ h_name = &h_dentry->d_name; ++ if (unlikely(do_udba ++ && !is_root ++ && (unhashed != !!d_unhashed(h_dentry) ++ || name->len != h_name->len ++ || memcmp(name->name, h_name->name, name->len)) ++ )) { ++ AuDbg("unhash 0x%x 0x%x, %.*s %.*s\n", ++ unhashed, d_unhashed(h_dentry), ++ AuDLNPair(dentry), AuDLNPair(h_dentry)); ++ spin_unlock(&h_dentry->d_lock); ++ goto err; ++ } ++ spin_unlock(&h_dentry->d_lock); ++ ++ err = au_do_h_d_reval(h_dentry, nd, dentry, bindex); ++ if (unlikely(err)) ++ /* do not goto err, to keep the errno */ ++ break; ++ ++ /* todo: plink too? */ ++ if (!do_udba) ++ continue; ++ ++ /* UDBA tests */ ++ h_inode = h_dentry->d_inode; ++ if (unlikely(!!inode != !!h_inode)) ++ goto err; ++ ++ h_plus = plus; ++ h_mode = mode; ++ h_cached_inode = h_inode; ++ if (h_inode) { ++ h_mode = (h_inode->i_mode & S_IFMT); ++ h_plus = (h_inode->i_nlink > 0); ++ } ++ if (inode && ibs <= bindex && bindex <= ibe) ++ h_cached_inode = au_h_iptr(inode, bindex); ++ ++ if (unlikely(plus != h_plus ++ || mode != h_mode ++ || h_cached_inode != h_inode)) ++ goto err; ++ continue; ++ ++ err: ++ err = -EINVAL; ++ break; ++ } ++ ++ return err; ++} ++ ++/* todo: consolidate with do_refresh() and au_reval_for_attr() */ ++static int simple_reval_dpath(struct dentry *dentry, unsigned int sigen) ++{ ++ int err; ++ struct dentry *parent; ++ ++ if (!au_digen_test(dentry, sigen)) ++ return 0; ++ ++ parent = dget_parent(dentry); ++ di_read_lock_parent(parent, AuLock_IR); ++ AuDebugOn(au_digen_test(parent, sigen)); ++ au_dbg_verify_gen(parent, sigen); ++ err = au_refresh_dentry(dentry, parent); ++ di_read_unlock(parent, AuLock_IR); ++ dput(parent); ++ AuTraceErr(err); ++ return err; ++} ++ ++int au_reval_dpath(struct dentry *dentry, unsigned int sigen) ++{ ++ int err; ++ struct dentry *d, *parent; ++ struct inode *inode; ++ ++ if (!au_ftest_si(au_sbi(dentry->d_sb), FAILED_REFRESH_DIR)) ++ return simple_reval_dpath(dentry, sigen); ++ ++ /* slow loop, keep it simple and stupid */ ++ /* cf: au_cpup_dirs() */ ++ err = 0; ++ parent = NULL; ++ while (au_digen_test(dentry, sigen)) { ++ d = dentry; ++ while (1) { ++ dput(parent); ++ parent = dget_parent(d); ++ if (!au_digen_test(parent, sigen)) ++ break; ++ d = parent; ++ } ++ ++ inode = d->d_inode; ++ if (d != dentry) ++ di_write_lock_child2(d); ++ ++ /* someone might update our dentry while we were sleeping */ ++ if (au_digen_test(d, sigen)) { ++ /* ++ * todo: consolidate with simple_reval_dpath(), ++ * do_refresh() and au_reval_for_attr(). ++ */ ++ di_read_lock_parent(parent, AuLock_IR); ++ err = au_refresh_dentry(d, parent); ++ di_read_unlock(parent, AuLock_IR); ++ } ++ ++ if (d != dentry) ++ di_write_unlock(d); ++ dput(parent); ++ if (unlikely(err)) ++ break; ++ } ++ ++ return err; ++} ++ ++/* ++ * if valid returns 1, otherwise 0. ++ */ ++static int aufs_d_revalidate(struct dentry *dentry, struct nameidata *nd) ++{ ++ int valid, err; ++ unsigned int sigen; ++ unsigned char do_udba; ++ struct super_block *sb; ++ struct inode *inode; ++ ++ /* todo: support rcu-walk? */ ++ if (nd && (nd->flags & LOOKUP_RCU)) ++ return -ECHILD; ++ ++ valid = 0; ++ if (unlikely(!au_di(dentry))) ++ goto out; ++ ++ inode = dentry->d_inode; ++ if (inode && is_bad_inode(inode)) ++ goto out; ++ ++ valid = 1; ++ sb = dentry->d_sb; ++ /* ++ * todo: very ugly ++ * i_mutex of parent dir may be held, ++ * but we should not return 'invalid' due to busy. ++ */ ++ err = aufs_read_lock(dentry, AuLock_FLUSH | AuLock_DW | AuLock_NOPLM); ++ if (unlikely(err)) { ++ valid = err; ++ AuTraceErr(err); ++ goto out; ++ } ++ if (unlikely(au_dbrange_test(dentry))) { ++ err = -EINVAL; ++ AuTraceErr(err); ++ goto out_dgrade; ++ } ++ ++ sigen = au_sigen(sb); ++ if (au_digen_test(dentry, sigen)) { ++ AuDebugOn(IS_ROOT(dentry)); ++ err = au_reval_dpath(dentry, sigen); ++ if (unlikely(err)) { ++ AuTraceErr(err); ++ goto out_dgrade; ++ } ++ } ++ di_downgrade_lock(dentry, AuLock_IR); ++ ++ err = -EINVAL; ++ if (inode && (IS_DEADDIR(inode) || !inode->i_nlink)) ++ goto out_inval; ++ ++ do_udba = !au_opt_test(au_mntflags(sb), UDBA_NONE); ++ if (do_udba && inode) { ++ aufs_bindex_t bstart = au_ibstart(inode); ++ struct inode *h_inode; ++ ++ if (bstart >= 0) { ++ h_inode = au_h_iptr(inode, bstart); ++ if (h_inode && au_test_higen(inode, h_inode)) ++ goto out_inval; ++ } ++ } ++ ++ err = h_d_revalidate(dentry, inode, nd, do_udba); ++ if (unlikely(!err && do_udba && au_dbstart(dentry) < 0)) { ++ err = -EIO; ++ AuDbg("both of real entry and whiteout found, %.*s, err %d\n", ++ AuDLNPair(dentry), err); ++ } ++ goto out_inval; ++ ++out_dgrade: ++ di_downgrade_lock(dentry, AuLock_IR); ++out_inval: ++ aufs_read_unlock(dentry, AuLock_IR); ++ AuTraceErr(err); ++ valid = !err; ++out: ++ if (!valid) { ++ AuDbg("%.*s invalid, %d\n", AuDLNPair(dentry), valid); ++ d_drop(dentry); ++ } ++ return valid; ++} ++ ++static void aufs_d_release(struct dentry *dentry) ++{ ++ if (au_di(dentry)) { ++ au_di_fin(dentry); ++ au_hn_di_reinit(dentry); ++ } ++} ++ ++const struct dentry_operations aufs_dop = { ++ .d_revalidate = aufs_d_revalidate, ++ .d_release = aufs_d_release ++}; +diff -urN a/fs/aufs/dentry.h b/fs/aufs/dentry.h +--- a/fs/aufs/dentry.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/dentry.h 2011-03-06 23:28:02.620413138 +0000 +@@ -0,0 +1,237 @@ ++/* ++ * Copyright (C) 2005-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * lookup and dentry operations ++ */ ++ ++#ifndef __AUFS_DENTRY_H__ ++#define __AUFS_DENTRY_H__ ++ ++#ifdef __KERNEL__ ++ ++#include ++#include ++#include "rwsem.h" ++ ++struct au_hdentry { ++ struct dentry *hd_dentry; ++ aufs_bindex_t hd_id; ++}; ++ ++struct au_dinfo { ++ atomic_t di_generation; ++ ++ struct au_rwsem di_rwsem; ++ aufs_bindex_t di_bstart, di_bend, di_bwh, di_bdiropq; ++ struct au_hdentry *di_hdentry; ++} ____cacheline_aligned_in_smp; ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* dentry.c */ ++extern const struct dentry_operations aufs_dop; ++struct au_branch; ++struct dentry *au_lkup_one(struct qstr *name, struct dentry *h_parent, ++ struct au_branch *br, struct nameidata *nd); ++struct dentry *au_sio_lkup_one(struct qstr *name, struct dentry *parent, ++ struct au_branch *br); ++int au_h_verify(struct dentry *h_dentry, unsigned int udba, struct inode *h_dir, ++ struct dentry *h_parent, struct au_branch *br); ++ ++int au_lkup_dentry(struct dentry *dentry, aufs_bindex_t bstart, mode_t type, ++ struct nameidata *nd); ++int au_lkup_neg(struct dentry *dentry, aufs_bindex_t bindex); ++int au_refresh_dentry(struct dentry *dentry, struct dentry *parent); ++int au_reval_dpath(struct dentry *dentry, unsigned int sigen); ++ ++/* dinfo.c */ ++void au_di_init_once(void *_di); ++struct au_dinfo *au_di_alloc(struct super_block *sb, unsigned int lsc); ++void au_di_free(struct au_dinfo *dinfo); ++void au_di_swap(struct au_dinfo *a, struct au_dinfo *b); ++void au_di_cp(struct au_dinfo *dst, struct au_dinfo *src); ++int au_di_init(struct dentry *dentry); ++void au_di_fin(struct dentry *dentry); ++int au_di_realloc(struct au_dinfo *dinfo, int nbr); ++ ++void di_read_lock(struct dentry *d, int flags, unsigned int lsc); ++void di_read_unlock(struct dentry *d, int flags); ++void di_downgrade_lock(struct dentry *d, int flags); ++void di_write_lock(struct dentry *d, unsigned int lsc); ++void di_write_unlock(struct dentry *d); ++void di_write_lock2_child(struct dentry *d1, struct dentry *d2, int isdir); ++void di_write_lock2_parent(struct dentry *d1, struct dentry *d2, int isdir); ++void di_write_unlock2(struct dentry *d1, struct dentry *d2); ++ ++struct dentry *au_h_dptr(struct dentry *dentry, aufs_bindex_t bindex); ++aufs_bindex_t au_dbtail(struct dentry *dentry); ++aufs_bindex_t au_dbtaildir(struct dentry *dentry); ++ ++void au_set_h_dptr(struct dentry *dentry, aufs_bindex_t bindex, ++ struct dentry *h_dentry); ++int au_digen_test(struct dentry *dentry, unsigned int sigen); ++int au_dbrange_test(struct dentry *dentry); ++void au_update_digen(struct dentry *dentry); ++void au_update_dbrange(struct dentry *dentry, int do_put_zero); ++void au_update_dbstart(struct dentry *dentry); ++void au_update_dbend(struct dentry *dentry); ++int au_find_dbindex(struct dentry *dentry, struct dentry *h_dentry); ++ ++/* ---------------------------------------------------------------------- */ ++ ++static inline struct au_dinfo *au_di(struct dentry *dentry) ++{ ++ return dentry->d_fsdata; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* lock subclass for dinfo */ ++enum { ++ AuLsc_DI_CHILD, /* child first */ ++ AuLsc_DI_CHILD2, /* rename(2), link(2), and cpup at hnotify */ ++ AuLsc_DI_CHILD3, /* copyup dirs */ ++ AuLsc_DI_PARENT, ++ AuLsc_DI_PARENT2, ++ AuLsc_DI_PARENT3, ++ AuLsc_DI_TMP /* temp for replacing dinfo */ ++}; ++ ++/* ++ * di_read_lock_child, di_write_lock_child, ++ * di_read_lock_child2, di_write_lock_child2, ++ * di_read_lock_child3, di_write_lock_child3, ++ * di_read_lock_parent, di_write_lock_parent, ++ * di_read_lock_parent2, di_write_lock_parent2, ++ * di_read_lock_parent3, di_write_lock_parent3, ++ */ ++#define AuReadLockFunc(name, lsc) \ ++static inline void di_read_lock_##name(struct dentry *d, int flags) \ ++{ di_read_lock(d, flags, AuLsc_DI_##lsc); } ++ ++#define AuWriteLockFunc(name, lsc) \ ++static inline void di_write_lock_##name(struct dentry *d) \ ++{ di_write_lock(d, AuLsc_DI_##lsc); } ++ ++#define AuRWLockFuncs(name, lsc) \ ++ AuReadLockFunc(name, lsc) \ ++ AuWriteLockFunc(name, lsc) ++ ++AuRWLockFuncs(child, CHILD); ++AuRWLockFuncs(child2, CHILD2); ++AuRWLockFuncs(child3, CHILD3); ++AuRWLockFuncs(parent, PARENT); ++AuRWLockFuncs(parent2, PARENT2); ++AuRWLockFuncs(parent3, PARENT3); ++ ++#undef AuReadLockFunc ++#undef AuWriteLockFunc ++#undef AuRWLockFuncs ++ ++#define DiMustNoWaiters(d) AuRwMustNoWaiters(&au_di(d)->di_rwsem) ++#define DiMustAnyLock(d) AuRwMustAnyLock(&au_di(d)->di_rwsem) ++#define DiMustWriteLock(d) AuRwMustWriteLock(&au_di(d)->di_rwsem) ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* todo: memory barrier? */ ++static inline unsigned int au_digen(struct dentry *d) ++{ ++ return atomic_read(&au_di(d)->di_generation); ++} ++ ++static inline void au_h_dentry_init(struct au_hdentry *hdentry) ++{ ++ hdentry->hd_dentry = NULL; ++} ++ ++static inline void au_hdput(struct au_hdentry *hd) ++{ ++ if (hd) ++ dput(hd->hd_dentry); ++} ++ ++static inline aufs_bindex_t au_dbstart(struct dentry *dentry) ++{ ++ DiMustAnyLock(dentry); ++ return au_di(dentry)->di_bstart; ++} ++ ++static inline aufs_bindex_t au_dbend(struct dentry *dentry) ++{ ++ DiMustAnyLock(dentry); ++ return au_di(dentry)->di_bend; ++} ++ ++static inline aufs_bindex_t au_dbwh(struct dentry *dentry) ++{ ++ DiMustAnyLock(dentry); ++ return au_di(dentry)->di_bwh; ++} ++ ++static inline aufs_bindex_t au_dbdiropq(struct dentry *dentry) ++{ ++ DiMustAnyLock(dentry); ++ return au_di(dentry)->di_bdiropq; ++} ++ ++/* todo: hard/soft set? */ ++static inline void au_set_dbstart(struct dentry *dentry, aufs_bindex_t bindex) ++{ ++ DiMustWriteLock(dentry); ++ au_di(dentry)->di_bstart = bindex; ++} ++ ++static inline void au_set_dbend(struct dentry *dentry, aufs_bindex_t bindex) ++{ ++ DiMustWriteLock(dentry); ++ au_di(dentry)->di_bend = bindex; ++} ++ ++static inline void au_set_dbwh(struct dentry *dentry, aufs_bindex_t bindex) ++{ ++ DiMustWriteLock(dentry); ++ /* dbwh can be outside of bstart - bend range */ ++ au_di(dentry)->di_bwh = bindex; ++} ++ ++static inline void au_set_dbdiropq(struct dentry *dentry, aufs_bindex_t bindex) ++{ ++ DiMustWriteLock(dentry); ++ au_di(dentry)->di_bdiropq = bindex; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++#ifdef CONFIG_AUFS_HNOTIFY ++static inline void au_digen_dec(struct dentry *d) ++{ ++ atomic_dec(&au_di(d)->di_generation); ++} ++ ++static inline void au_hn_di_reinit(struct dentry *dentry) ++{ ++ dentry->d_fsdata = NULL; ++} ++#else ++AuStubVoid(au_hn_di_reinit, struct dentry *dentry __maybe_unused) ++#endif /* CONFIG_AUFS_HNOTIFY */ ++ ++#endif /* __KERNEL__ */ ++#endif /* __AUFS_DENTRY_H__ */ +diff -urN a/fs/aufs/dinfo.c b/fs/aufs/dinfo.c +--- a/fs/aufs/dinfo.c 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/dinfo.c 2011-03-06 23:28:02.620413138 +0000 +@@ -0,0 +1,493 @@ ++/* ++ * Copyright (C) 2005-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * dentry private data ++ */ ++ ++#include "aufs.h" ++ ++void au_di_init_once(void *_dinfo) ++{ ++ struct au_dinfo *dinfo = _dinfo; ++ static struct lock_class_key aufs_di; ++ ++ au_rw_init(&dinfo->di_rwsem); ++ au_rw_class(&dinfo->di_rwsem, &aufs_di); ++} ++ ++struct au_dinfo *au_di_alloc(struct super_block *sb, unsigned int lsc) ++{ ++ struct au_dinfo *dinfo; ++ int nbr, i; ++ ++ dinfo = au_cache_alloc_dinfo(); ++ if (unlikely(!dinfo)) ++ goto out; ++ ++ nbr = au_sbend(sb) + 1; ++ if (nbr <= 0) ++ nbr = 1; ++ dinfo->di_hdentry = kcalloc(nbr, sizeof(*dinfo->di_hdentry), GFP_NOFS); ++ if (dinfo->di_hdentry) { ++ au_rw_write_lock_nested(&dinfo->di_rwsem, lsc); ++ dinfo->di_bstart = -1; ++ dinfo->di_bend = -1; ++ dinfo->di_bwh = -1; ++ dinfo->di_bdiropq = -1; ++ for (i = 0; i < nbr; i++) ++ dinfo->di_hdentry[i].hd_id = -1; ++ goto out; ++ } ++ ++ au_cache_free_dinfo(dinfo); ++ dinfo = NULL; ++ ++out: ++ return dinfo; ++} ++ ++void au_di_free(struct au_dinfo *dinfo) ++{ ++ struct au_hdentry *p; ++ aufs_bindex_t bend, bindex; ++ ++ /* dentry may not be revalidated */ ++ bindex = dinfo->di_bstart; ++ if (bindex >= 0) { ++ bend = dinfo->di_bend; ++ p = dinfo->di_hdentry + bindex; ++ while (bindex++ <= bend) ++ au_hdput(p++); ++ } ++ kfree(dinfo->di_hdentry); ++ au_cache_free_dinfo(dinfo); ++} ++ ++void au_di_swap(struct au_dinfo *a, struct au_dinfo *b) ++{ ++ struct au_hdentry *p; ++ aufs_bindex_t bi; ++ ++ AuRwMustWriteLock(&a->di_rwsem); ++ AuRwMustWriteLock(&b->di_rwsem); ++ ++#define DiSwap(v, name) \ ++ do { \ ++ v = a->di_##name; \ ++ a->di_##name = b->di_##name; \ ++ b->di_##name = v; \ ++ } while (0) ++ ++ DiSwap(p, hdentry); ++ DiSwap(bi, bstart); ++ DiSwap(bi, bend); ++ DiSwap(bi, bwh); ++ DiSwap(bi, bdiropq); ++ /* smp_mb(); */ ++ ++#undef DiSwap ++} ++ ++void au_di_cp(struct au_dinfo *dst, struct au_dinfo *src) ++{ ++ AuRwMustWriteLock(&dst->di_rwsem); ++ AuRwMustWriteLock(&src->di_rwsem); ++ ++ dst->di_bstart = src->di_bstart; ++ dst->di_bend = src->di_bend; ++ dst->di_bwh = src->di_bwh; ++ dst->di_bdiropq = src->di_bdiropq; ++ /* smp_mb(); */ ++} ++ ++int au_di_init(struct dentry *dentry) ++{ ++ int err; ++ struct super_block *sb; ++ struct au_dinfo *dinfo; ++ ++ err = 0; ++ sb = dentry->d_sb; ++ dinfo = au_di_alloc(sb, AuLsc_DI_CHILD); ++ if (dinfo) { ++ atomic_set(&dinfo->di_generation, au_sigen(sb)); ++ /* smp_mb(); */ /* atomic_set */ ++ dentry->d_fsdata = dinfo; ++ } else ++ err = -ENOMEM; ++ ++ return err; ++} ++ ++void au_di_fin(struct dentry *dentry) ++{ ++ struct au_dinfo *dinfo; ++ ++ dinfo = au_di(dentry); ++ AuRwDestroy(&dinfo->di_rwsem); ++ au_di_free(dinfo); ++} ++ ++int au_di_realloc(struct au_dinfo *dinfo, int nbr) ++{ ++ int err, sz; ++ struct au_hdentry *hdp; ++ ++ AuRwMustWriteLock(&dinfo->di_rwsem); ++ ++ err = -ENOMEM; ++ sz = sizeof(*hdp) * (dinfo->di_bend + 1); ++ if (!sz) ++ sz = sizeof(*hdp); ++ hdp = au_kzrealloc(dinfo->di_hdentry, sz, sizeof(*hdp) * nbr, GFP_NOFS); ++ if (hdp) { ++ dinfo->di_hdentry = hdp; ++ err = 0; ++ } ++ ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++static void do_ii_write_lock(struct inode *inode, unsigned int lsc) ++{ ++ switch (lsc) { ++ case AuLsc_DI_CHILD: ++ ii_write_lock_child(inode); ++ break; ++ case AuLsc_DI_CHILD2: ++ ii_write_lock_child2(inode); ++ break; ++ case AuLsc_DI_CHILD3: ++ ii_write_lock_child3(inode); ++ break; ++ case AuLsc_DI_PARENT: ++ ii_write_lock_parent(inode); ++ break; ++ case AuLsc_DI_PARENT2: ++ ii_write_lock_parent2(inode); ++ break; ++ case AuLsc_DI_PARENT3: ++ ii_write_lock_parent3(inode); ++ break; ++ default: ++ BUG(); ++ } ++} ++ ++static void do_ii_read_lock(struct inode *inode, unsigned int lsc) ++{ ++ switch (lsc) { ++ case AuLsc_DI_CHILD: ++ ii_read_lock_child(inode); ++ break; ++ case AuLsc_DI_CHILD2: ++ ii_read_lock_child2(inode); ++ break; ++ case AuLsc_DI_CHILD3: ++ ii_read_lock_child3(inode); ++ break; ++ case AuLsc_DI_PARENT: ++ ii_read_lock_parent(inode); ++ break; ++ case AuLsc_DI_PARENT2: ++ ii_read_lock_parent2(inode); ++ break; ++ case AuLsc_DI_PARENT3: ++ ii_read_lock_parent3(inode); ++ break; ++ default: ++ BUG(); ++ } ++} ++ ++void di_read_lock(struct dentry *d, int flags, unsigned int lsc) ++{ ++ au_rw_read_lock_nested(&au_di(d)->di_rwsem, lsc); ++ if (d->d_inode) { ++ if (au_ftest_lock(flags, IW)) ++ do_ii_write_lock(d->d_inode, lsc); ++ else if (au_ftest_lock(flags, IR)) ++ do_ii_read_lock(d->d_inode, lsc); ++ } ++} ++ ++void di_read_unlock(struct dentry *d, int flags) ++{ ++ if (d->d_inode) { ++ if (au_ftest_lock(flags, IW)) { ++ au_dbg_verify_dinode(d); ++ ii_write_unlock(d->d_inode); ++ } else if (au_ftest_lock(flags, IR)) { ++ au_dbg_verify_dinode(d); ++ ii_read_unlock(d->d_inode); ++ } ++ } ++ au_rw_read_unlock(&au_di(d)->di_rwsem); ++} ++ ++void di_downgrade_lock(struct dentry *d, int flags) ++{ ++ if (d->d_inode && au_ftest_lock(flags, IR)) ++ ii_downgrade_lock(d->d_inode); ++ au_rw_dgrade_lock(&au_di(d)->di_rwsem); ++} ++ ++void di_write_lock(struct dentry *d, unsigned int lsc) ++{ ++ au_rw_write_lock_nested(&au_di(d)->di_rwsem, lsc); ++ if (d->d_inode) ++ do_ii_write_lock(d->d_inode, lsc); ++} ++ ++void di_write_unlock(struct dentry *d) ++{ ++ au_dbg_verify_dinode(d); ++ if (d->d_inode) ++ ii_write_unlock(d->d_inode); ++ au_rw_write_unlock(&au_di(d)->di_rwsem); ++} ++ ++void di_write_lock2_child(struct dentry *d1, struct dentry *d2, int isdir) ++{ ++ AuDebugOn(d1 == d2 ++ || d1->d_inode == d2->d_inode ++ || d1->d_sb != d2->d_sb); ++ ++ if (isdir && au_test_subdir(d1, d2)) { ++ di_write_lock_child(d1); ++ di_write_lock_child2(d2); ++ } else { ++ /* there should be no races */ ++ di_write_lock_child(d2); ++ di_write_lock_child2(d1); ++ } ++} ++ ++void di_write_lock2_parent(struct dentry *d1, struct dentry *d2, int isdir) ++{ ++ AuDebugOn(d1 == d2 ++ || d1->d_inode == d2->d_inode ++ || d1->d_sb != d2->d_sb); ++ ++ if (isdir && au_test_subdir(d1, d2)) { ++ di_write_lock_parent(d1); ++ di_write_lock_parent2(d2); ++ } else { ++ /* there should be no races */ ++ di_write_lock_parent(d2); ++ di_write_lock_parent2(d1); ++ } ++} ++ ++void di_write_unlock2(struct dentry *d1, struct dentry *d2) ++{ ++ di_write_unlock(d1); ++ if (d1->d_inode == d2->d_inode) ++ au_rw_write_unlock(&au_di(d2)->di_rwsem); ++ else ++ di_write_unlock(d2); ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++struct dentry *au_h_dptr(struct dentry *dentry, aufs_bindex_t bindex) ++{ ++ struct dentry *d; ++ ++ DiMustAnyLock(dentry); ++ ++ if (au_dbstart(dentry) < 0 || bindex < au_dbstart(dentry)) ++ return NULL; ++ AuDebugOn(bindex < 0); ++ d = au_di(dentry)->di_hdentry[0 + bindex].hd_dentry; ++ AuDebugOn(d && d->d_count <= 0); ++ return d; ++} ++ ++aufs_bindex_t au_dbtail(struct dentry *dentry) ++{ ++ aufs_bindex_t bend, bwh; ++ ++ bend = au_dbend(dentry); ++ if (0 <= bend) { ++ bwh = au_dbwh(dentry); ++ if (!bwh) ++ return bwh; ++ if (0 < bwh && bwh < bend) ++ return bwh - 1; ++ } ++ return bend; ++} ++ ++aufs_bindex_t au_dbtaildir(struct dentry *dentry) ++{ ++ aufs_bindex_t bend, bopq; ++ ++ bend = au_dbtail(dentry); ++ if (0 <= bend) { ++ bopq = au_dbdiropq(dentry); ++ if (0 <= bopq && bopq < bend) ++ bend = bopq; ++ } ++ return bend; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++void au_set_h_dptr(struct dentry *dentry, aufs_bindex_t bindex, ++ struct dentry *h_dentry) ++{ ++ struct au_hdentry *hd = au_di(dentry)->di_hdentry + bindex; ++ struct au_branch *br; ++ ++ DiMustWriteLock(dentry); ++ ++ au_hdput(hd); ++ hd->hd_dentry = h_dentry; ++ if (h_dentry) { ++ br = au_sbr(dentry->d_sb, bindex); ++ hd->hd_id = br->br_id; ++ } ++} ++ ++int au_dbrange_test(struct dentry *dentry) ++{ ++ int err; ++ aufs_bindex_t bstart, bend; ++ ++ err = 0; ++ bstart = au_dbstart(dentry); ++ bend = au_dbend(dentry); ++ if (bstart >= 0) ++ AuDebugOn(bend < 0 && bstart > bend); ++ else { ++ err = -EIO; ++ AuDebugOn(bend >= 0); ++ } ++ ++ return err; ++} ++ ++int au_digen_test(struct dentry *dentry, unsigned int sigen) ++{ ++ int err; ++ ++ err = 0; ++ if (unlikely(au_digen(dentry) != sigen ++ || au_iigen_test(dentry->d_inode, sigen))) ++ err = -EIO; ++ ++ return err; ++} ++ ++void au_update_digen(struct dentry *dentry) ++{ ++ atomic_set(&au_di(dentry)->di_generation, au_sigen(dentry->d_sb)); ++ /* smp_mb(); */ /* atomic_set */ ++} ++ ++void au_update_dbrange(struct dentry *dentry, int do_put_zero) ++{ ++ struct au_dinfo *dinfo; ++ struct dentry *h_d; ++ struct au_hdentry *hdp; ++ ++ DiMustWriteLock(dentry); ++ ++ dinfo = au_di(dentry); ++ if (!dinfo || dinfo->di_bstart < 0) ++ return; ++ ++ hdp = dinfo->di_hdentry; ++ if (do_put_zero) { ++ aufs_bindex_t bindex, bend; ++ ++ bend = dinfo->di_bend; ++ for (bindex = dinfo->di_bstart; bindex <= bend; bindex++) { ++ h_d = hdp[0 + bindex].hd_dentry; ++ if (h_d && !h_d->d_inode) ++ au_set_h_dptr(dentry, bindex, NULL); ++ } ++ } ++ ++ dinfo->di_bstart = -1; ++ while (++dinfo->di_bstart <= dinfo->di_bend) ++ if (hdp[0 + dinfo->di_bstart].hd_dentry) ++ break; ++ if (dinfo->di_bstart > dinfo->di_bend) { ++ dinfo->di_bstart = -1; ++ dinfo->di_bend = -1; ++ return; ++ } ++ ++ dinfo->di_bend++; ++ while (0 <= --dinfo->di_bend) ++ if (hdp[0 + dinfo->di_bend].hd_dentry) ++ break; ++ AuDebugOn(dinfo->di_bstart > dinfo->di_bend || dinfo->di_bend < 0); ++} ++ ++void au_update_dbstart(struct dentry *dentry) ++{ ++ aufs_bindex_t bindex, bend; ++ struct dentry *h_dentry; ++ ++ bend = au_dbend(dentry); ++ for (bindex = au_dbstart(dentry); bindex <= bend; bindex++) { ++ h_dentry = au_h_dptr(dentry, bindex); ++ if (!h_dentry) ++ continue; ++ if (h_dentry->d_inode) { ++ au_set_dbstart(dentry, bindex); ++ return; ++ } ++ au_set_h_dptr(dentry, bindex, NULL); ++ } ++} ++ ++void au_update_dbend(struct dentry *dentry) ++{ ++ aufs_bindex_t bindex, bstart; ++ struct dentry *h_dentry; ++ ++ bstart = au_dbstart(dentry); ++ for (bindex = au_dbend(dentry); bindex >= bstart; bindex--) { ++ h_dentry = au_h_dptr(dentry, bindex); ++ if (!h_dentry) ++ continue; ++ if (h_dentry->d_inode) { ++ au_set_dbend(dentry, bindex); ++ return; ++ } ++ au_set_h_dptr(dentry, bindex, NULL); ++ } ++} ++ ++int au_find_dbindex(struct dentry *dentry, struct dentry *h_dentry) ++{ ++ aufs_bindex_t bindex, bend; ++ ++ bend = au_dbend(dentry); ++ for (bindex = au_dbstart(dentry); bindex <= bend; bindex++) ++ if (au_h_dptr(dentry, bindex) == h_dentry) ++ return bindex; ++ return -1; ++} +diff -urN a/fs/aufs/dir.c b/fs/aufs/dir.c +--- a/fs/aufs/dir.c 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/dir.c 2011-03-06 23:28:02.616413258 +0000 +@@ -0,0 +1,647 @@ ++/* ++ * Copyright (C) 2005-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * directory operations ++ */ ++ ++#include ++#include ++#include "aufs.h" ++ ++void au_add_nlink(struct inode *dir, struct inode *h_dir) ++{ ++ AuDebugOn(!S_ISDIR(dir->i_mode) || !S_ISDIR(h_dir->i_mode)); ++ ++ dir->i_nlink += h_dir->i_nlink - 2; ++ if (h_dir->i_nlink < 2) ++ dir->i_nlink += 2; ++} ++ ++void au_sub_nlink(struct inode *dir, struct inode *h_dir) ++{ ++ AuDebugOn(!S_ISDIR(dir->i_mode) || !S_ISDIR(h_dir->i_mode)); ++ ++ dir->i_nlink -= h_dir->i_nlink - 2; ++ if (h_dir->i_nlink < 2) ++ dir->i_nlink -= 2; ++} ++ ++loff_t au_dir_size(struct file *file, struct dentry *dentry) ++{ ++ loff_t sz; ++ aufs_bindex_t bindex, bend; ++ struct file *h_file; ++ struct dentry *h_dentry; ++ ++ sz = 0; ++ if (file) { ++ AuDebugOn(!file->f_dentry); ++ AuDebugOn(!file->f_dentry->d_inode); ++ AuDebugOn(!S_ISDIR(file->f_dentry->d_inode->i_mode)); ++ ++ bend = au_fbend_dir(file); ++ for (bindex = au_fbstart(file); ++ bindex <= bend && sz < KMALLOC_MAX_SIZE; ++ bindex++) { ++ h_file = au_hf_dir(file, bindex); ++ if (h_file ++ && h_file->f_dentry ++ && h_file->f_dentry->d_inode) ++ sz += i_size_read(h_file->f_dentry->d_inode); ++ } ++ } else { ++ AuDebugOn(!dentry); ++ AuDebugOn(!dentry->d_inode); ++ AuDebugOn(!S_ISDIR(dentry->d_inode->i_mode)); ++ ++ bend = au_dbtaildir(dentry); ++ for (bindex = au_dbstart(dentry); ++ bindex <= bend && sz < KMALLOC_MAX_SIZE; ++ bindex++) { ++ h_dentry = au_h_dptr(dentry, bindex); ++ if (h_dentry && h_dentry->d_inode) ++ sz += i_size_read(h_dentry->d_inode); ++ } ++ } ++ if (sz < KMALLOC_MAX_SIZE) ++ sz = roundup_pow_of_two(sz); ++ if (sz > KMALLOC_MAX_SIZE) ++ sz = KMALLOC_MAX_SIZE; ++ else if (sz < NAME_MAX) { ++ BUILD_BUG_ON(AUFS_RDBLK_DEF < NAME_MAX); ++ sz = AUFS_RDBLK_DEF; ++ } ++ return sz; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++static int reopen_dir(struct file *file) ++{ ++ int err; ++ unsigned int flags; ++ aufs_bindex_t bindex, btail, bstart; ++ struct dentry *dentry, *h_dentry; ++ struct file *h_file; ++ ++ /* open all lower dirs */ ++ dentry = file->f_dentry; ++ bstart = au_dbstart(dentry); ++ for (bindex = au_fbstart(file); bindex < bstart; bindex++) ++ au_set_h_fptr(file, bindex, NULL); ++ au_set_fbstart(file, bstart); ++ ++ btail = au_dbtaildir(dentry); ++ for (bindex = au_fbend_dir(file); btail < bindex; bindex--) ++ au_set_h_fptr(file, bindex, NULL); ++ au_set_fbend_dir(file, btail); ++ ++ flags = vfsub_file_flags(file); ++ for (bindex = bstart; bindex <= btail; bindex++) { ++ h_dentry = au_h_dptr(dentry, bindex); ++ if (!h_dentry) ++ continue; ++ h_file = au_hf_dir(file, bindex); ++ if (h_file) ++ continue; ++ ++ h_file = au_h_open(dentry, bindex, flags, file); ++ err = PTR_ERR(h_file); ++ if (IS_ERR(h_file)) ++ goto out; /* close all? */ ++ au_set_h_fptr(file, bindex, h_file); ++ } ++ au_update_figen(file); ++ /* todo: necessary? */ ++ /* file->f_ra = h_file->f_ra; */ ++ err = 0; ++ ++out: ++ return err; ++} ++ ++static int do_open_dir(struct file *file, int flags) ++{ ++ int err; ++ aufs_bindex_t bindex, btail; ++ struct dentry *dentry, *h_dentry; ++ struct file *h_file; ++ ++ FiMustWriteLock(file); ++ ++ dentry = file->f_dentry; ++ err = au_alive_dir(dentry); ++ if (unlikely(err)) ++ goto out; ++ ++ file->f_version = dentry->d_inode->i_version; ++ bindex = au_dbstart(dentry); ++ au_set_fbstart(file, bindex); ++ btail = au_dbtaildir(dentry); ++ au_set_fbend_dir(file, btail); ++ for (; !err && bindex <= btail; bindex++) { ++ h_dentry = au_h_dptr(dentry, bindex); ++ if (!h_dentry) ++ continue; ++ ++ h_file = au_h_open(dentry, bindex, flags, file); ++ if (IS_ERR(h_file)) { ++ err = PTR_ERR(h_file); ++ break; ++ } ++ au_set_h_fptr(file, bindex, h_file); ++ } ++ au_update_figen(file); ++ /* todo: necessary? */ ++ /* file->f_ra = h_file->f_ra; */ ++ if (!err) ++ return 0; /* success */ ++ ++ /* close all */ ++ for (bindex = au_fbstart(file); bindex <= btail; bindex++) ++ au_set_h_fptr(file, bindex, NULL); ++ au_set_fbstart(file, -1); ++ au_set_fbend_dir(file, -1); ++ ++out: ++ return err; ++} ++ ++static int aufs_open_dir(struct inode *inode __maybe_unused, ++ struct file *file) ++{ ++ int err; ++ struct super_block *sb; ++ struct au_fidir *fidir; ++ ++ err = -ENOMEM; ++ sb = file->f_dentry->d_sb; ++ si_read_lock(sb, AuLock_FLUSH); ++ fidir = au_fidir_alloc(sb); ++ if (fidir) { ++ err = au_do_open(file, do_open_dir, fidir); ++ if (unlikely(err)) ++ kfree(fidir); ++ } ++ si_read_unlock(sb); ++ return err; ++} ++ ++static int aufs_release_dir(struct inode *inode __maybe_unused, ++ struct file *file) ++{ ++ struct au_vdir *vdir_cache; ++ struct au_finfo *finfo; ++ struct au_fidir *fidir; ++ aufs_bindex_t bindex, bend; ++ ++ finfo = au_fi(file); ++ fidir = finfo->fi_hdir; ++ if (fidir) { ++ /* remove me from sb->s_files */ ++ file_sb_list_del(file); ++ ++ vdir_cache = fidir->fd_vdir_cache; /* lock-free */ ++ if (vdir_cache) ++ au_vdir_free(vdir_cache); ++ ++ bindex = finfo->fi_btop; ++ if (bindex >= 0) { ++ /* ++ * calls fput() instead of filp_close(), ++ * since no dnotify or lock for the lower file. ++ */ ++ bend = fidir->fd_bbot; ++ for (; bindex <= bend; bindex++) ++ au_set_h_fptr(file, bindex, NULL); ++ } ++ kfree(fidir); ++ finfo->fi_hdir = NULL; ++ } ++ au_finfo_fin(file); ++ return 0; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++static int au_do_flush_dir(struct file *file, fl_owner_t id) ++{ ++ int err; ++ aufs_bindex_t bindex, bend; ++ struct file *h_file; ++ ++ err = 0; ++ bend = au_fbend_dir(file); ++ for (bindex = au_fbstart(file); !err && bindex <= bend; bindex++) { ++ h_file = au_hf_dir(file, bindex); ++ if (h_file) ++ err = vfsub_flush(h_file, id); ++ } ++ return err; ++} ++ ++static int aufs_flush_dir(struct file *file, fl_owner_t id) ++{ ++ return au_do_flush(file, id, au_do_flush_dir); ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++static int au_do_fsync_dir_no_file(struct dentry *dentry, int datasync) ++{ ++ int err; ++ aufs_bindex_t bend, bindex; ++ struct inode *inode; ++ struct super_block *sb; ++ ++ err = 0; ++ sb = dentry->d_sb; ++ inode = dentry->d_inode; ++ IMustLock(inode); ++ bend = au_dbend(dentry); ++ for (bindex = au_dbstart(dentry); !err && bindex <= bend; bindex++) { ++ struct path h_path; ++ struct inode *h_inode; ++ ++ if (au_test_ro(sb, bindex, inode)) ++ continue; ++ h_path.dentry = au_h_dptr(dentry, bindex); ++ if (!h_path.dentry) ++ continue; ++ h_inode = h_path.dentry->d_inode; ++ if (!h_inode) ++ continue; ++ ++ /* no mnt_want_write() */ ++ /* cf. fs/nsfd/vfs.c and fs/nfsd/nfs4recover.c */ ++ /* todo: inotiry fired? */ ++ h_path.mnt = au_sbr_mnt(sb, bindex); ++ mutex_lock(&h_inode->i_mutex); ++ err = filemap_fdatawrite(h_inode->i_mapping); ++ AuDebugOn(!h_inode->i_fop); ++ if (!err && h_inode->i_fop->fsync) ++ err = h_inode->i_fop->fsync(NULL, datasync); ++ if (!err) ++ err = filemap_fdatawrite(h_inode->i_mapping); ++ if (!err) ++ vfsub_update_h_iattr(&h_path, /*did*/NULL); /*ignore*/ ++ mutex_unlock(&h_inode->i_mutex); ++ } ++ ++ return err; ++} ++ ++static int au_do_fsync_dir(struct file *file, int datasync) ++{ ++ int err; ++ aufs_bindex_t bend, bindex; ++ struct file *h_file; ++ struct super_block *sb; ++ struct inode *inode; ++ struct mutex *h_mtx; ++ ++ err = au_reval_and_lock_fdi(file, reopen_dir, /*wlock*/1); ++ if (unlikely(err)) ++ goto out; ++ ++ sb = file->f_dentry->d_sb; ++ inode = file->f_dentry->d_inode; ++ bend = au_fbend_dir(file); ++ for (bindex = au_fbstart(file); !err && bindex <= bend; bindex++) { ++ h_file = au_hf_dir(file, bindex); ++ if (!h_file || au_test_ro(sb, bindex, inode)) ++ continue; ++ ++ err = vfs_fsync(h_file, datasync); ++ if (!err) { ++ h_mtx = &h_file->f_dentry->d_inode->i_mutex; ++ mutex_lock(h_mtx); ++ vfsub_update_h_iattr(&h_file->f_path, /*did*/NULL); ++ /*ignore*/ ++ mutex_unlock(h_mtx); ++ } ++ } ++ ++out: ++ return err; ++} ++ ++/* ++ * @file may be NULL ++ */ ++static int aufs_fsync_dir(struct file *file, int datasync) ++{ ++ int err; ++ struct dentry *dentry; ++ struct super_block *sb; ++ ++ dentry = file->f_dentry; ++ IMustLock(dentry->d_inode); ++ ++ err = 0; ++ sb = dentry->d_sb; ++ si_noflush_read_lock(sb); ++ if (file) ++ err = au_do_fsync_dir(file, datasync); ++ else { ++ di_write_lock_child(dentry); ++ err = au_do_fsync_dir_no_file(dentry, datasync); ++ } ++ au_cpup_attr_timesizes(dentry->d_inode); ++ di_write_unlock(dentry); ++ if (file) ++ fi_write_unlock(file); ++ ++ si_read_unlock(sb); ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++static int aufs_readdir(struct file *file, void *dirent, filldir_t filldir) ++{ ++ int err; ++ struct dentry *dentry; ++ struct inode *inode; ++ struct super_block *sb; ++ ++ dentry = file->f_dentry; ++ inode = dentry->d_inode; ++ IMustLock(inode); ++ ++ sb = dentry->d_sb; ++ si_read_lock(sb, AuLock_FLUSH); ++ err = au_reval_and_lock_fdi(file, reopen_dir, /*wlock*/1); ++ if (unlikely(err)) ++ goto out; ++ err = au_alive_dir(dentry); ++ if (!err) ++ err = au_vdir_init(file); ++ di_downgrade_lock(dentry, AuLock_IR); ++ if (unlikely(err)) ++ goto out_unlock; ++ ++ if (!au_test_nfsd()) { ++ err = au_vdir_fill_de(file, dirent, filldir); ++ fsstack_copy_attr_atime(inode, ++ au_h_iptr(inode, au_ibstart(inode))); ++ } else { ++ /* ++ * nfsd filldir may call lookup_one_len(), vfs_getattr(), ++ * encode_fh() and others. ++ */ ++ struct inode *h_inode = au_h_iptr(inode, au_ibstart(inode)); ++ ++ di_read_unlock(dentry, AuLock_IR); ++ si_read_unlock(sb); ++ err = au_vdir_fill_de(file, dirent, filldir); ++ fsstack_copy_attr_atime(inode, h_inode); ++ fi_write_unlock(file); ++ ++ AuTraceErr(err); ++ return err; ++ } ++ ++out_unlock: ++ di_read_unlock(dentry, AuLock_IR); ++ fi_write_unlock(file); ++out: ++ si_read_unlock(sb); ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++#define AuTestEmpty_WHONLY 1 ++#define AuTestEmpty_CALLED (1 << 1) ++#define AuTestEmpty_SHWH (1 << 2) ++#define au_ftest_testempty(flags, name) ((flags) & AuTestEmpty_##name) ++#define au_fset_testempty(flags, name) \ ++ do { (flags) |= AuTestEmpty_##name; } while (0) ++#define au_fclr_testempty(flags, name) \ ++ do { (flags) &= ~AuTestEmpty_##name; } while (0) ++ ++#ifndef CONFIG_AUFS_SHWH ++#undef AuTestEmpty_SHWH ++#define AuTestEmpty_SHWH 0 ++#endif ++ ++struct test_empty_arg { ++ struct au_nhash *whlist; ++ unsigned int flags; ++ int err; ++ aufs_bindex_t bindex; ++}; ++ ++static int test_empty_cb(void *__arg, const char *__name, int namelen, ++ loff_t offset __maybe_unused, u64 ino, ++ unsigned int d_type) ++{ ++ struct test_empty_arg *arg = __arg; ++ char *name = (void *)__name; ++ ++ arg->err = 0; ++ au_fset_testempty(arg->flags, CALLED); ++ /* smp_mb(); */ ++ if (name[0] == '.' ++ && (namelen == 1 || (name[1] == '.' && namelen == 2))) ++ goto out; /* success */ ++ ++ if (namelen <= AUFS_WH_PFX_LEN ++ || memcmp(name, AUFS_WH_PFX, AUFS_WH_PFX_LEN)) { ++ if (au_ftest_testempty(arg->flags, WHONLY) ++ && !au_nhash_test_known_wh(arg->whlist, name, namelen)) ++ arg->err = -ENOTEMPTY; ++ goto out; ++ } ++ ++ name += AUFS_WH_PFX_LEN; ++ namelen -= AUFS_WH_PFX_LEN; ++ if (!au_nhash_test_known_wh(arg->whlist, name, namelen)) ++ arg->err = au_nhash_append_wh ++ (arg->whlist, name, namelen, ino, d_type, arg->bindex, ++ au_ftest_testempty(arg->flags, SHWH)); ++ ++out: ++ /* smp_mb(); */ ++ AuTraceErr(arg->err); ++ return arg->err; ++} ++ ++static int do_test_empty(struct dentry *dentry, struct test_empty_arg *arg) ++{ ++ int err; ++ struct file *h_file; ++ ++ h_file = au_h_open(dentry, arg->bindex, ++ O_RDONLY | O_NONBLOCK | O_DIRECTORY | O_LARGEFILE, ++ /*file*/NULL); ++ err = PTR_ERR(h_file); ++ if (IS_ERR(h_file)) ++ goto out; ++ ++ err = 0; ++ if (!au_opt_test(au_mntflags(dentry->d_sb), UDBA_NONE) ++ && !h_file->f_dentry->d_inode->i_nlink) ++ goto out_put; ++ ++ do { ++ arg->err = 0; ++ au_fclr_testempty(arg->flags, CALLED); ++ /* smp_mb(); */ ++ err = vfsub_readdir(h_file, test_empty_cb, arg); ++ if (err >= 0) ++ err = arg->err; ++ } while (!err && au_ftest_testempty(arg->flags, CALLED)); ++ ++out_put: ++ fput(h_file); ++ au_sbr_put(dentry->d_sb, arg->bindex); ++out: ++ return err; ++} ++ ++struct do_test_empty_args { ++ int *errp; ++ struct dentry *dentry; ++ struct test_empty_arg *arg; ++}; ++ ++static void call_do_test_empty(void *args) ++{ ++ struct do_test_empty_args *a = args; ++ *a->errp = do_test_empty(a->dentry, a->arg); ++} ++ ++static int sio_test_empty(struct dentry *dentry, struct test_empty_arg *arg) ++{ ++ int err, wkq_err; ++ struct dentry *h_dentry; ++ struct inode *h_inode; ++ ++ h_dentry = au_h_dptr(dentry, arg->bindex); ++ h_inode = h_dentry->d_inode; ++ mutex_lock_nested(&h_inode->i_mutex, AuLsc_I_CHILD); ++ err = au_test_h_perm_sio(h_inode, MAY_EXEC | MAY_READ); ++ mutex_unlock(&h_inode->i_mutex); ++ if (!err) ++ err = do_test_empty(dentry, arg); ++ else { ++ struct do_test_empty_args args = { ++ .errp = &err, ++ .dentry = dentry, ++ .arg = arg ++ }; ++ unsigned int flags = arg->flags; ++ ++ wkq_err = au_wkq_wait(call_do_test_empty, &args); ++ if (unlikely(wkq_err)) ++ err = wkq_err; ++ arg->flags = flags; ++ } ++ ++ return err; ++} ++ ++int au_test_empty_lower(struct dentry *dentry) ++{ ++ int err; ++ unsigned int rdhash; ++ aufs_bindex_t bindex, bstart, btail; ++ struct au_nhash whlist; ++ struct test_empty_arg arg; ++ ++ SiMustAnyLock(dentry->d_sb); ++ ++ rdhash = au_sbi(dentry->d_sb)->si_rdhash; ++ if (!rdhash) ++ rdhash = au_rdhash_est(au_dir_size(/*file*/NULL, dentry)); ++ err = au_nhash_alloc(&whlist, rdhash, GFP_NOFS); ++ if (unlikely(err)) ++ goto out; ++ ++ arg.flags = 0; ++ arg.whlist = &whlist; ++ bstart = au_dbstart(dentry); ++ if (au_opt_test(au_mntflags(dentry->d_sb), SHWH)) ++ au_fset_testempty(arg.flags, SHWH); ++ arg.bindex = bstart; ++ err = do_test_empty(dentry, &arg); ++ if (unlikely(err)) ++ goto out_whlist; ++ ++ au_fset_testempty(arg.flags, WHONLY); ++ btail = au_dbtaildir(dentry); ++ for (bindex = bstart + 1; !err && bindex <= btail; bindex++) { ++ struct dentry *h_dentry; ++ ++ h_dentry = au_h_dptr(dentry, bindex); ++ if (h_dentry && h_dentry->d_inode) { ++ arg.bindex = bindex; ++ err = do_test_empty(dentry, &arg); ++ } ++ } ++ ++out_whlist: ++ au_nhash_wh_free(&whlist); ++out: ++ return err; ++} ++ ++int au_test_empty(struct dentry *dentry, struct au_nhash *whlist) ++{ ++ int err; ++ struct test_empty_arg arg; ++ aufs_bindex_t bindex, btail; ++ ++ err = 0; ++ arg.whlist = whlist; ++ arg.flags = AuTestEmpty_WHONLY; ++ if (au_opt_test(au_mntflags(dentry->d_sb), SHWH)) ++ au_fset_testempty(arg.flags, SHWH); ++ btail = au_dbtaildir(dentry); ++ for (bindex = au_dbstart(dentry); !err && bindex <= btail; bindex++) { ++ struct dentry *h_dentry; ++ ++ h_dentry = au_h_dptr(dentry, bindex); ++ if (h_dentry && h_dentry->d_inode) { ++ arg.bindex = bindex; ++ err = sio_test_empty(dentry, &arg); ++ } ++ } ++ ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++const struct file_operations aufs_dir_fop = { ++ .owner = THIS_MODULE, ++ .llseek = default_llseek, ++ .read = generic_read_dir, ++ .readdir = aufs_readdir, ++ .unlocked_ioctl = aufs_ioctl_dir, ++#ifdef CONFIG_COMPAT ++ .compat_ioctl = aufs_compat_ioctl_dir, ++#endif ++ .open = aufs_open_dir, ++ .release = aufs_release_dir, ++ .flush = aufs_flush_dir, ++ .fsync = aufs_fsync_dir ++}; +diff -urN a/fs/aufs/dir.h b/fs/aufs/dir.h +--- a/fs/aufs/dir.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/dir.h 2011-03-06 23:28:02.616413258 +0000 +@@ -0,0 +1,138 @@ ++/* ++ * Copyright (C) 2005-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * directory operations ++ */ ++ ++#ifndef __AUFS_DIR_H__ ++#define __AUFS_DIR_H__ ++ ++#ifdef __KERNEL__ ++ ++#include ++#include ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* need to be faster and smaller */ ++ ++struct au_nhash { ++ unsigned int nh_num; ++ struct hlist_head *nh_head; ++}; ++ ++struct au_vdir_destr { ++ unsigned char len; ++ unsigned char name[0]; ++} __packed; ++ ++struct au_vdir_dehstr { ++ struct hlist_node hash; ++ struct au_vdir_destr *str; ++} ____cacheline_aligned_in_smp; ++ ++struct au_vdir_de { ++ ino_t de_ino; ++ unsigned char de_type; ++ /* caution: packed */ ++ struct au_vdir_destr de_str; ++} __packed; ++ ++struct au_vdir_wh { ++ struct hlist_node wh_hash; ++#ifdef CONFIG_AUFS_SHWH ++ ino_t wh_ino; ++ aufs_bindex_t wh_bindex; ++ unsigned char wh_type; ++#else ++ aufs_bindex_t wh_bindex; ++#endif ++ /* caution: packed */ ++ struct au_vdir_destr wh_str; ++} __packed; ++ ++union au_vdir_deblk_p { ++ unsigned char *deblk; ++ struct au_vdir_de *de; ++}; ++ ++struct au_vdir { ++ unsigned char **vd_deblk; ++ unsigned long vd_nblk; ++ struct { ++ unsigned long ul; ++ union au_vdir_deblk_p p; ++ } vd_last; ++ ++ unsigned long vd_version; ++ unsigned int vd_deblk_sz; ++ unsigned long vd_jiffy; ++} ____cacheline_aligned_in_smp; ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* dir.c */ ++extern const struct file_operations aufs_dir_fop; ++void au_add_nlink(struct inode *dir, struct inode *h_dir); ++void au_sub_nlink(struct inode *dir, struct inode *h_dir); ++loff_t au_dir_size(struct file *file, struct dentry *dentry); ++int au_test_empty_lower(struct dentry *dentry); ++int au_test_empty(struct dentry *dentry, struct au_nhash *whlist); ++ ++/* vdir.c */ ++unsigned int au_rdhash_est(loff_t sz); ++int au_nhash_alloc(struct au_nhash *nhash, unsigned int num_hash, gfp_t gfp); ++void au_nhash_wh_free(struct au_nhash *whlist); ++int au_nhash_test_longer_wh(struct au_nhash *whlist, aufs_bindex_t btgt, ++ int limit); ++int au_nhash_test_known_wh(struct au_nhash *whlist, char *name, int nlen); ++int au_nhash_append_wh(struct au_nhash *whlist, char *name, int nlen, ino_t ino, ++ unsigned int d_type, aufs_bindex_t bindex, ++ unsigned char shwh); ++void au_vdir_free(struct au_vdir *vdir); ++int au_vdir_init(struct file *file); ++int au_vdir_fill_de(struct file *file, void *dirent, filldir_t filldir); ++ ++/* ioctl.c */ ++long aufs_ioctl_dir(struct file *file, unsigned int cmd, unsigned long arg); ++ ++#ifdef CONFIG_AUFS_RDU ++/* rdu.c */ ++long au_rdu_ioctl(struct file *file, unsigned int cmd, unsigned long arg); ++#ifdef CONFIG_COMPAT ++long au_rdu_compat_ioctl(struct file *file, unsigned int cmd, ++ unsigned long arg); ++#endif ++#else ++static inline long au_rdu_ioctl(struct file *file, unsigned int cmd, ++ unsigned long arg) ++{ ++ return -EINVAL; ++} ++#ifdef CONFIG_COMPAT ++static inline long au_rdu_compat_ioctl(struct file *file, unsigned int cmd, ++ unsigned long arg) ++{ ++ return -EINVAL; ++} ++#endif ++#endif ++ ++#endif /* __KERNEL__ */ ++#endif /* __AUFS_DIR_H__ */ +diff -urN a/fs/aufs/dynop.c b/fs/aufs/dynop.c +--- a/fs/aufs/dynop.c 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/dynop.c 2011-03-06 23:28:02.616413258 +0000 +@@ -0,0 +1,426 @@ ++/* ++ * Copyright (C) 2010-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * dynamically customizable operations for regular files ++ */ ++ ++#include "aufs.h" ++ ++#define DyPrSym(key) AuDbgSym(key->dk_op.dy_hop) ++ ++/* ++ * How large will these lists be? ++ * Usually just a few elements, 20-30 at most for each, I guess. ++ */ ++static struct au_splhead dynop[AuDyLast]; ++ ++static struct au_dykey *dy_gfind_get(struct au_splhead *spl, const void *h_op) ++{ ++ struct au_dykey *key, *tmp; ++ struct list_head *head; ++ ++ key = NULL; ++ head = &spl->head; ++ rcu_read_lock(); ++ list_for_each_entry_rcu(tmp, head, dk_list) ++ if (tmp->dk_op.dy_hop == h_op) { ++ key = tmp; ++ kref_get(&key->dk_kref); ++ break; ++ } ++ rcu_read_unlock(); ++ ++ return key; ++} ++ ++static struct au_dykey *dy_bradd(struct au_branch *br, struct au_dykey *key) ++{ ++ struct au_dykey **k, *found; ++ const void *h_op = key->dk_op.dy_hop; ++ int i; ++ ++ found = NULL; ++ k = br->br_dykey; ++ for (i = 0; i < AuBrDynOp; i++) ++ if (k[i]) { ++ if (k[i]->dk_op.dy_hop == h_op) { ++ found = k[i]; ++ break; ++ } ++ } else ++ break; ++ if (!found) { ++ spin_lock(&br->br_dykey_lock); ++ for (; i < AuBrDynOp; i++) ++ if (k[i]) { ++ if (k[i]->dk_op.dy_hop == h_op) { ++ found = k[i]; ++ break; ++ } ++ } else { ++ k[i] = key; ++ break; ++ } ++ spin_unlock(&br->br_dykey_lock); ++ BUG_ON(i == AuBrDynOp); /* expand the array */ ++ } ++ ++ return found; ++} ++ ++/* kref_get() if @key is already added */ ++static struct au_dykey *dy_gadd(struct au_splhead *spl, struct au_dykey *key) ++{ ++ struct au_dykey *tmp, *found; ++ struct list_head *head; ++ const void *h_op = key->dk_op.dy_hop; ++ ++ found = NULL; ++ head = &spl->head; ++ spin_lock(&spl->spin); ++ list_for_each_entry(tmp, head, dk_list) ++ if (tmp->dk_op.dy_hop == h_op) { ++ kref_get(&tmp->dk_kref); ++ found = tmp; ++ break; ++ } ++ if (!found) ++ list_add_rcu(&key->dk_list, head); ++ spin_unlock(&spl->spin); ++ ++ if (!found) ++ DyPrSym(key); ++ return found; ++} ++ ++static void dy_free_rcu(struct rcu_head *rcu) ++{ ++ struct au_dykey *key; ++ ++ key = container_of(rcu, struct au_dykey, dk_rcu); ++ DyPrSym(key); ++ kfree(key); ++} ++ ++static void dy_free(struct kref *kref) ++{ ++ struct au_dykey *key; ++ struct au_splhead *spl; ++ ++ key = container_of(kref, struct au_dykey, dk_kref); ++ spl = dynop + key->dk_op.dy_type; ++ au_spl_del_rcu(&key->dk_list, spl); ++ call_rcu(&key->dk_rcu, dy_free_rcu); ++} ++ ++void au_dy_put(struct au_dykey *key) ++{ ++ kref_put(&key->dk_kref, dy_free); ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++#define DyDbgSize(cnt, op) AuDebugOn(cnt != sizeof(op)/sizeof(void *)) ++ ++#ifdef CONFIG_AUFS_DEBUG ++#define DyDbgDeclare(cnt) unsigned int cnt = 0 ++#define DyDbgInc(cnt) do { cnt++; } while (0) ++#else ++#define DyDbgDeclare(cnt) do {} while (0) ++#define DyDbgInc(cnt) do {} while (0) ++#endif ++ ++#define DySet(func, dst, src, h_op, h_sb) do { \ ++ DyDbgInc(cnt); \ ++ if (h_op->func) { \ ++ if (src.func) \ ++ dst.func = src.func; \ ++ else \ ++ AuDbg("%s %s\n", au_sbtype(h_sb), #func); \ ++ } \ ++} while (0) ++ ++#define DySetForce(func, dst, src) do { \ ++ AuDebugOn(!src.func); \ ++ DyDbgInc(cnt); \ ++ dst.func = src.func; \ ++} while (0) ++ ++#define DySetAop(func) \ ++ DySet(func, dyaop->da_op, aufs_aop, h_aop, h_sb) ++#define DySetAopForce(func) \ ++ DySetForce(func, dyaop->da_op, aufs_aop) ++ ++static void dy_aop(struct au_dykey *key, const void *h_op, ++ struct super_block *h_sb __maybe_unused) ++{ ++ struct au_dyaop *dyaop = (void *)key; ++ const struct address_space_operations *h_aop = h_op; ++ DyDbgDeclare(cnt); ++ ++ AuDbg("%s\n", au_sbtype(h_sb)); ++ ++ DySetAop(writepage); ++ DySetAopForce(readpage); /* force */ ++ DySetAop(sync_page); ++ DySetAop(writepages); ++ DySetAop(set_page_dirty); ++ DySetAop(readpages); ++ DySetAop(write_begin); ++ DySetAop(write_end); ++ DySetAop(bmap); ++ DySetAop(invalidatepage); ++ DySetAop(releasepage); ++ DySetAop(freepage); ++ /* these two will be changed according to an aufs mount option */ ++ DySetAop(direct_IO); ++ DySetAop(get_xip_mem); ++ DySetAop(migratepage); ++ DySetAop(launder_page); ++ DySetAop(is_partially_uptodate); ++ DySetAop(error_remove_page); ++ ++ DyDbgSize(cnt, *h_aop); ++ dyaop->da_get_xip_mem = h_aop->get_xip_mem; ++} ++ ++#define DySetVmop(func) \ ++ DySet(func, dyvmop->dv_op, aufs_vm_ops, h_vmop, h_sb) ++#define DySetVmopForce(func) \ ++ DySetForce(func, dyvmop->dv_op, aufs_vm_ops) ++ ++static void dy_vmop(struct au_dykey *key, const void *h_op, ++ struct super_block *h_sb __maybe_unused) ++{ ++ struct au_dyvmop *dyvmop = (void *)key; ++ const struct vm_operations_struct *h_vmop = h_op; ++ DyDbgDeclare(cnt); ++ ++ AuDbg("%s\n", au_sbtype(h_sb)); ++ ++ DySetVmop(open); ++ DySetVmop(close); ++ DySetVmop(fault); ++ DySetVmop(page_mkwrite); ++ DySetVmop(access); ++#ifdef CONFIG_NUMA ++ DySetVmop(set_policy); ++ DySetVmop(get_policy); ++ DySetVmop(migrate); ++#endif ++ ++ DyDbgSize(cnt, *h_vmop); ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++static void dy_bug(struct kref *kref) ++{ ++ BUG(); ++} ++ ++static struct au_dykey *dy_get(struct au_dynop *op, struct au_branch *br) ++{ ++ struct au_dykey *key, *old; ++ struct au_splhead *spl; ++ struct op { ++ unsigned int sz; ++ void (*set)(struct au_dykey *key, const void *h_op, ++ struct super_block *h_sb __maybe_unused); ++ }; ++ static const struct op a[] = { ++ [AuDy_AOP] = { ++ .sz = sizeof(struct au_dyaop), ++ .set = dy_aop ++ }, ++ [AuDy_VMOP] = { ++ .sz = sizeof(struct au_dyvmop), ++ .set = dy_vmop ++ } ++ }; ++ const struct op *p; ++ ++ spl = dynop + op->dy_type; ++ key = dy_gfind_get(spl, op->dy_hop); ++ if (key) ++ goto out_add; /* success */ ++ ++ p = a + op->dy_type; ++ key = kzalloc(p->sz, GFP_NOFS); ++ if (unlikely(!key)) { ++ key = ERR_PTR(-ENOMEM); ++ goto out; ++ } ++ ++ key->dk_op.dy_hop = op->dy_hop; ++ kref_init(&key->dk_kref); ++ p->set(key, op->dy_hop, br->br_mnt->mnt_sb); ++ old = dy_gadd(spl, key); ++ if (old) { ++ kfree(key); ++ key = old; ++ } ++ ++out_add: ++ old = dy_bradd(br, key); ++ if (old) ++ /* its ref-count should never be zero here */ ++ kref_put(&key->dk_kref, dy_bug); ++out: ++ return key; ++} ++ ++/* ---------------------------------------------------------------------- */ ++/* ++ * Aufs prohibits O_DIRECT by defaut even if the branch supports it. ++ * This behaviour is neccessary to return an error from open(O_DIRECT) instead ++ * of the succeeding I/O. The dio mount option enables O_DIRECT and makes ++ * open(O_DIRECT) always succeed, but the succeeding I/O may return an error. ++ * See the aufs manual in detail. ++ * ++ * To keep this behaviour, aufs has to set NULL to ->get_xip_mem too, and the ++ * performance of fadvise() and madvise() may be affected. ++ */ ++static void dy_adx(struct au_dyaop *dyaop, int do_dx) ++{ ++ if (!do_dx) { ++ dyaop->da_op.direct_IO = NULL; ++ dyaop->da_op.get_xip_mem = NULL; ++ } else { ++ dyaop->da_op.direct_IO = aufs_aop.direct_IO; ++ dyaop->da_op.get_xip_mem = aufs_aop.get_xip_mem; ++ if (!dyaop->da_get_xip_mem) ++ dyaop->da_op.get_xip_mem = NULL; ++ } ++} ++ ++static struct au_dyaop *dy_aget(struct au_branch *br, ++ const struct address_space_operations *h_aop, ++ int do_dx) ++{ ++ struct au_dyaop *dyaop; ++ struct au_dynop op; ++ ++ op.dy_type = AuDy_AOP; ++ op.dy_haop = h_aop; ++ dyaop = (void *)dy_get(&op, br); ++ if (IS_ERR(dyaop)) ++ goto out; ++ dy_adx(dyaop, do_dx); ++ ++out: ++ return dyaop; ++} ++ ++int au_dy_iaop(struct inode *inode, aufs_bindex_t bindex, ++ struct inode *h_inode) ++{ ++ int err, do_dx; ++ struct super_block *sb; ++ struct au_branch *br; ++ struct au_dyaop *dyaop; ++ ++ AuDebugOn(!S_ISREG(h_inode->i_mode)); ++ IiMustWriteLock(inode); ++ ++ sb = inode->i_sb; ++ br = au_sbr(sb, bindex); ++ do_dx = !!au_opt_test(au_mntflags(sb), DIO); ++ dyaop = dy_aget(br, h_inode->i_mapping->a_ops, do_dx); ++ err = PTR_ERR(dyaop); ++ if (IS_ERR(dyaop)) ++ /* unnecessary to call dy_fput() */ ++ goto out; ++ ++ err = 0; ++ inode->i_mapping->a_ops = &dyaop->da_op; ++ ++out: ++ return err; ++} ++ ++/* ++ * Is it safe to replace a_ops during the inode/file is in operation? ++ * Yes, I hope so. ++ */ ++int au_dy_irefresh(struct inode *inode) ++{ ++ int err; ++ aufs_bindex_t bstart; ++ struct inode *h_inode; ++ ++ err = 0; ++ if (S_ISREG(inode->i_mode)) { ++ bstart = au_ibstart(inode); ++ h_inode = au_h_iptr(inode, bstart); ++ err = au_dy_iaop(inode, bstart, h_inode); ++ } ++ return err; ++} ++ ++void au_dy_arefresh(int do_dx) ++{ ++ struct au_splhead *spl; ++ struct list_head *head; ++ struct au_dykey *key; ++ ++ spl = dynop + AuDy_AOP; ++ head = &spl->head; ++ spin_lock(&spl->spin); ++ list_for_each_entry(key, head, dk_list) ++ dy_adx((void *)key, do_dx); ++ spin_unlock(&spl->spin); ++} ++ ++const struct vm_operations_struct * ++au_dy_vmop(struct file *file, struct au_branch *br, ++ const struct vm_operations_struct *h_vmop) ++{ ++ struct au_dyvmop *dyvmop; ++ struct au_dynop op; ++ ++ op.dy_type = AuDy_VMOP; ++ op.dy_hvmop = h_vmop; ++ dyvmop = (void *)dy_get(&op, br); ++ if (IS_ERR(dyvmop)) ++ return (void *)dyvmop; ++ return &dyvmop->dv_op; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++void __init au_dy_init(void) ++{ ++ int i; ++ ++ /* make sure that 'struct au_dykey *' can be any type */ ++ BUILD_BUG_ON(offsetof(struct au_dyaop, da_key)); ++ BUILD_BUG_ON(offsetof(struct au_dyvmop, dv_key)); ++ ++ for (i = 0; i < AuDyLast; i++) ++ au_spl_init(dynop + i); ++} ++ ++void au_dy_fin(void) ++{ ++ int i; ++ ++ for (i = 0; i < AuDyLast; i++) ++ WARN_ON(!list_empty(&dynop[i].head)); ++} +diff -urN a/fs/aufs/dynop.h b/fs/aufs/dynop.h +--- a/fs/aufs/dynop.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/dynop.h 2011-03-06 23:28:02.620413138 +0000 +@@ -0,0 +1,89 @@ ++/* ++ * Copyright (C) 2010-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * dynamically customizable operations (for regular files only) ++ */ ++ ++#ifndef __AUFS_DYNOP_H__ ++#define __AUFS_DYNOP_H__ ++ ++#ifdef __KERNEL__ ++ ++#include ++#include ++#include ++#include ++#include "inode.h" ++ ++enum {AuDy_AOP, AuDy_VMOP, AuDyLast}; ++ ++struct au_dynop { ++ int dy_type; ++ union { ++ const void *dy_hop; ++ const struct address_space_operations *dy_haop; ++ const struct vm_operations_struct *dy_hvmop; ++ }; ++}; ++ ++struct au_dykey { ++ union { ++ struct list_head dk_list; ++ struct rcu_head dk_rcu; ++ }; ++ struct au_dynop dk_op; ++ ++ /* ++ * during I am in the branch local array, kref is gotten. when the ++ * branch is removed, kref is put. ++ */ ++ struct kref dk_kref; ++}; ++ ++/* stop unioning since their sizes are very different from each other */ ++struct au_dyaop { ++ struct au_dykey da_key; ++ struct address_space_operations da_op; /* not const */ ++ int (*da_get_xip_mem)(struct address_space *, pgoff_t, int, ++ void **, unsigned long *); ++}; ++ ++struct au_dyvmop { ++ struct au_dykey dv_key; ++ struct vm_operations_struct dv_op; /* not const */ ++}; ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* dynop.c */ ++struct au_branch; ++void au_dy_put(struct au_dykey *key); ++int au_dy_iaop(struct inode *inode, aufs_bindex_t bindex, ++ struct inode *h_inode); ++int au_dy_irefresh(struct inode *inode); ++void au_dy_arefresh(int do_dio); ++const struct vm_operations_struct * ++au_dy_vmop(struct file *file, struct au_branch *br, ++ const struct vm_operations_struct *h_vmop); ++ ++void __init au_dy_init(void); ++void au_dy_fin(void); ++ ++#endif /* __KERNEL__ */ ++#endif /* __AUFS_DYNOP_H__ */ +diff -urN a/fs/aufs/export.c b/fs/aufs/export.c +--- a/fs/aufs/export.c 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/export.c 2011-03-06 23:28:02.616413258 +0000 +@@ -0,0 +1,803 @@ ++/* ++ * Copyright (C) 2005-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * export via nfs ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include "aufs.h" ++ ++union conv { ++#ifdef CONFIG_AUFS_INO_T_64 ++ __u32 a[2]; ++#else ++ __u32 a[1]; ++#endif ++ ino_t ino; ++}; ++ ++static ino_t decode_ino(__u32 *a) ++{ ++ union conv u; ++ ++ BUILD_BUG_ON(sizeof(u.ino) != sizeof(u.a)); ++ u.a[0] = a[0]; ++#ifdef CONFIG_AUFS_INO_T_64 ++ u.a[1] = a[1]; ++#endif ++ return u.ino; ++} ++ ++static void encode_ino(__u32 *a, ino_t ino) ++{ ++ union conv u; ++ ++ u.ino = ino; ++ a[0] = u.a[0]; ++#ifdef CONFIG_AUFS_INO_T_64 ++ a[1] = u.a[1]; ++#endif ++} ++ ++/* NFS file handle */ ++enum { ++ Fh_br_id, ++ Fh_sigen, ++#ifdef CONFIG_AUFS_INO_T_64 ++ /* support 64bit inode number */ ++ Fh_ino1, ++ Fh_ino2, ++ Fh_dir_ino1, ++ Fh_dir_ino2, ++#else ++ Fh_ino1, ++ Fh_dir_ino1, ++#endif ++ Fh_igen, ++ Fh_h_type, ++ Fh_tail, ++ ++ Fh_ino = Fh_ino1, ++ Fh_dir_ino = Fh_dir_ino1 ++}; ++ ++static int au_test_anon(struct dentry *dentry) ++{ ++ /* note: read d_flags without d_lock */ ++ return !!(dentry->d_flags & DCACHE_DISCONNECTED); ++} ++ ++/* ---------------------------------------------------------------------- */ ++/* inode generation external table */ ++ ++void au_xigen_inc(struct inode *inode) ++{ ++ loff_t pos; ++ ssize_t sz; ++ __u32 igen; ++ struct super_block *sb; ++ struct au_sbinfo *sbinfo; ++ ++ sb = inode->i_sb; ++ AuDebugOn(!au_opt_test(au_mntflags(sb), XINO)); ++ ++ sbinfo = au_sbi(sb); ++ pos = inode->i_ino; ++ pos *= sizeof(igen); ++ igen = inode->i_generation + 1; ++ sz = xino_fwrite(sbinfo->si_xwrite, sbinfo->si_xigen, &igen, ++ sizeof(igen), &pos); ++ if (sz == sizeof(igen)) ++ return; /* success */ ++ ++ if (unlikely(sz >= 0)) ++ AuIOErr("xigen error (%zd)\n", sz); ++} ++ ++int au_xigen_new(struct inode *inode) ++{ ++ int err; ++ loff_t pos; ++ ssize_t sz; ++ struct super_block *sb; ++ struct au_sbinfo *sbinfo; ++ struct file *file; ++ ++ err = 0; ++ /* todo: dirty, at mount time */ ++ if (inode->i_ino == AUFS_ROOT_INO) ++ goto out; ++ sb = inode->i_sb; ++ SiMustAnyLock(sb); ++ if (unlikely(!au_opt_test(au_mntflags(sb), XINO))) ++ goto out; ++ ++ err = -EFBIG; ++ pos = inode->i_ino; ++ if (unlikely(au_loff_max / sizeof(inode->i_generation) - 1 < pos)) { ++ AuIOErr1("too large i%lld\n", pos); ++ goto out; ++ } ++ pos *= sizeof(inode->i_generation); ++ ++ err = 0; ++ sbinfo = au_sbi(sb); ++ file = sbinfo->si_xigen; ++ BUG_ON(!file); ++ ++ if (i_size_read(file->f_dentry->d_inode) ++ < pos + sizeof(inode->i_generation)) { ++ inode->i_generation = atomic_inc_return(&sbinfo->si_xigen_next); ++ sz = xino_fwrite(sbinfo->si_xwrite, file, &inode->i_generation, ++ sizeof(inode->i_generation), &pos); ++ } else ++ sz = xino_fread(sbinfo->si_xread, file, &inode->i_generation, ++ sizeof(inode->i_generation), &pos); ++ if (sz == sizeof(inode->i_generation)) ++ goto out; /* success */ ++ ++ err = sz; ++ if (unlikely(sz >= 0)) { ++ err = -EIO; ++ AuIOErr("xigen error (%zd)\n", sz); ++ } ++ ++out: ++ return err; ++} ++ ++int au_xigen_set(struct super_block *sb, struct file *base) ++{ ++ int err; ++ struct au_sbinfo *sbinfo; ++ struct file *file; ++ ++ SiMustWriteLock(sb); ++ ++ sbinfo = au_sbi(sb); ++ file = au_xino_create2(base, sbinfo->si_xigen); ++ err = PTR_ERR(file); ++ if (IS_ERR(file)) ++ goto out; ++ err = 0; ++ if (sbinfo->si_xigen) ++ fput(sbinfo->si_xigen); ++ sbinfo->si_xigen = file; ++ ++out: ++ return err; ++} ++ ++void au_xigen_clr(struct super_block *sb) ++{ ++ struct au_sbinfo *sbinfo; ++ ++ SiMustWriteLock(sb); ++ ++ sbinfo = au_sbi(sb); ++ if (sbinfo->si_xigen) { ++ fput(sbinfo->si_xigen); ++ sbinfo->si_xigen = NULL; ++ } ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++static struct dentry *decode_by_ino(struct super_block *sb, ino_t ino, ++ ino_t dir_ino) ++{ ++ struct dentry *dentry, *d; ++ struct inode *inode; ++ unsigned int sigen; ++ ++ dentry = NULL; ++ inode = ilookup(sb, ino); ++ if (!inode) ++ goto out; ++ ++ dentry = ERR_PTR(-ESTALE); ++ sigen = au_sigen(sb); ++ if (unlikely(is_bad_inode(inode) ++ || IS_DEADDIR(inode) ++ || sigen != au_iigen(inode))) ++ goto out_iput; ++ ++ dentry = NULL; ++ if (!dir_ino || S_ISDIR(inode->i_mode)) ++ dentry = d_find_alias(inode); ++ else { ++ spin_lock(&inode->i_lock); ++ list_for_each_entry(d, &inode->i_dentry, d_alias) { ++ spin_lock(&d->d_lock); ++ if (!au_test_anon(d) ++ && d->d_parent->d_inode->i_ino == dir_ino) { ++ dentry = dget_dlock(d); ++ spin_unlock(&d->d_lock); ++ break; ++ } ++ spin_unlock(&d->d_lock); ++ } ++ spin_unlock(&inode->i_lock); ++ } ++ if (unlikely(dentry && au_digen_test(dentry, sigen))) { ++ dput(dentry); ++ dentry = ERR_PTR(-ESTALE); ++ } ++ ++out_iput: ++ iput(inode); ++out: ++ return dentry; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* todo: dirty? */ ++/* if exportfs_decode_fh() passed vfsmount*, we could be happy */ ++ ++struct au_compare_mnt_args { ++ /* input */ ++ struct super_block *sb; ++ ++ /* output */ ++ struct vfsmount *mnt; ++}; ++ ++static int au_compare_mnt(struct vfsmount *mnt, void *arg) ++{ ++ struct au_compare_mnt_args *a = arg; ++ ++ if (mnt->mnt_sb != a->sb) ++ return 0; ++ a->mnt = mntget(mnt); ++ return 1; ++} ++ ++static struct vfsmount *au_mnt_get(struct super_block *sb) ++{ ++ int err; ++ struct au_compare_mnt_args args = { ++ .sb = sb ++ }; ++ struct mnt_namespace *ns; ++ ++ br_read_lock(vfsmount_lock); ++ /* no get/put ?? */ ++ AuDebugOn(!current->nsproxy); ++ ns = current->nsproxy->mnt_ns; ++ AuDebugOn(!ns); ++ err = iterate_mounts(au_compare_mnt, &args, ns->root); ++ br_read_unlock(vfsmount_lock); ++ AuDebugOn(!err); ++ AuDebugOn(!args.mnt); ++ return args.mnt; ++} ++ ++struct au_nfsd_si_lock { ++ unsigned int sigen; ++ aufs_bindex_t bindex, br_id; ++ unsigned char force_lock; ++}; ++ ++static int si_nfsd_read_lock(struct super_block *sb, ++ struct au_nfsd_si_lock *nsi_lock) ++{ ++ int err; ++ aufs_bindex_t bindex; ++ ++ si_read_lock(sb, AuLock_FLUSH); ++ ++ /* branch id may be wrapped around */ ++ err = 0; ++ bindex = au_br_index(sb, nsi_lock->br_id); ++ if (bindex >= 0 && nsi_lock->sigen + AUFS_BRANCH_MAX > au_sigen(sb)) ++ goto out; /* success */ ++ ++ err = -ESTALE; ++ bindex = -1; ++ if (!nsi_lock->force_lock) ++ si_read_unlock(sb); ++ ++out: ++ nsi_lock->bindex = bindex; ++ return err; ++} ++ ++struct find_name_by_ino { ++ int called, found; ++ ino_t ino; ++ char *name; ++ int namelen; ++}; ++ ++static int ++find_name_by_ino(void *arg, const char *name, int namelen, loff_t offset, ++ u64 ino, unsigned int d_type) ++{ ++ struct find_name_by_ino *a = arg; ++ ++ a->called++; ++ if (a->ino != ino) ++ return 0; ++ ++ memcpy(a->name, name, namelen); ++ a->namelen = namelen; ++ a->found = 1; ++ return 1; ++} ++ ++static struct dentry *au_lkup_by_ino(struct path *path, ino_t ino, ++ struct au_nfsd_si_lock *nsi_lock) ++{ ++ struct dentry *dentry, *parent; ++ struct file *file; ++ struct inode *dir; ++ struct find_name_by_ino arg; ++ int err; ++ ++ parent = path->dentry; ++ if (nsi_lock) ++ si_read_unlock(parent->d_sb); ++ file = vfsub_dentry_open(path, au_dir_roflags); ++ dentry = (void *)file; ++ if (IS_ERR(file)) ++ goto out; ++ ++ dentry = ERR_PTR(-ENOMEM); ++ arg.name = __getname_gfp(GFP_NOFS); ++ if (unlikely(!arg.name)) ++ goto out_file; ++ arg.ino = ino; ++ arg.found = 0; ++ do { ++ arg.called = 0; ++ /* smp_mb(); */ ++ err = vfsub_readdir(file, find_name_by_ino, &arg); ++ } while (!err && !arg.found && arg.called); ++ dentry = ERR_PTR(err); ++ if (unlikely(err)) ++ goto out_name; ++ dentry = ERR_PTR(-ENOENT); ++ if (!arg.found) ++ goto out_name; ++ ++ /* do not call au_lkup_one() */ ++ dir = parent->d_inode; ++ mutex_lock(&dir->i_mutex); ++ dentry = vfsub_lookup_one_len(arg.name, parent, arg.namelen); ++ mutex_unlock(&dir->i_mutex); ++ AuTraceErrPtr(dentry); ++ if (IS_ERR(dentry)) ++ goto out_name; ++ AuDebugOn(au_test_anon(dentry)); ++ if (unlikely(!dentry->d_inode)) { ++ dput(dentry); ++ dentry = ERR_PTR(-ENOENT); ++ } ++ ++out_name: ++ __putname(arg.name); ++out_file: ++ fput(file); ++out: ++ if (unlikely(nsi_lock ++ && si_nfsd_read_lock(parent->d_sb, nsi_lock) < 0)) ++ if (!IS_ERR(dentry)) { ++ dput(dentry); ++ dentry = ERR_PTR(-ESTALE); ++ } ++ AuTraceErrPtr(dentry); ++ return dentry; ++} ++ ++static struct dentry *decode_by_dir_ino(struct super_block *sb, ino_t ino, ++ ino_t dir_ino, ++ struct au_nfsd_si_lock *nsi_lock) ++{ ++ struct dentry *dentry; ++ struct path path; ++ ++ if (dir_ino != AUFS_ROOT_INO) { ++ path.dentry = decode_by_ino(sb, dir_ino, 0); ++ dentry = path.dentry; ++ if (!path.dentry || IS_ERR(path.dentry)) ++ goto out; ++ AuDebugOn(au_test_anon(path.dentry)); ++ } else ++ path.dentry = dget(sb->s_root); ++ ++ path.mnt = au_mnt_get(sb); ++ dentry = au_lkup_by_ino(&path, ino, nsi_lock); ++ path_put(&path); ++ ++out: ++ AuTraceErrPtr(dentry); ++ return dentry; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++static int h_acceptable(void *expv, struct dentry *dentry) ++{ ++ return 1; ++} ++ ++static char *au_build_path(struct dentry *h_parent, struct path *h_rootpath, ++ char *buf, int len, struct super_block *sb) ++{ ++ char *p; ++ int n; ++ struct path path; ++ ++ p = d_path(h_rootpath, buf, len); ++ if (IS_ERR(p)) ++ goto out; ++ n = strlen(p); ++ ++ path.mnt = h_rootpath->mnt; ++ path.dentry = h_parent; ++ p = d_path(&path, buf, len); ++ if (IS_ERR(p)) ++ goto out; ++ if (n != 1) ++ p += n; ++ ++ path.mnt = au_mnt_get(sb); ++ path.dentry = sb->s_root; ++ p = d_path(&path, buf, len - strlen(p)); ++ mntput(path.mnt); ++ if (IS_ERR(p)) ++ goto out; ++ if (n != 1) ++ p[strlen(p)] = '/'; ++ ++out: ++ AuTraceErrPtr(p); ++ return p; ++} ++ ++static ++struct dentry *decode_by_path(struct super_block *sb, ino_t ino, __u32 *fh, ++ int fh_len, struct au_nfsd_si_lock *nsi_lock) ++{ ++ struct dentry *dentry, *h_parent, *root; ++ struct super_block *h_sb; ++ char *pathname, *p; ++ struct vfsmount *h_mnt; ++ struct au_branch *br; ++ int err; ++ struct path path; ++ ++ br = au_sbr(sb, nsi_lock->bindex); ++ h_mnt = br->br_mnt; ++ h_sb = h_mnt->mnt_sb; ++ /* todo: call lower fh_to_dentry()? fh_to_parent()? */ ++ h_parent = exportfs_decode_fh(h_mnt, (void *)(fh + Fh_tail), ++ fh_len - Fh_tail, fh[Fh_h_type], ++ h_acceptable, /*context*/NULL); ++ dentry = h_parent; ++ if (unlikely(!h_parent || IS_ERR(h_parent))) { ++ AuWarn1("%s decode_fh failed, %ld\n", ++ au_sbtype(h_sb), PTR_ERR(h_parent)); ++ goto out; ++ } ++ dentry = NULL; ++ if (unlikely(au_test_anon(h_parent))) { ++ AuWarn1("%s decode_fh returned a disconnected dentry\n", ++ au_sbtype(h_sb)); ++ goto out_h_parent; ++ } ++ ++ dentry = ERR_PTR(-ENOMEM); ++ pathname = (void *)__get_free_page(GFP_NOFS); ++ if (unlikely(!pathname)) ++ goto out_h_parent; ++ ++ root = sb->s_root; ++ path.mnt = h_mnt; ++ di_read_lock_parent(root, !AuLock_IR); ++ path.dentry = au_h_dptr(root, nsi_lock->bindex); ++ di_read_unlock(root, !AuLock_IR); ++ p = au_build_path(h_parent, &path, pathname, PAGE_SIZE, sb); ++ dentry = (void *)p; ++ if (IS_ERR(p)) ++ goto out_pathname; ++ ++ si_read_unlock(sb); ++ err = vfsub_kern_path(p, LOOKUP_FOLLOW | LOOKUP_DIRECTORY, &path); ++ dentry = ERR_PTR(err); ++ if (unlikely(err)) ++ goto out_relock; ++ ++ dentry = ERR_PTR(-ENOENT); ++ AuDebugOn(au_test_anon(path.dentry)); ++ if (unlikely(!path.dentry->d_inode)) ++ goto out_path; ++ ++ if (ino != path.dentry->d_inode->i_ino) ++ dentry = au_lkup_by_ino(&path, ino, /*nsi_lock*/NULL); ++ else ++ dentry = dget(path.dentry); ++ ++out_path: ++ path_put(&path); ++out_relock: ++ if (unlikely(si_nfsd_read_lock(sb, nsi_lock) < 0)) ++ if (!IS_ERR(dentry)) { ++ dput(dentry); ++ dentry = ERR_PTR(-ESTALE); ++ } ++out_pathname: ++ free_page((unsigned long)pathname); ++out_h_parent: ++ dput(h_parent); ++out: ++ AuTraceErrPtr(dentry); ++ return dentry; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++static struct dentry * ++aufs_fh_to_dentry(struct super_block *sb, struct fid *fid, int fh_len, ++ int fh_type) ++{ ++ struct dentry *dentry; ++ __u32 *fh = fid->raw; ++ struct au_branch *br; ++ ino_t ino, dir_ino; ++ struct au_nfsd_si_lock nsi_lock = { ++ .force_lock = 0 ++ }; ++ ++ dentry = ERR_PTR(-ESTALE); ++ /* it should never happen, but the file handle is unreliable */ ++ if (unlikely(fh_len < Fh_tail)) ++ goto out; ++ nsi_lock.sigen = fh[Fh_sigen]; ++ nsi_lock.br_id = fh[Fh_br_id]; ++ ++ /* branch id may be wrapped around */ ++ br = NULL; ++ if (unlikely(si_nfsd_read_lock(sb, &nsi_lock))) ++ goto out; ++ nsi_lock.force_lock = 1; ++ ++ /* is this inode still cached? */ ++ ino = decode_ino(fh + Fh_ino); ++ /* it should never happen */ ++ if (unlikely(ino == AUFS_ROOT_INO)) ++ goto out; ++ ++ dir_ino = decode_ino(fh + Fh_dir_ino); ++ dentry = decode_by_ino(sb, ino, dir_ino); ++ if (IS_ERR(dentry)) ++ goto out_unlock; ++ if (dentry) ++ goto accept; ++ ++ /* is the parent dir cached? */ ++ br = au_sbr(sb, nsi_lock.bindex); ++ atomic_inc(&br->br_count); ++ dentry = decode_by_dir_ino(sb, ino, dir_ino, &nsi_lock); ++ if (IS_ERR(dentry)) ++ goto out_unlock; ++ if (dentry) ++ goto accept; ++ ++ /* lookup path */ ++ dentry = decode_by_path(sb, ino, fh, fh_len, &nsi_lock); ++ if (IS_ERR(dentry)) ++ goto out_unlock; ++ if (unlikely(!dentry)) ++ /* todo?: make it ESTALE */ ++ goto out_unlock; ++ ++accept: ++ if (!au_digen_test(dentry, au_sigen(sb)) ++ && dentry->d_inode->i_generation == fh[Fh_igen]) ++ goto out_unlock; /* success */ ++ ++ dput(dentry); ++ dentry = ERR_PTR(-ESTALE); ++out_unlock: ++ if (br) ++ atomic_dec(&br->br_count); ++ si_read_unlock(sb); ++out: ++ AuTraceErrPtr(dentry); ++ return dentry; ++} ++ ++#if 0 /* reserved for future use */ ++/* support subtreecheck option */ ++static struct dentry *aufs_fh_to_parent(struct super_block *sb, struct fid *fid, ++ int fh_len, int fh_type) ++{ ++ struct dentry *parent; ++ __u32 *fh = fid->raw; ++ ino_t dir_ino; ++ ++ dir_ino = decode_ino(fh + Fh_dir_ino); ++ parent = decode_by_ino(sb, dir_ino, 0); ++ if (IS_ERR(parent)) ++ goto out; ++ if (!parent) ++ parent = decode_by_path(sb, au_br_index(sb, fh[Fh_br_id]), ++ dir_ino, fh, fh_len); ++ ++out: ++ AuTraceErrPtr(parent); ++ return parent; ++} ++#endif ++ ++/* ---------------------------------------------------------------------- */ ++ ++static int aufs_encode_fh(struct dentry *dentry, __u32 *fh, int *max_len, ++ int connectable) ++{ ++ int err; ++ aufs_bindex_t bindex, bend; ++ struct super_block *sb, *h_sb; ++ struct inode *inode; ++ struct dentry *parent, *h_parent; ++ struct au_branch *br; ++ ++ AuDebugOn(au_test_anon(dentry)); ++ ++ parent = NULL; ++ err = -ENOSPC; ++ if (unlikely(*max_len <= Fh_tail)) { ++ AuWarn1("NFSv2 client (max_len %d)?\n", *max_len); ++ goto out; ++ } ++ ++ err = FILEID_ROOT; ++ if (IS_ROOT(dentry)) { ++ AuDebugOn(dentry->d_inode->i_ino != AUFS_ROOT_INO); ++ goto out; ++ } ++ ++ h_parent = NULL; ++ err = aufs_read_lock(dentry, AuLock_FLUSH | AuLock_IR | AuLock_GEN); ++ if (unlikely(err)) ++ goto out; ++ ++ inode = dentry->d_inode; ++ AuDebugOn(!inode); ++ sb = dentry->d_sb; ++#ifdef CONFIG_AUFS_DEBUG ++ if (unlikely(!au_opt_test(au_mntflags(sb), XINO))) ++ AuWarn1("NFS-exporting requires xino\n"); ++#endif ++ err = -EIO; ++ parent = dget_parent(dentry); ++ di_read_lock_parent(parent, !AuLock_IR); ++ bend = au_dbtaildir(parent); ++ for (bindex = au_dbstart(parent); bindex <= bend; bindex++) { ++ h_parent = au_h_dptr(parent, bindex); ++ if (h_parent) { ++ dget(h_parent); ++ break; ++ } ++ } ++ if (unlikely(!h_parent)) ++ goto out_unlock; ++ ++ err = -EPERM; ++ br = au_sbr(sb, bindex); ++ h_sb = br->br_mnt->mnt_sb; ++ if (unlikely(!h_sb->s_export_op)) { ++ AuErr1("%s branch is not exportable\n", au_sbtype(h_sb)); ++ goto out_dput; ++ } ++ ++ fh[Fh_br_id] = br->br_id; ++ fh[Fh_sigen] = au_sigen(sb); ++ encode_ino(fh + Fh_ino, inode->i_ino); ++ encode_ino(fh + Fh_dir_ino, parent->d_inode->i_ino); ++ fh[Fh_igen] = inode->i_generation; ++ ++ *max_len -= Fh_tail; ++ fh[Fh_h_type] = exportfs_encode_fh(h_parent, (void *)(fh + Fh_tail), ++ max_len, ++ /*connectable or subtreecheck*/0); ++ err = fh[Fh_h_type]; ++ *max_len += Fh_tail; ++ /* todo: macros? */ ++ if (err != 255) ++ err = 99; ++ else ++ AuWarn1("%s encode_fh failed\n", au_sbtype(h_sb)); ++ ++out_dput: ++ dput(h_parent); ++out_unlock: ++ di_read_unlock(parent, !AuLock_IR); ++ dput(parent); ++ aufs_read_unlock(dentry, AuLock_IR); ++out: ++ if (unlikely(err < 0)) ++ err = 255; ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++static int aufs_commit_metadata(struct inode *inode) ++{ ++ int err; ++ aufs_bindex_t bindex; ++ struct super_block *sb; ++ struct inode *h_inode; ++ int (*f)(struct inode *inode); ++ ++ sb = inode->i_sb; ++ si_read_lock(sb, AuLock_FLUSH | AuLock_NOPLMW); ++ ii_write_lock_child(inode); ++ bindex = au_ibstart(inode); ++ AuDebugOn(bindex < 0); ++ h_inode = au_h_iptr(inode, bindex); ++ ++ f = h_inode->i_sb->s_export_op->commit_metadata; ++ if (f) ++ err = f(h_inode); ++ else { ++ struct writeback_control wbc = { ++ .sync_mode = WB_SYNC_ALL, ++ .nr_to_write = 0 /* metadata only */ ++ }; ++ ++ err = sync_inode(h_inode, &wbc); ++ } ++ ++ au_cpup_attr_timesizes(inode); ++ ii_write_unlock(inode); ++ si_read_unlock(sb); ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++static struct export_operations aufs_export_op = { ++ .fh_to_dentry = aufs_fh_to_dentry, ++ /* .fh_to_parent = aufs_fh_to_parent, */ ++ .encode_fh = aufs_encode_fh, ++ .commit_metadata = aufs_commit_metadata ++}; ++ ++void au_export_init(struct super_block *sb) ++{ ++ struct au_sbinfo *sbinfo; ++ __u32 u; ++ ++ sb->s_export_op = &aufs_export_op; ++ sbinfo = au_sbi(sb); ++ sbinfo->si_xigen = NULL; ++ get_random_bytes(&u, sizeof(u)); ++ BUILD_BUG_ON(sizeof(u) != sizeof(int)); ++ atomic_set(&sbinfo->si_xigen_next, u); ++} +diff -urN a/fs/aufs/file.c b/fs/aufs/file.c +--- a/fs/aufs/file.c 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/file.c 2011-03-06 23:28:02.620413138 +0000 +@@ -0,0 +1,679 @@ ++/* ++ * Copyright (C) 2005-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * handling file/dir, and address_space operation ++ */ ++ ++#include ++#include ++#include ++#include ++#include "aufs.h" ++ ++/* drop flags for writing */ ++unsigned int au_file_roflags(unsigned int flags) ++{ ++ flags &= ~(O_WRONLY | O_RDWR | O_APPEND | O_CREAT | O_TRUNC); ++ flags |= O_RDONLY | O_NOATIME; ++ return flags; ++} ++ ++/* common functions to regular file and dir */ ++struct file *au_h_open(struct dentry *dentry, aufs_bindex_t bindex, int flags, ++ struct file *file) ++{ ++ struct file *h_file; ++ struct dentry *h_dentry; ++ struct inode *h_inode; ++ struct super_block *sb; ++ struct au_branch *br; ++ struct path h_path; ++ int err, exec_flag; ++ ++ /* a race condition can happen between open and unlink/rmdir */ ++ h_file = ERR_PTR(-ENOENT); ++ h_dentry = au_h_dptr(dentry, bindex); ++ if (au_test_nfsd() && !h_dentry) ++ goto out; ++ h_inode = h_dentry->d_inode; ++ if (au_test_nfsd() && !h_inode) ++ goto out; ++ spin_lock(&h_dentry->d_lock); ++ err = (!d_unhashed(dentry) && d_unlinked(h_dentry)) ++ || !h_inode ++ /* || !dentry->d_inode->i_nlink */ ++ ; ++ spin_unlock(&h_dentry->d_lock); ++ if (unlikely(err)) ++ goto out; ++ ++ sb = dentry->d_sb; ++ br = au_sbr(sb, bindex); ++ h_file = ERR_PTR(-EACCES); ++ exec_flag = flags & vfsub_fmode_to_uint(FMODE_EXEC); ++ if (exec_flag && (br->br_mnt->mnt_flags & MNT_NOEXEC)) ++ goto out; ++ ++ /* drop flags for writing */ ++ if (au_test_ro(sb, bindex, dentry->d_inode)) ++ flags = au_file_roflags(flags); ++ flags &= ~O_CREAT; ++ atomic_inc(&br->br_count); ++ h_path.dentry = h_dentry; ++ h_path.mnt = br->br_mnt; ++ if (!au_special_file(h_inode->i_mode)) ++ h_file = vfsub_dentry_open(&h_path, flags); ++ else { ++ /* this block depends upon the configuration */ ++ di_read_unlock(dentry, AuLock_IR); ++ fi_write_unlock(file); ++ si_read_unlock(sb); ++ h_file = vfsub_dentry_open(&h_path, flags); ++ si_noflush_read_lock(sb); ++ fi_write_lock(file); ++ di_read_lock_child(dentry, AuLock_IR); ++ } ++ if (IS_ERR(h_file)) ++ goto out_br; ++ ++ if (exec_flag) { ++ err = deny_write_access(h_file); ++ if (unlikely(err)) { ++ fput(h_file); ++ h_file = ERR_PTR(err); ++ goto out_br; ++ } ++ } ++ fsnotify_open(h_file); ++ goto out; /* success */ ++ ++out_br: ++ atomic_dec(&br->br_count); ++out: ++ return h_file; ++} ++ ++int au_do_open(struct file *file, int (*open)(struct file *file, int flags), ++ struct au_fidir *fidir) ++{ ++ int err; ++ struct dentry *dentry; ++ ++ err = au_finfo_init(file, fidir); ++ if (unlikely(err)) ++ goto out; ++ ++ dentry = file->f_dentry; ++ di_read_lock_child(dentry, AuLock_IR); ++ err = open(file, vfsub_file_flags(file)); ++ di_read_unlock(dentry, AuLock_IR); ++ ++ fi_write_unlock(file); ++ if (unlikely(err)) { ++ au_fi(file)->fi_hdir = NULL; ++ au_finfo_fin(file); ++ } ++ ++out: ++ return err; ++} ++ ++int au_reopen_nondir(struct file *file) ++{ ++ int err; ++ aufs_bindex_t bstart; ++ struct dentry *dentry; ++ struct file *h_file, *h_file_tmp; ++ ++ dentry = file->f_dentry; ++ AuDebugOn(au_special_file(dentry->d_inode->i_mode)); ++ bstart = au_dbstart(dentry); ++ h_file_tmp = NULL; ++ if (au_fbstart(file) == bstart) { ++ h_file = au_hf_top(file); ++ if (file->f_mode == h_file->f_mode) ++ return 0; /* success */ ++ h_file_tmp = h_file; ++ get_file(h_file_tmp); ++ au_set_h_fptr(file, bstart, NULL); ++ } ++ AuDebugOn(au_fi(file)->fi_hdir); ++ AuDebugOn(au_fbstart(file) < bstart); ++ ++ h_file = au_h_open(dentry, bstart, vfsub_file_flags(file) & ~O_TRUNC, ++ file); ++ err = PTR_ERR(h_file); ++ if (IS_ERR(h_file)) ++ goto out; /* todo: close all? */ ++ ++ err = 0; ++ au_set_fbstart(file, bstart); ++ au_set_h_fptr(file, bstart, h_file); ++ au_update_figen(file); ++ /* todo: necessary? */ ++ /* file->f_ra = h_file->f_ra; */ ++ ++out: ++ if (h_file_tmp) ++ fput(h_file_tmp); ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++static int au_reopen_wh(struct file *file, aufs_bindex_t btgt, ++ struct dentry *hi_wh) ++{ ++ int err; ++ aufs_bindex_t bstart; ++ struct au_dinfo *dinfo; ++ struct dentry *h_dentry; ++ struct au_hdentry *hdp; ++ ++ dinfo = au_di(file->f_dentry); ++ AuRwMustWriteLock(&dinfo->di_rwsem); ++ ++ bstart = dinfo->di_bstart; ++ dinfo->di_bstart = btgt; ++ hdp = dinfo->di_hdentry; ++ h_dentry = hdp[0 + btgt].hd_dentry; ++ hdp[0 + btgt].hd_dentry = hi_wh; ++ err = au_reopen_nondir(file); ++ hdp[0 + btgt].hd_dentry = h_dentry; ++ dinfo->di_bstart = bstart; ++ ++ return err; ++} ++ ++static int au_ready_to_write_wh(struct file *file, loff_t len, ++ aufs_bindex_t bcpup) ++{ ++ int err; ++ struct inode *inode, *h_inode; ++ struct dentry *dentry, *h_dentry, *hi_wh; ++ ++ dentry = file->f_dentry; ++ au_update_dbstart(dentry); ++ inode = dentry->d_inode; ++ h_inode = NULL; ++ if (au_dbstart(dentry) <= bcpup && au_dbend(dentry) >= bcpup) { ++ h_dentry = au_h_dptr(dentry, bcpup); ++ if (h_dentry) ++ h_inode = h_dentry->d_inode; ++ } ++ hi_wh = au_hi_wh(inode, bcpup); ++ if (!hi_wh && !h_inode) ++ err = au_sio_cpup_wh(dentry, bcpup, len, file); ++ else ++ /* already copied-up after unlink */ ++ err = au_reopen_wh(file, bcpup, hi_wh); ++ ++ if (!err ++ && inode->i_nlink > 1 ++ && au_opt_test(au_mntflags(dentry->d_sb), PLINK)) ++ au_plink_append(inode, bcpup, au_h_dptr(dentry, bcpup)); ++ ++ return err; ++} ++ ++/* ++ * prepare the @file for writing. ++ */ ++int au_ready_to_write(struct file *file, loff_t len, struct au_pin *pin) ++{ ++ int err; ++ aufs_bindex_t bstart, bcpup, dbstart; ++ struct dentry *dentry, *parent, *h_dentry; ++ struct inode *h_inode, *inode; ++ struct super_block *sb; ++ struct file *h_file; ++ ++ dentry = file->f_dentry; ++ sb = dentry->d_sb; ++ inode = dentry->d_inode; ++ AuDebugOn(au_special_file(inode->i_mode)); ++ bstart = au_fbstart(file); ++ err = au_test_ro(sb, bstart, inode); ++ if (!err && (au_hf_top(file)->f_mode & FMODE_WRITE)) { ++ err = au_pin(pin, dentry, bstart, AuOpt_UDBA_NONE, /*flags*/0); ++ goto out; ++ } ++ ++ /* need to cpup or reopen */ ++ parent = dget_parent(dentry); ++ di_write_lock_parent(parent); ++ err = AuWbrCopyup(au_sbi(sb), dentry); ++ bcpup = err; ++ if (unlikely(err < 0)) ++ goto out_dgrade; ++ err = 0; ++ ++ if (!d_unhashed(dentry) && !au_h_dptr(parent, bcpup)) { ++ err = au_cpup_dirs(dentry, bcpup); ++ if (unlikely(err)) ++ goto out_dgrade; ++ } ++ ++ err = au_pin(pin, dentry, bcpup, AuOpt_UDBA_NONE, ++ AuPin_DI_LOCKED | AuPin_MNT_WRITE); ++ if (unlikely(err)) ++ goto out_dgrade; ++ ++ h_dentry = au_hf_top(file)->f_dentry; ++ h_inode = h_dentry->d_inode; ++ dbstart = au_dbstart(dentry); ++ if (dbstart <= bcpup) { ++ h_dentry = au_h_dptr(dentry, bcpup); ++ AuDebugOn(!h_dentry); ++ h_inode = h_dentry->d_inode; ++ AuDebugOn(!h_inode); ++ bstart = bcpup; ++ } ++ ++ if (dbstart <= bcpup /* just reopen */ ++ || !d_unhashed(dentry) /* copyup and reopen */ ++ ) { ++ mutex_lock_nested(&h_inode->i_mutex, AuLsc_I_CHILD); ++ h_file = au_h_open_pre(dentry, bstart); ++ if (IS_ERR(h_file)) { ++ err = PTR_ERR(h_file); ++ h_file = NULL; ++ } else { ++ di_downgrade_lock(parent, AuLock_IR); ++ if (dbstart > bcpup) ++ err = au_sio_cpup_simple(dentry, bcpup, len, ++ AuCpup_DTIME); ++ if (!err) ++ err = au_reopen_nondir(file); ++ } ++ mutex_unlock(&h_inode->i_mutex); ++ au_h_open_post(dentry, bstart, h_file); ++ } else { /* copyup as wh and reopen */ ++ /* ++ * since writable hfsplus branch is not supported, ++ * h_open_pre/post() are unnecessary. ++ */ ++ mutex_lock_nested(&h_inode->i_mutex, AuLsc_I_CHILD); ++ err = au_ready_to_write_wh(file, len, bcpup); ++ di_downgrade_lock(parent, AuLock_IR); ++ mutex_unlock(&h_inode->i_mutex); ++ } ++ ++ if (!err) { ++ au_pin_set_parent_lflag(pin, /*lflag*/0); ++ goto out_dput; /* success */ ++ } ++ au_unpin(pin); ++ goto out_unlock; ++ ++out_dgrade: ++ di_downgrade_lock(parent, AuLock_IR); ++out_unlock: ++ di_read_unlock(parent, AuLock_IR); ++out_dput: ++ dput(parent); ++out: ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++int au_do_flush(struct file *file, fl_owner_t id, ++ int (*flush)(struct file *file, fl_owner_t id)) ++{ ++ int err; ++ struct dentry *dentry; ++ struct super_block *sb; ++ struct inode *inode; ++ ++ dentry = file->f_dentry; ++ sb = dentry->d_sb; ++ inode = dentry->d_inode; ++ si_noflush_read_lock(sb); ++ fi_read_lock(file); ++ ii_read_lock_child(inode); ++ ++ err = flush(file, id); ++ au_cpup_attr_timesizes(inode); ++ ++ ii_read_unlock(inode); ++ fi_read_unlock(file); ++ si_read_unlock(sb); ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++static int au_file_refresh_by_inode(struct file *file, int *need_reopen) ++{ ++ int err; ++ aufs_bindex_t bstart; ++ struct au_pin pin; ++ struct au_finfo *finfo; ++ struct dentry *dentry, *parent, *hi_wh; ++ struct inode *inode; ++ struct super_block *sb; ++ ++ FiMustWriteLock(file); ++ ++ err = 0; ++ finfo = au_fi(file); ++ dentry = file->f_dentry; ++ sb = dentry->d_sb; ++ inode = dentry->d_inode; ++ bstart = au_ibstart(inode); ++ if (bstart == finfo->fi_btop || IS_ROOT(dentry)) ++ goto out; ++ ++ parent = dget_parent(dentry); ++ if (au_test_ro(sb, bstart, inode)) { ++ di_read_lock_parent(parent, !AuLock_IR); ++ err = AuWbrCopyup(au_sbi(sb), dentry); ++ bstart = err; ++ di_read_unlock(parent, !AuLock_IR); ++ if (unlikely(err < 0)) ++ goto out_parent; ++ err = 0; ++ } ++ ++ di_read_lock_parent(parent, AuLock_IR); ++ hi_wh = au_hi_wh(inode, bstart); ++ if (!S_ISDIR(inode->i_mode) ++ && au_opt_test(au_mntflags(sb), PLINK) ++ && au_plink_test(inode) ++ && !d_unhashed(dentry)) { ++ err = au_test_and_cpup_dirs(dentry, bstart); ++ if (unlikely(err)) ++ goto out_unlock; ++ ++ /* always superio. */ ++ err = au_pin(&pin, dentry, bstart, AuOpt_UDBA_NONE, ++ AuPin_DI_LOCKED | AuPin_MNT_WRITE); ++ if (!err) ++ err = au_sio_cpup_simple(dentry, bstart, -1, ++ AuCpup_DTIME); ++ au_unpin(&pin); ++ } else if (hi_wh) { ++ /* already copied-up after unlink */ ++ err = au_reopen_wh(file, bstart, hi_wh); ++ *need_reopen = 0; ++ } ++ ++out_unlock: ++ di_read_unlock(parent, AuLock_IR); ++out_parent: ++ dput(parent); ++out: ++ return err; ++} ++ ++static void au_do_refresh_dir(struct file *file) ++{ ++ aufs_bindex_t bindex, bend, new_bindex, brid; ++ struct au_hfile *p, tmp, *q; ++ struct au_finfo *finfo; ++ struct super_block *sb; ++ struct au_fidir *fidir; ++ ++ FiMustWriteLock(file); ++ ++ sb = file->f_dentry->d_sb; ++ finfo = au_fi(file); ++ fidir = finfo->fi_hdir; ++ AuDebugOn(!fidir); ++ p = fidir->fd_hfile + finfo->fi_btop; ++ brid = p->hf_br->br_id; ++ bend = fidir->fd_bbot; ++ for (bindex = finfo->fi_btop; bindex <= bend; bindex++, p++) { ++ if (!p->hf_file) ++ continue; ++ ++ new_bindex = au_br_index(sb, p->hf_br->br_id); ++ if (new_bindex == bindex) ++ continue; ++ if (new_bindex < 0) { ++ au_set_h_fptr(file, bindex, NULL); ++ continue; ++ } ++ ++ /* swap two lower inode, and loop again */ ++ q = fidir->fd_hfile + new_bindex; ++ tmp = *q; ++ *q = *p; ++ *p = tmp; ++ if (tmp.hf_file) { ++ bindex--; ++ p--; ++ } ++ } ++ ++ p = fidir->fd_hfile; ++ if (!au_test_mmapped(file) && !d_unlinked(file->f_dentry)) { ++ bend = au_sbend(sb); ++ for (finfo->fi_btop = 0; finfo->fi_btop <= bend; ++ finfo->fi_btop++, p++) ++ if (p->hf_file) { ++ if (p->hf_file->f_dentry ++ && p->hf_file->f_dentry->d_inode) ++ break; ++ else ++ au_hfput(p, file); ++ } ++ } else { ++ bend = au_br_index(sb, brid); ++ for (finfo->fi_btop = 0; finfo->fi_btop < bend; ++ finfo->fi_btop++, p++) ++ if (p->hf_file) ++ au_hfput(p, file); ++ bend = au_sbend(sb); ++ } ++ ++ p = fidir->fd_hfile + bend; ++ for (fidir->fd_bbot = bend; fidir->fd_bbot >= finfo->fi_btop; ++ fidir->fd_bbot--, p--) ++ if (p->hf_file) { ++ if (p->hf_file->f_dentry ++ && p->hf_file->f_dentry->d_inode) ++ break; ++ else ++ au_hfput(p, file); ++ } ++ AuDebugOn(fidir->fd_bbot < finfo->fi_btop); ++} ++ ++/* ++ * after branch manipulating, refresh the file. ++ */ ++static int refresh_file(struct file *file, int (*reopen)(struct file *file)) ++{ ++ int err, need_reopen; ++ aufs_bindex_t bend, bindex; ++ struct dentry *dentry; ++ struct au_finfo *finfo; ++ struct au_hfile *hfile; ++ ++ dentry = file->f_dentry; ++ finfo = au_fi(file); ++ if (!finfo->fi_hdir) { ++ hfile = &finfo->fi_htop; ++ AuDebugOn(!hfile->hf_file); ++ bindex = au_br_index(dentry->d_sb, hfile->hf_br->br_id); ++ AuDebugOn(bindex < 0); ++ if (bindex != finfo->fi_btop) ++ au_set_fbstart(file, bindex); ++ } else { ++ err = au_fidir_realloc(finfo, au_sbend(dentry->d_sb) + 1); ++ if (unlikely(err)) ++ goto out; ++ au_do_refresh_dir(file); ++ } ++ ++ err = 0; ++ need_reopen = 1; ++ if (!au_test_mmapped(file)) ++ err = au_file_refresh_by_inode(file, &need_reopen); ++ if (!err && need_reopen && !d_unlinked(dentry)) ++ err = reopen(file); ++ if (!err) { ++ au_update_figen(file); ++ goto out; /* success */ ++ } ++ ++ /* error, close all lower files */ ++ if (finfo->fi_hdir) { ++ bend = au_fbend_dir(file); ++ for (bindex = au_fbstart(file); bindex <= bend; bindex++) ++ au_set_h_fptr(file, bindex, NULL); ++ } ++ ++out: ++ return err; ++} ++ ++/* common function to regular file and dir */ ++int au_reval_and_lock_fdi(struct file *file, int (*reopen)(struct file *file), ++ int wlock) ++{ ++ int err; ++ unsigned int sigen, figen; ++ aufs_bindex_t bstart; ++ unsigned char pseudo_link; ++ struct dentry *dentry; ++ struct inode *inode; ++ ++ err = 0; ++ dentry = file->f_dentry; ++ inode = dentry->d_inode; ++ AuDebugOn(au_special_file(inode->i_mode)); ++ sigen = au_sigen(dentry->d_sb); ++ fi_write_lock(file); ++ figen = au_figen(file); ++ di_write_lock_child(dentry); ++ bstart = au_dbstart(dentry); ++ pseudo_link = (bstart != au_ibstart(inode)); ++ if (sigen == figen && !pseudo_link && au_fbstart(file) == bstart) { ++ if (!wlock) { ++ di_downgrade_lock(dentry, AuLock_IR); ++ fi_downgrade_lock(file); ++ } ++ goto out; /* success */ ++ } ++ ++ AuDbg("sigen %d, figen %d\n", sigen, figen); ++ if (au_digen_test(dentry, sigen)) { ++ err = au_reval_dpath(dentry, sigen); ++ AuDebugOn(!err && au_digen_test(dentry, sigen)); ++ } ++ ++ if (!err) ++ err = refresh_file(file, reopen); ++ if (!err) { ++ if (!wlock) { ++ di_downgrade_lock(dentry, AuLock_IR); ++ fi_downgrade_lock(file); ++ } ++ } else { ++ di_write_unlock(dentry); ++ fi_write_unlock(file); ++ } ++ ++out: ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* cf. aufs_nopage() */ ++/* for madvise(2) */ ++static int aufs_readpage(struct file *file __maybe_unused, struct page *page) ++{ ++ unlock_page(page); ++ return 0; ++} ++ ++/* it will never be called, but necessary to support O_DIRECT */ ++static ssize_t aufs_direct_IO(int rw, struct kiocb *iocb, ++ const struct iovec *iov, loff_t offset, ++ unsigned long nr_segs) ++{ BUG(); return 0; } ++ ++/* ++ * it will never be called, but madvise and fadvise behaves differently ++ * when get_xip_mem is defined ++ */ ++static int aufs_get_xip_mem(struct address_space *mapping, pgoff_t pgoff, ++ int create, void **kmem, unsigned long *pfn) ++{ BUG(); return 0; } ++ ++/* they will never be called. */ ++#ifdef CONFIG_AUFS_DEBUG ++static int aufs_write_begin(struct file *file, struct address_space *mapping, ++ loff_t pos, unsigned len, unsigned flags, ++ struct page **pagep, void **fsdata) ++{ AuUnsupport(); return 0; } ++static int aufs_write_end(struct file *file, struct address_space *mapping, ++ loff_t pos, unsigned len, unsigned copied, ++ struct page *page, void *fsdata) ++{ AuUnsupport(); return 0; } ++static int aufs_writepage(struct page *page, struct writeback_control *wbc) ++{ AuUnsupport(); return 0; } ++static void aufs_sync_page(struct page *page) ++{ AuUnsupport(); } ++ ++static int aufs_set_page_dirty(struct page *page) ++{ AuUnsupport(); return 0; } ++static void aufs_invalidatepage(struct page *page, unsigned long offset) ++{ AuUnsupport(); } ++static int aufs_releasepage(struct page *page, gfp_t gfp) ++{ AuUnsupport(); return 0; } ++static int aufs_migratepage(struct address_space *mapping, struct page *newpage, ++ struct page *page) ++{ AuUnsupport(); return 0; } ++static int aufs_launder_page(struct page *page) ++{ AuUnsupport(); return 0; } ++static int aufs_is_partially_uptodate(struct page *page, ++ read_descriptor_t *desc, ++ unsigned long from) ++{ AuUnsupport(); return 0; } ++static int aufs_error_remove_page(struct address_space *mapping, ++ struct page *page) ++{ AuUnsupport(); return 0; } ++#endif /* CONFIG_AUFS_DEBUG */ ++ ++const struct address_space_operations aufs_aop = { ++ .readpage = aufs_readpage, ++ .direct_IO = aufs_direct_IO, ++ .get_xip_mem = aufs_get_xip_mem, ++#ifdef CONFIG_AUFS_DEBUG ++ .writepage = aufs_writepage, ++ .sync_page = aufs_sync_page, ++ /* no writepages, because of writepage */ ++ .set_page_dirty = aufs_set_page_dirty, ++ /* no readpages, because of readpage */ ++ .write_begin = aufs_write_begin, ++ .write_end = aufs_write_end, ++ /* no bmap, no block device */ ++ .invalidatepage = aufs_invalidatepage, ++ .releasepage = aufs_releasepage, ++ .migratepage = aufs_migratepage, ++ .launder_page = aufs_launder_page, ++ .is_partially_uptodate = aufs_is_partially_uptodate, ++ .error_remove_page = aufs_error_remove_page ++#endif /* CONFIG_AUFS_DEBUG */ ++}; +diff -urN a/fs/aufs/file.h b/fs/aufs/file.h +--- a/fs/aufs/file.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/file.h 2011-03-06 23:28:02.620413138 +0000 +@@ -0,0 +1,238 @@ ++/* ++ * Copyright (C) 2005-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * file operations ++ */ ++ ++#ifndef __AUFS_FILE_H__ ++#define __AUFS_FILE_H__ ++ ++#ifdef __KERNEL__ ++ ++#include ++#include ++#include ++#include "rwsem.h" ++ ++struct au_branch; ++struct au_hfile { ++ struct file *hf_file; ++ struct au_branch *hf_br; ++}; ++ ++struct au_vdir; ++struct au_fidir { ++ aufs_bindex_t fd_bbot; ++ aufs_bindex_t fd_nent; ++ struct au_vdir *fd_vdir_cache; ++ struct au_hfile fd_hfile[]; ++}; ++ ++static inline int au_fidir_sz(int nent) ++{ ++ AuDebugOn(nent < 0); ++ return sizeof(struct au_fidir) + sizeof(struct au_hfile) * nent; ++} ++ ++struct au_finfo { ++ atomic_t fi_generation; ++ ++ struct au_rwsem fi_rwsem; ++ aufs_bindex_t fi_btop; ++ ++ /* do not union them */ ++ struct { /* for non-dir */ ++ struct au_hfile fi_htop; ++ struct vm_operations_struct *fi_hvmop; ++ struct mutex fi_vm_mtx; ++ struct mutex fi_mmap; ++ }; ++ struct au_fidir *fi_hdir; /* for dir only */ ++} ____cacheline_aligned_in_smp; ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* file.c */ ++extern const struct address_space_operations aufs_aop; ++unsigned int au_file_roflags(unsigned int flags); ++struct file *au_h_open(struct dentry *dentry, aufs_bindex_t bindex, int flags, ++ struct file *file); ++int au_do_open(struct file *file, int (*open)(struct file *file, int flags), ++ struct au_fidir *fidir); ++int au_reopen_nondir(struct file *file); ++struct au_pin; ++int au_ready_to_write(struct file *file, loff_t len, struct au_pin *pin); ++int au_reval_and_lock_fdi(struct file *file, int (*reopen)(struct file *file), ++ int wlock); ++int au_do_flush(struct file *file, fl_owner_t id, ++ int (*flush)(struct file *file, fl_owner_t id)); ++ ++/* poll.c */ ++#ifdef CONFIG_AUFS_POLL ++unsigned int aufs_poll(struct file *file, poll_table *wait); ++#endif ++ ++#ifdef CONFIG_AUFS_BR_HFSPLUS ++/* hfsplus.c */ ++struct file *au_h_open_pre(struct dentry *dentry, aufs_bindex_t bindex); ++void au_h_open_post(struct dentry *dentry, aufs_bindex_t bindex, ++ struct file *h_file); ++#else ++static inline ++struct file *au_h_open_pre(struct dentry *dentry, aufs_bindex_t bindex) ++{ ++ return NULL; ++} ++ ++AuStubVoid(au_h_open_post, struct dentry *dentry, aufs_bindex_t bindex, ++ struct file *h_file); ++#endif ++ ++/* f_op.c */ ++extern const struct file_operations aufs_file_fop; ++extern const struct vm_operations_struct aufs_vm_ops; ++int au_do_open_nondir(struct file *file, int flags); ++int aufs_release_nondir(struct inode *inode __maybe_unused, struct file *file); ++ ++#ifdef CONFIG_AUFS_SP_IATTR ++/* f_op_sp.c */ ++int au_special_file(umode_t mode); ++void au_init_special_fop(struct inode *inode, umode_t mode, dev_t rdev); ++#else ++AuStubInt0(au_special_file, umode_t mode) ++static inline void au_init_special_fop(struct inode *inode, umode_t mode, ++ dev_t rdev) ++{ ++ init_special_inode(inode, mode, rdev); ++} ++#endif ++ ++/* finfo.c */ ++void au_hfput(struct au_hfile *hf, struct file *file); ++void au_set_h_fptr(struct file *file, aufs_bindex_t bindex, ++ struct file *h_file); ++ ++void au_update_figen(struct file *file); ++void au_fi_mmap_lock(struct file *file); ++void au_fi_mmap_unlock(struct file *file); ++struct au_fidir *au_fidir_alloc(struct super_block *sb); ++int au_fidir_realloc(struct au_finfo *finfo, int nbr); ++ ++void au_fi_init_once(void *_fi); ++void au_finfo_fin(struct file *file); ++int au_finfo_init(struct file *file, struct au_fidir *fidir); ++ ++/* ioctl.c */ ++long aufs_ioctl_nondir(struct file *file, unsigned int cmd, unsigned long arg); ++#ifdef CONFIG_COMPAT ++long aufs_compat_ioctl_dir(struct file *file, unsigned int cmd, ++ unsigned long arg); ++#endif ++ ++/* ---------------------------------------------------------------------- */ ++ ++static inline struct au_finfo *au_fi(struct file *file) ++{ ++ return file->private_data; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* ++ * fi_read_lock, fi_write_lock, ++ * fi_read_unlock, fi_write_unlock, fi_downgrade_lock ++ */ ++AuSimpleRwsemFuncs(fi, struct file *f, &au_fi(f)->fi_rwsem); ++ ++#define FiMustNoWaiters(f) AuRwMustNoWaiters(&au_fi(f)->fi_rwsem) ++#define FiMustAnyLock(f) AuRwMustAnyLock(&au_fi(f)->fi_rwsem) ++#define FiMustWriteLock(f) AuRwMustWriteLock(&au_fi(f)->fi_rwsem) ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* todo: hard/soft set? */ ++static inline aufs_bindex_t au_fbstart(struct file *file) ++{ ++ FiMustAnyLock(file); ++ return au_fi(file)->fi_btop; ++} ++ ++static inline aufs_bindex_t au_fbend_dir(struct file *file) ++{ ++ FiMustAnyLock(file); ++ AuDebugOn(!au_fi(file)->fi_hdir); ++ return au_fi(file)->fi_hdir->fd_bbot; ++} ++ ++static inline struct au_vdir *au_fvdir_cache(struct file *file) ++{ ++ FiMustAnyLock(file); ++ AuDebugOn(!au_fi(file)->fi_hdir); ++ return au_fi(file)->fi_hdir->fd_vdir_cache; ++} ++ ++static inline void au_set_fbstart(struct file *file, aufs_bindex_t bindex) ++{ ++ FiMustWriteLock(file); ++ au_fi(file)->fi_btop = bindex; ++} ++ ++static inline void au_set_fbend_dir(struct file *file, aufs_bindex_t bindex) ++{ ++ FiMustWriteLock(file); ++ AuDebugOn(!au_fi(file)->fi_hdir); ++ au_fi(file)->fi_hdir->fd_bbot = bindex; ++} ++ ++static inline void au_set_fvdir_cache(struct file *file, ++ struct au_vdir *vdir_cache) ++{ ++ FiMustWriteLock(file); ++ AuDebugOn(!au_fi(file)->fi_hdir); ++ au_fi(file)->fi_hdir->fd_vdir_cache = vdir_cache; ++} ++ ++static inline struct file *au_hf_top(struct file *file) ++{ ++ FiMustAnyLock(file); ++ AuDebugOn(au_fi(file)->fi_hdir); ++ return au_fi(file)->fi_htop.hf_file; ++} ++ ++static inline struct file *au_hf_dir(struct file *file, aufs_bindex_t bindex) ++{ ++ FiMustAnyLock(file); ++ AuDebugOn(!au_fi(file)->fi_hdir); ++ return au_fi(file)->fi_hdir->fd_hfile[0 + bindex].hf_file; ++} ++ ++/* todo: memory barrier? */ ++static inline unsigned int au_figen(struct file *f) ++{ ++ return atomic_read(&au_fi(f)->fi_generation); ++} ++ ++static inline int au_test_mmapped(struct file *f) ++{ ++ FiMustAnyLock(f); ++ return !!(au_fi(f)->fi_hvmop); ++} ++ ++#endif /* __KERNEL__ */ ++#endif /* __AUFS_FILE_H__ */ +diff -urN a/fs/aufs/finfo.c b/fs/aufs/finfo.c +--- a/fs/aufs/finfo.c 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/finfo.c 2011-03-06 23:28:02.620413138 +0000 +@@ -0,0 +1,174 @@ ++/* ++ * Copyright (C) 2005-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * file private data ++ */ ++ ++#include ++#include "aufs.h" ++ ++void au_hfput(struct au_hfile *hf, struct file *file) ++{ ++ /* todo: direct access f_flags */ ++ if (vfsub_file_flags(file) & vfsub_fmode_to_uint(FMODE_EXEC)) ++ allow_write_access(hf->hf_file); ++ fput(hf->hf_file); ++ hf->hf_file = NULL; ++ atomic_dec(&hf->hf_br->br_count); ++ hf->hf_br = NULL; ++} ++ ++void au_set_h_fptr(struct file *file, aufs_bindex_t bindex, struct file *val) ++{ ++ struct au_finfo *finfo = au_fi(file); ++ struct au_hfile *hf; ++ struct au_fidir *fidir; ++ ++ fidir = finfo->fi_hdir; ++ if (!fidir) { ++ AuDebugOn(finfo->fi_btop != bindex); ++ hf = &finfo->fi_htop; ++ } else ++ hf = fidir->fd_hfile + bindex; ++ ++ if (hf && hf->hf_file) ++ au_hfput(hf, file); ++ if (val) { ++ FiMustWriteLock(file); ++ hf->hf_file = val; ++ hf->hf_br = au_sbr(file->f_dentry->d_sb, bindex); ++ } ++} ++ ++void au_update_figen(struct file *file) ++{ ++ atomic_set(&au_fi(file)->fi_generation, au_digen(file->f_dentry)); ++ /* smp_mb(); */ /* atomic_set */ ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++void au_fi_mmap_lock(struct file *file) ++{ ++ FiMustWriteLock(file); ++ lockdep_off(); ++ mutex_lock(&au_fi(file)->fi_mmap); ++ lockdep_on(); ++} ++ ++void au_fi_mmap_unlock(struct file *file) ++{ ++ lockdep_off(); ++ mutex_unlock(&au_fi(file)->fi_mmap); ++ lockdep_on(); ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++struct au_fidir *au_fidir_alloc(struct super_block *sb) ++{ ++ struct au_fidir *fidir; ++ int nbr; ++ ++ nbr = au_sbend(sb) + 1; ++ if (nbr < 2) ++ nbr = 2; /* initial allocate for 2 branches */ ++ fidir = kzalloc(au_fidir_sz(nbr), GFP_NOFS); ++ if (fidir) { ++ fidir->fd_bbot = -1; ++ fidir->fd_nent = nbr; ++ fidir->fd_vdir_cache = NULL; ++ } ++ ++ return fidir; ++} ++ ++int au_fidir_realloc(struct au_finfo *finfo, int nbr) ++{ ++ int err; ++ struct au_fidir *fidir, *p; ++ ++ AuRwMustWriteLock(&finfo->fi_rwsem); ++ fidir = finfo->fi_hdir; ++ AuDebugOn(!fidir); ++ ++ err = -ENOMEM; ++ p = au_kzrealloc(fidir, au_fidir_sz(fidir->fd_nent), au_fidir_sz(nbr), ++ GFP_NOFS); ++ if (p) { ++ p->fd_nent = nbr; ++ finfo->fi_hdir = p; ++ err = 0; ++ } ++ ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++void au_finfo_fin(struct file *file) ++{ ++ struct au_finfo *finfo; ++ ++ au_nfiles_dec(file->f_dentry->d_sb); ++ ++ finfo = au_fi(file); ++ AuDebugOn(finfo->fi_hdir); ++ AuRwDestroy(&finfo->fi_rwsem); ++ au_cache_free_finfo(finfo); ++} ++ ++void au_fi_init_once(void *_finfo) ++{ ++ struct au_finfo *finfo = _finfo; ++ static struct lock_class_key aufs_fi, aufs_fi_vm, aufs_fi_mmap; ++ ++ au_rw_init(&finfo->fi_rwsem); ++ au_rw_class(&finfo->fi_rwsem, &aufs_fi); ++ mutex_init(&finfo->fi_vm_mtx); ++ lockdep_set_class(&finfo->fi_vm_mtx, &aufs_fi_vm); ++ mutex_init(&finfo->fi_mmap); ++ lockdep_set_class(&finfo->fi_mmap, &aufs_fi_mmap); ++} ++ ++int au_finfo_init(struct file *file, struct au_fidir *fidir) ++{ ++ int err; ++ struct au_finfo *finfo; ++ struct dentry *dentry; ++ ++ err = -ENOMEM; ++ dentry = file->f_dentry; ++ finfo = au_cache_alloc_finfo(); ++ if (unlikely(!finfo)) ++ goto out; ++ ++ err = 0; ++ au_nfiles_inc(dentry->d_sb); ++ au_rw_write_lock(&finfo->fi_rwsem); ++ finfo->fi_btop = -1; ++ finfo->fi_hdir = fidir; ++ atomic_set(&finfo->fi_generation, au_digen(dentry)); ++ /* smp_mb(); */ /* atomic_set */ ++ ++ file->private_data = finfo; ++ ++out: ++ return err; ++} +diff -urN a/fs/aufs/f_op.c b/fs/aufs/f_op.c +--- a/fs/aufs/f_op.c 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/f_op.c 2011-03-06 23:28:02.616413258 +0000 +@@ -0,0 +1,907 @@ ++/* ++ * Copyright (C) 2005-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * file and vm operations ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include "aufs.h" ++ ++int au_do_open_nondir(struct file *file, int flags) ++{ ++ int err; ++ aufs_bindex_t bindex; ++ struct file *h_file; ++ struct dentry *dentry; ++ struct au_finfo *finfo; ++ ++ FiMustWriteLock(file); ++ ++ dentry = file->f_dentry; ++ err = au_d_alive(dentry); ++ if (unlikely(err)) ++ goto out; ++ ++ finfo = au_fi(file); ++ memset(&finfo->fi_htop, 0, sizeof(finfo->fi_htop)); ++ finfo->fi_hvmop = NULL; ++ bindex = au_dbstart(dentry); ++ h_file = au_h_open(dentry, bindex, flags, file); ++ if (IS_ERR(h_file)) ++ err = PTR_ERR(h_file); ++ else { ++ au_set_fbstart(file, bindex); ++ au_set_h_fptr(file, bindex, h_file); ++ au_update_figen(file); ++ /* todo: necessary? */ ++ /* file->f_ra = h_file->f_ra; */ ++ } ++ ++out: ++ return err; ++} ++ ++static int aufs_open_nondir(struct inode *inode __maybe_unused, ++ struct file *file) ++{ ++ int err; ++ struct super_block *sb; ++ ++ AuDbg("%.*s, f_ flags 0x%x, f_mode 0x%x\n", ++ AuDLNPair(file->f_dentry), vfsub_file_flags(file), ++ file->f_mode); ++ ++ sb = file->f_dentry->d_sb; ++ si_read_lock(sb, AuLock_FLUSH); ++ err = au_do_open(file, au_do_open_nondir, /*fidir*/NULL); ++ si_read_unlock(sb); ++ return err; ++} ++ ++int aufs_release_nondir(struct inode *inode __maybe_unused, struct file *file) ++{ ++ struct au_finfo *finfo; ++ aufs_bindex_t bindex; ++ ++ finfo = au_fi(file); ++ bindex = finfo->fi_btop; ++ if (bindex >= 0) { ++ /* remove me from sb->s_files */ ++ file_sb_list_del(file); ++ au_set_h_fptr(file, bindex, NULL); ++ } ++ ++ au_finfo_fin(file); ++ return 0; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++static int au_do_flush_nondir(struct file *file, fl_owner_t id) ++{ ++ int err; ++ struct file *h_file; ++ ++ err = 0; ++ h_file = au_hf_top(file); ++ if (h_file) ++ err = vfsub_flush(h_file, id); ++ return err; ++} ++ ++static int aufs_flush_nondir(struct file *file, fl_owner_t id) ++{ ++ return au_do_flush(file, id, au_do_flush_nondir); ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++static ssize_t aufs_read(struct file *file, char __user *buf, size_t count, ++ loff_t *ppos) ++{ ++ ssize_t err; ++ struct dentry *dentry; ++ struct file *h_file; ++ struct super_block *sb; ++ ++ dentry = file->f_dentry; ++ sb = dentry->d_sb; ++ si_read_lock(sb, AuLock_FLUSH | AuLock_NOPLMW); ++ err = au_reval_and_lock_fdi(file, au_reopen_nondir, /*wlock*/0); ++ if (unlikely(err)) ++ goto out; ++ ++ h_file = au_hf_top(file); ++ err = vfsub_read_u(h_file, buf, count, ppos); ++ /* todo: necessary? */ ++ /* file->f_ra = h_file->f_ra; */ ++ fsstack_copy_attr_atime(dentry->d_inode, h_file->f_dentry->d_inode); ++ ++ di_read_unlock(dentry, AuLock_IR); ++ fi_read_unlock(file); ++out: ++ si_read_unlock(sb); ++ return err; ++} ++ ++/* ++ * todo: very ugly ++ * it locks both of i_mutex and si_rwsem for read in safe. ++ * if the plink maintenance mode continues forever (that is the problem), ++ * may loop forever. ++ */ ++static void au_mtx_and_read_lock(struct inode *inode) ++{ ++ int err; ++ struct super_block *sb = inode->i_sb; ++ ++ while (1) { ++ mutex_lock(&inode->i_mutex); ++ err = si_read_lock(sb, AuLock_FLUSH | AuLock_NOPLM); ++ if (!err) ++ break; ++ mutex_unlock(&inode->i_mutex); ++ si_read_lock(sb, AuLock_NOPLMW); ++ si_read_unlock(sb); ++ } ++} ++ ++static ssize_t aufs_write(struct file *file, const char __user *ubuf, ++ size_t count, loff_t *ppos) ++{ ++ ssize_t err; ++ struct au_pin pin; ++ struct dentry *dentry; ++ struct inode *inode; ++ struct file *h_file; ++ char __user *buf = (char __user *)ubuf; ++ ++ dentry = file->f_dentry; ++ inode = dentry->d_inode; ++ au_mtx_and_read_lock(inode); ++ ++ err = au_reval_and_lock_fdi(file, au_reopen_nondir, /*wlock*/1); ++ if (unlikely(err)) ++ goto out; ++ ++ err = au_ready_to_write(file, -1, &pin); ++ di_downgrade_lock(dentry, AuLock_IR); ++ if (unlikely(err)) ++ goto out_unlock; ++ ++ h_file = au_hf_top(file); ++ au_unpin(&pin); ++ err = vfsub_write_u(h_file, buf, count, ppos); ++ au_cpup_attr_timesizes(inode); ++ inode->i_mode = h_file->f_dentry->d_inode->i_mode; ++ ++out_unlock: ++ di_read_unlock(dentry, AuLock_IR); ++ fi_write_unlock(file); ++out: ++ si_read_unlock(inode->i_sb); ++ mutex_unlock(&inode->i_mutex); ++ return err; ++} ++ ++static ssize_t au_do_aio(struct file *h_file, int rw, struct kiocb *kio, ++ const struct iovec *iov, unsigned long nv, loff_t pos) ++{ ++ ssize_t err; ++ struct file *file; ++ ssize_t (*func)(struct kiocb *, const struct iovec *, unsigned long, ++ loff_t); ++ ++ err = security_file_permission(h_file, rw); ++ if (unlikely(err)) ++ goto out; ++ ++ err = -ENOSYS; ++ func = NULL; ++ if (rw == MAY_READ) ++ func = h_file->f_op->aio_read; ++ else if (rw == MAY_WRITE) ++ func = h_file->f_op->aio_write; ++ if (func) { ++ file = kio->ki_filp; ++ kio->ki_filp = h_file; ++ err = func(kio, iov, nv, pos); ++ kio->ki_filp = file; ++ } else ++ /* currently there is no such fs */ ++ WARN_ON_ONCE(1); ++ ++out: ++ return err; ++} ++ ++static ssize_t aufs_aio_read(struct kiocb *kio, const struct iovec *iov, ++ unsigned long nv, loff_t pos) ++{ ++ ssize_t err; ++ struct file *file, *h_file; ++ struct dentry *dentry; ++ struct super_block *sb; ++ ++ file = kio->ki_filp; ++ dentry = file->f_dentry; ++ sb = dentry->d_sb; ++ si_read_lock(sb, AuLock_FLUSH | AuLock_NOPLMW); ++ err = au_reval_and_lock_fdi(file, au_reopen_nondir, /*wlock*/0); ++ if (unlikely(err)) ++ goto out; ++ ++ h_file = au_hf_top(file); ++ err = au_do_aio(h_file, MAY_READ, kio, iov, nv, pos); ++ /* todo: necessary? */ ++ /* file->f_ra = h_file->f_ra; */ ++ fsstack_copy_attr_atime(dentry->d_inode, h_file->f_dentry->d_inode); ++ di_read_unlock(dentry, AuLock_IR); ++ fi_read_unlock(file); ++ ++out: ++ si_read_unlock(sb); ++ return err; ++} ++ ++static ssize_t aufs_aio_write(struct kiocb *kio, const struct iovec *iov, ++ unsigned long nv, loff_t pos) ++{ ++ ssize_t err; ++ struct au_pin pin; ++ struct dentry *dentry; ++ struct inode *inode; ++ struct file *file, *h_file; ++ ++ file = kio->ki_filp; ++ dentry = file->f_dentry; ++ inode = dentry->d_inode; ++ au_mtx_and_read_lock(inode); ++ ++ err = au_reval_and_lock_fdi(file, au_reopen_nondir, /*wlock*/1); ++ if (unlikely(err)) ++ goto out; ++ ++ err = au_ready_to_write(file, -1, &pin); ++ di_downgrade_lock(dentry, AuLock_IR); ++ if (unlikely(err)) ++ goto out_unlock; ++ ++ au_unpin(&pin); ++ h_file = au_hf_top(file); ++ err = au_do_aio(h_file, MAY_WRITE, kio, iov, nv, pos); ++ au_cpup_attr_timesizes(inode); ++ inode->i_mode = h_file->f_dentry->d_inode->i_mode; ++ ++out_unlock: ++ di_read_unlock(dentry, AuLock_IR); ++ fi_write_unlock(file); ++out: ++ si_read_unlock(inode->i_sb); ++ mutex_unlock(&inode->i_mutex); ++ return err; ++} ++ ++static ssize_t aufs_splice_read(struct file *file, loff_t *ppos, ++ struct pipe_inode_info *pipe, size_t len, ++ unsigned int flags) ++{ ++ ssize_t err; ++ struct file *h_file; ++ struct dentry *dentry; ++ struct super_block *sb; ++ ++ dentry = file->f_dentry; ++ sb = dentry->d_sb; ++ si_read_lock(sb, AuLock_FLUSH | AuLock_NOPLMW); ++ err = au_reval_and_lock_fdi(file, au_reopen_nondir, /*wlock*/0); ++ if (unlikely(err)) ++ goto out; ++ ++ err = -EINVAL; ++ h_file = au_hf_top(file); ++ if (au_test_loopback_kthread()) { ++ file->f_mapping = h_file->f_mapping; ++ smp_mb(); /* unnecessary? */ ++ } ++ err = vfsub_splice_to(h_file, ppos, pipe, len, flags); ++ /* todo: necessasry? */ ++ /* file->f_ra = h_file->f_ra; */ ++ fsstack_copy_attr_atime(dentry->d_inode, h_file->f_dentry->d_inode); ++ ++ di_read_unlock(dentry, AuLock_IR); ++ fi_read_unlock(file); ++ ++out: ++ si_read_unlock(sb); ++ return err; ++} ++ ++static ssize_t ++aufs_splice_write(struct pipe_inode_info *pipe, struct file *file, loff_t *ppos, ++ size_t len, unsigned int flags) ++{ ++ ssize_t err; ++ struct au_pin pin; ++ struct dentry *dentry; ++ struct inode *inode; ++ struct file *h_file; ++ ++ dentry = file->f_dentry; ++ inode = dentry->d_inode; ++ au_mtx_and_read_lock(inode); ++ err = au_reval_and_lock_fdi(file, au_reopen_nondir, /*wlock*/1); ++ if (unlikely(err)) ++ goto out; ++ ++ err = au_ready_to_write(file, -1, &pin); ++ di_downgrade_lock(dentry, AuLock_IR); ++ if (unlikely(err)) ++ goto out_unlock; ++ ++ h_file = au_hf_top(file); ++ au_unpin(&pin); ++ err = vfsub_splice_from(pipe, h_file, ppos, len, flags); ++ au_cpup_attr_timesizes(inode); ++ inode->i_mode = h_file->f_dentry->d_inode->i_mode; ++ ++out_unlock: ++ di_read_unlock(dentry, AuLock_IR); ++ fi_write_unlock(file); ++out: ++ si_read_unlock(inode->i_sb); ++ mutex_unlock(&inode->i_mutex); ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++static struct file *au_safe_file(struct vm_area_struct *vma) ++{ ++ struct file *file; ++ ++ file = vma->vm_file; ++ if (au_fi(file) && au_test_aufs(file->f_dentry->d_sb)) ++ return file; ++ return NULL; ++} ++ ++static void au_reset_file(struct vm_area_struct *vma, struct file *file) ++{ ++ vma->vm_file = file; ++ /* smp_mb(); */ /* flush vm_file */ ++} ++ ++static int aufs_fault(struct vm_area_struct *vma, struct vm_fault *vmf) ++{ ++ int err; ++ static DECLARE_WAIT_QUEUE_HEAD(wq); ++ struct file *file, *h_file; ++ struct au_finfo *finfo; ++ ++ /* todo: non-robr mode, user vm_file as it is? */ ++ wait_event(wq, (file = au_safe_file(vma))); ++ ++ /* do not revalidate, no si lock */ ++ finfo = au_fi(file); ++ AuDebugOn(finfo->fi_hdir); ++ h_file = finfo->fi_htop.hf_file; ++ AuDebugOn(!h_file || !finfo->fi_hvmop); ++ ++ mutex_lock(&finfo->fi_vm_mtx); ++ vma->vm_file = h_file; ++ err = finfo->fi_hvmop->fault(vma, vmf); ++ /* todo: necessary? */ ++ /* file->f_ra = h_file->f_ra; */ ++ au_reset_file(vma, file); ++ mutex_unlock(&finfo->fi_vm_mtx); ++#if 0 /* def CONFIG_SMP */ ++ /* wake_up_nr(&wq, online_cpu - 1); */ ++ wake_up_all(&wq); ++#else ++ wake_up(&wq); ++#endif ++ ++ return err; ++} ++ ++static int aufs_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf) ++{ ++ int err; ++ static DECLARE_WAIT_QUEUE_HEAD(wq); ++ struct file *file, *h_file; ++ struct au_finfo *finfo; ++ ++ wait_event(wq, (file = au_safe_file(vma))); ++ ++ finfo = au_fi(file); ++ AuDebugOn(finfo->fi_hdir); ++ h_file = finfo->fi_htop.hf_file; ++ AuDebugOn(!h_file || !finfo->fi_hvmop); ++ ++ mutex_lock(&finfo->fi_vm_mtx); ++ vma->vm_file = h_file; ++ err = finfo->fi_hvmop->page_mkwrite(vma, vmf); ++ au_reset_file(vma, file); ++ mutex_unlock(&finfo->fi_vm_mtx); ++ wake_up(&wq); ++ ++ return err; ++} ++ ++static void aufs_vm_close(struct vm_area_struct *vma) ++{ ++ static DECLARE_WAIT_QUEUE_HEAD(wq); ++ struct file *file, *h_file; ++ struct au_finfo *finfo; ++ ++ wait_event(wq, (file = au_safe_file(vma))); ++ ++ finfo = au_fi(file); ++ AuDebugOn(finfo->fi_hdir); ++ h_file = finfo->fi_htop.hf_file; ++ AuDebugOn(!h_file || !finfo->fi_hvmop); ++ ++ mutex_lock(&finfo->fi_vm_mtx); ++ vma->vm_file = h_file; ++ finfo->fi_hvmop->close(vma); ++ au_reset_file(vma, file); ++ mutex_unlock(&finfo->fi_vm_mtx); ++ wake_up(&wq); ++} ++ ++const struct vm_operations_struct aufs_vm_ops = { ++ .close = aufs_vm_close, ++ .fault = aufs_fault, ++ .page_mkwrite = aufs_page_mkwrite ++}; ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* cf. linux/include/linux/mman.h: calc_vm_prot_bits() */ ++#define AuConv_VM_PROT(f, b) _calc_vm_trans(f, VM_##b, PROT_##b) ++ ++static unsigned long au_arch_prot_conv(unsigned long flags) ++{ ++ /* currently ppc64 only */ ++#ifdef CONFIG_PPC64 ++ /* cf. linux/arch/powerpc/include/asm/mman.h */ ++ AuDebugOn(arch_calc_vm_prot_bits(-1) != VM_SAO); ++ return AuConv_VM_PROT(flags, SAO); ++#else ++ AuDebugOn(arch_calc_vm_prot_bits(-1)); ++ return 0; ++#endif ++} ++ ++static unsigned long au_prot_conv(unsigned long flags) ++{ ++ return AuConv_VM_PROT(flags, READ) ++ | AuConv_VM_PROT(flags, WRITE) ++ | AuConv_VM_PROT(flags, EXEC) ++ | au_arch_prot_conv(flags); ++} ++ ++/* cf. linux/include/linux/mman.h: calc_vm_flag_bits() */ ++#define AuConv_VM_MAP(f, b) _calc_vm_trans(f, VM_##b, MAP_##b) ++ ++static unsigned long au_flag_conv(unsigned long flags) ++{ ++ return AuConv_VM_MAP(flags, GROWSDOWN) ++ | AuConv_VM_MAP(flags, DENYWRITE) ++ | AuConv_VM_MAP(flags, EXECUTABLE) ++ | AuConv_VM_MAP(flags, LOCKED); ++} ++ ++static struct vm_operations_struct * ++au_hvmop(struct file *h_file, struct vm_area_struct *vma, unsigned long *flags) ++{ ++ struct vm_operations_struct *h_vmop; ++ unsigned long prot; ++ int err; ++ ++ h_vmop = ERR_PTR(-ENODEV); ++ if (!h_file->f_op || !h_file->f_op->mmap) ++ goto out; ++ ++ prot = au_prot_conv(vma->vm_flags); ++ err = security_file_mmap(h_file, /*reqprot*/prot, prot, ++ au_flag_conv(vma->vm_flags), vma->vm_start, 0); ++ h_vmop = ERR_PTR(err); ++ if (unlikely(err)) ++ goto out; ++ ++ err = h_file->f_op->mmap(h_file, vma); ++ h_vmop = ERR_PTR(err); ++ if (unlikely(err)) ++ goto out; ++ ++ /* oops, it became 'const' */ ++ h_vmop = (struct vm_operations_struct *)vma->vm_ops; ++ *flags = vma->vm_flags; ++ err = do_munmap(current->mm, vma->vm_start, ++ vma->vm_end - vma->vm_start); ++ if (unlikely(err)) { ++ AuIOErr("failed internal unmapping %.*s, %d\n", ++ AuDLNPair(h_file->f_dentry), err); ++ h_vmop = ERR_PTR(-EIO); ++ } ++ ++out: ++ return h_vmop; ++} ++ ++/* ++ * This is another ugly approach to keep the lock order, particularly ++ * mm->mmap_sem and aufs rwsem. The previous approach was reverted and you can ++ * find it in git-log, if you want. ++ * ++ * native readdir: i_mutex, copy_to_user, mmap_sem ++ * aufs readdir: i_mutex, rwsem, nested-i_mutex, copy_to_user, mmap_sem ++ * ++ * Before aufs_mmap() mmap_sem is acquired already, but aufs_mmap() has to ++ * acquire aufs rwsem. It introduces a circular locking dependency. ++ * To address this problem, aufs_mmap() delegates the part which requires aufs ++ * rwsem to its internal workqueue. ++ */ ++ ++/* very ugly approach */ ++#include "mtx.h" ++ ++struct au_mmap_pre_args { ++ /* input */ ++ struct file *file; ++ struct vm_area_struct *vma; ++ ++ /* output */ ++ int *errp; ++ struct file *h_file; ++ struct au_branch *br; ++ int mmapped; ++}; ++ ++static int au_mmap_pre(struct file *file, struct vm_area_struct *vma, ++ struct file **h_file, struct au_branch **br, ++ int *mmapped) ++{ ++ int err; ++ aufs_bindex_t bstart; ++ const unsigned char wlock ++ = !!(file->f_mode & FMODE_WRITE) && (vma->vm_flags & VM_SHARED); ++ struct dentry *dentry; ++ struct super_block *sb; ++ ++ dentry = file->f_dentry; ++ sb = dentry->d_sb; ++ si_read_lock(sb, AuLock_NOPLMW); ++ err = au_reval_and_lock_fdi(file, au_reopen_nondir, /*wlock*/1); ++ if (unlikely(err)) ++ goto out; ++ ++ *mmapped = !!au_test_mmapped(file); ++ if (wlock) { ++ struct au_pin pin; ++ ++ err = au_ready_to_write(file, -1, &pin); ++ di_write_unlock(dentry); ++ if (unlikely(err)) ++ goto out_unlock; ++ au_unpin(&pin); ++ } else ++ di_write_unlock(dentry); ++ bstart = au_fbstart(file); ++ *br = au_sbr(sb, bstart); ++ *h_file = au_hf_top(file); ++ get_file(*h_file); ++ au_fi_mmap_lock(file); ++ ++out_unlock: ++ fi_write_unlock(file); ++out: ++ si_read_unlock(sb); ++ return err; ++} ++ ++static void au_call_mmap_pre(void *args) ++{ ++ struct au_mmap_pre_args *a = args; ++ *a->errp = au_mmap_pre(a->file, a->vma, &a->h_file, &a->br, ++ &a->mmapped); ++} ++ ++static int aufs_mmap(struct file *file, struct vm_area_struct *vma) ++{ ++ int err, wkq_err; ++ unsigned long h_vmflags; ++ struct au_finfo *finfo; ++ struct dentry *h_dentry; ++ struct vm_operations_struct *h_vmop, *vmop; ++ struct au_mmap_pre_args args = { ++ .file = file, ++ .vma = vma, ++ .errp = &err ++ }; ++ ++ wkq_err = au_wkq_wait_pre(au_call_mmap_pre, &args); ++ if (unlikely(wkq_err)) ++ err = wkq_err; ++ if (unlikely(err)) ++ goto out; ++ finfo = au_fi(file); ++ mutex_set_owner(&finfo->fi_mmap); ++ ++ h_dentry = args.h_file->f_dentry; ++ if (!args.mmapped && au_test_fs_bad_mapping(h_dentry->d_sb)) { ++ /* ++ * by this assignment, f_mapping will differs from aufs inode ++ * i_mapping. ++ * if someone else mixes the use of f_dentry->d_inode and ++ * f_mapping->host, then a problem may arise. ++ */ ++ file->f_mapping = args.h_file->f_mapping; ++ } ++ ++ /* always try this internal mmap to get vma flags */ ++ h_vmflags = 0; /* gcc warning */ ++ h_vmop = au_hvmop(args.h_file, vma, &h_vmflags); ++ err = PTR_ERR(h_vmop); ++ if (IS_ERR(h_vmop)) ++ goto out_unlock; ++ AuDebugOn(args.mmapped && h_vmop != finfo->fi_hvmop); ++ ++ vmop = (void *)au_dy_vmop(file, args.br, h_vmop); ++ err = PTR_ERR(vmop); ++ if (IS_ERR(vmop)) ++ goto out_unlock; ++ ++ /* ++ * unnecessary to handle MAP_DENYWRITE and deny_write_access()? ++ * currently MAP_DENYWRITE from userspace is ignored, but elf loader ++ * sets it. when FMODE_EXEC is set (by open_exec() or sys_uselib()), ++ * both of the aufs file and the lower file is deny_write_access()-ed. ++ * finally I hope we can skip handlling MAP_DENYWRITE here. ++ */ ++ err = generic_file_mmap(file, vma); ++ if (unlikely(err)) ++ goto out_unlock; ++ ++ vma->vm_ops = vmop; ++ vma->vm_flags = h_vmflags; ++ if (!args.mmapped) ++ finfo->fi_hvmop = h_vmop; ++ ++ vfsub_file_accessed(args.h_file); ++ /* update without lock, I don't think it a problem */ ++ fsstack_copy_attr_atime(file->f_dentry->d_inode, h_dentry->d_inode); ++ ++out_unlock: ++ au_fi_mmap_unlock(file); ++ fput(args.h_file); ++out: ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++static int aufs_fsync_nondir(struct file *file, int datasync) ++{ ++ int err; ++ struct au_pin pin; ++ struct dentry *dentry; ++ struct inode *inode; ++ struct file *h_file; ++ struct super_block *sb; ++ ++ dentry = file->f_dentry; ++ inode = dentry->d_inode; ++ IMustLock(file->f_mapping->host); ++ if (inode != file->f_mapping->host) { ++ mutex_unlock(&file->f_mapping->host->i_mutex); ++ mutex_lock(&inode->i_mutex); ++ } ++ IMustLock(inode); ++ ++ sb = dentry->d_sb; ++ err = si_read_lock(sb, AuLock_FLUSH | AuLock_NOPLM); ++ if (unlikely(err)) ++ goto out; ++ ++ err = 0; /* -EBADF; */ /* posix? */ ++ if (unlikely(!(file->f_mode & FMODE_WRITE))) ++ goto out_si; ++ err = au_reval_and_lock_fdi(file, au_reopen_nondir, /*wlock*/1); ++ if (unlikely(err)) ++ goto out_si; ++ ++ err = au_ready_to_write(file, -1, &pin); ++ di_downgrade_lock(dentry, AuLock_IR); ++ if (unlikely(err)) ++ goto out_unlock; ++ au_unpin(&pin); ++ ++ err = -EINVAL; ++ h_file = au_hf_top(file); ++ if (h_file->f_op && h_file->f_op->fsync) { ++ struct mutex *h_mtx; ++ ++ /* ++ * no filemap_fdatawrite() since aufs file has no its own ++ * mapping, but dir. ++ */ ++ h_mtx = &h_file->f_dentry->d_inode->i_mutex; ++ mutex_lock_nested(h_mtx, AuLsc_I_CHILD); ++ err = h_file->f_op->fsync(h_file, datasync); ++ if (!err) ++ vfsub_update_h_iattr(&h_file->f_path, /*did*/NULL); ++ /*ignore*/ ++ au_cpup_attr_timesizes(inode); ++ mutex_unlock(h_mtx); ++ } ++ ++out_unlock: ++ di_read_unlock(dentry, AuLock_IR); ++ fi_write_unlock(file); ++out_si: ++ si_read_unlock(sb); ++out: ++ if (inode != file->f_mapping->host) { ++ mutex_unlock(&inode->i_mutex); ++ mutex_lock(&file->f_mapping->host->i_mutex); ++ } ++ return err; ++} ++ ++/* no one supports this operation, currently */ ++#if 0 ++static int aufs_aio_fsync_nondir(struct kiocb *kio, int datasync) ++{ ++ int err; ++ struct au_pin pin; ++ struct dentry *dentry; ++ struct inode *inode; ++ struct file *file, *h_file; ++ ++ file = kio->ki_filp; ++ dentry = file->f_dentry; ++ inode = dentry->d_inode; ++ au_mtx_and_read_lock(inode); ++ ++ err = 0; /* -EBADF; */ /* posix? */ ++ if (unlikely(!(file->f_mode & FMODE_WRITE))) ++ goto out; ++ err = au_reval_and_lock_fdi(file, au_reopen_nondir, /*wlock*/1); ++ if (unlikely(err)) ++ goto out; ++ ++ err = au_ready_to_write(file, -1, &pin); ++ di_downgrade_lock(dentry, AuLock_IR); ++ if (unlikely(err)) ++ goto out_unlock; ++ au_unpin(&pin); ++ ++ err = -ENOSYS; ++ h_file = au_hf_top(file); ++ if (h_file->f_op && h_file->f_op->aio_fsync) { ++ struct dentry *h_d; ++ struct mutex *h_mtx; ++ ++ h_d = h_file->f_dentry; ++ h_mtx = &h_d->d_inode->i_mutex; ++ if (!is_sync_kiocb(kio)) { ++ get_file(h_file); ++ fput(file); ++ } ++ kio->ki_filp = h_file; ++ err = h_file->f_op->aio_fsync(kio, datasync); ++ mutex_lock_nested(h_mtx, AuLsc_I_CHILD); ++ if (!err) ++ vfsub_update_h_iattr(&h_file->f_path, /*did*/NULL); ++ /*ignore*/ ++ au_cpup_attr_timesizes(inode); ++ mutex_unlock(h_mtx); ++ } ++ ++out_unlock: ++ di_read_unlock(dentry, AuLock_IR); ++ fi_write_unlock(file); ++out: ++ si_read_unlock(inode->sb); ++ mutex_unlock(&inode->i_mutex); ++ return err; ++} ++#endif ++ ++static int aufs_fasync(int fd, struct file *file, int flag) ++{ ++ int err; ++ struct file *h_file; ++ struct dentry *dentry; ++ struct super_block *sb; ++ ++ dentry = file->f_dentry; ++ sb = dentry->d_sb; ++ si_read_lock(sb, AuLock_FLUSH | AuLock_NOPLMW); ++ err = au_reval_and_lock_fdi(file, au_reopen_nondir, /*wlock*/0); ++ if (unlikely(err)) ++ goto out; ++ ++ h_file = au_hf_top(file); ++ if (h_file->f_op && h_file->f_op->fasync) ++ err = h_file->f_op->fasync(fd, h_file, flag); ++ ++ di_read_unlock(dentry, AuLock_IR); ++ fi_read_unlock(file); ++ ++out: ++ si_read_unlock(sb); ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* no one supports this operation, currently */ ++#if 0 ++static ssize_t aufs_sendpage(struct file *file, struct page *page, int offset, ++ size_t len, loff_t *pos , int more) ++{ ++} ++#endif ++ ++/* ---------------------------------------------------------------------- */ ++ ++const struct file_operations aufs_file_fop = { ++ .owner = THIS_MODULE, ++ /* ++ * while generic_file_llseek/_unlocked() don't use BKL, ++ * don't use it since it operates file->f_mapping->host. ++ * in aufs, it may be a real file and may confuse users by UDBA. ++ */ ++ /* .llseek = generic_file_llseek, */ ++ .llseek = default_llseek, ++ ++ .read = aufs_read, ++ .write = aufs_write, ++ .aio_read = aufs_aio_read, ++ .aio_write = aufs_aio_write, ++#ifdef CONFIG_AUFS_POLL ++ .poll = aufs_poll, ++#endif ++ .unlocked_ioctl = aufs_ioctl_nondir, ++#ifdef CONFIG_COMPAT ++ .compat_ioctl = aufs_ioctl_nondir, /* same */ ++#endif ++ .mmap = aufs_mmap, ++ .open = aufs_open_nondir, ++ .flush = aufs_flush_nondir, ++ .release = aufs_release_nondir, ++ .fsync = aufs_fsync_nondir, ++ /* .aio_fsync = aufs_aio_fsync_nondir, */ ++ .fasync = aufs_fasync, ++ /* .sendpage = aufs_sendpage, */ ++ .splice_write = aufs_splice_write, ++ .splice_read = aufs_splice_read, ++#if 0 ++ .aio_splice_write = aufs_aio_splice_write, ++ .aio_splice_read = aufs_aio_splice_read ++#endif ++}; +diff -urN a/fs/aufs/f_op_sp.c b/fs/aufs/f_op_sp.c +--- a/fs/aufs/f_op_sp.c 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/f_op_sp.c 2011-03-06 23:28:02.620413138 +0000 +@@ -0,0 +1,299 @@ ++/* ++ * Copyright (C) 2005-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * file operations for special files. ++ * while they exist in aufs virtually, ++ * their file I/O is handled out of aufs. ++ */ ++ ++#include ++#include "aufs.h" ++ ++static ssize_t aufs_aio_read_sp(struct kiocb *kio, const struct iovec *iov, ++ unsigned long nv, loff_t pos) ++{ ++ ssize_t err; ++ aufs_bindex_t bstart; ++ unsigned char wbr; ++ struct file *file, *h_file; ++ struct super_block *sb; ++ ++ file = kio->ki_filp; ++ sb = file->f_dentry->d_sb; ++ si_read_lock(sb, AuLock_FLUSH); ++ fi_read_lock(file); ++ bstart = au_fbstart(file); ++ h_file = au_hf_top(file); ++ fi_read_unlock(file); ++ wbr = !!au_br_writable(au_sbr(sb, bstart)->br_perm); ++ si_read_unlock(sb); ++ ++ /* do not change the file in kio */ ++ AuDebugOn(!h_file->f_op || !h_file->f_op->aio_read); ++ err = h_file->f_op->aio_read(kio, iov, nv, pos); ++ if (err > 0 && wbr) ++ file_accessed(h_file); ++ ++ return err; ++} ++ ++static ssize_t aufs_aio_write_sp(struct kiocb *kio, const struct iovec *iov, ++ unsigned long nv, loff_t pos) ++{ ++ ssize_t err; ++ aufs_bindex_t bstart; ++ unsigned char wbr; ++ struct super_block *sb; ++ struct file *file, *h_file; ++ ++ file = kio->ki_filp; ++ sb = file->f_dentry->d_sb; ++ si_read_lock(sb, AuLock_FLUSH); ++ fi_read_lock(file); ++ bstart = au_fbstart(file); ++ h_file = au_hf_top(file); ++ fi_read_unlock(file); ++ wbr = !!au_br_writable(au_sbr(sb, bstart)->br_perm); ++ si_read_unlock(sb); ++ ++ /* do not change the file in kio */ ++ AuDebugOn(!h_file->f_op || !h_file->f_op->aio_write); ++ err = h_file->f_op->aio_write(kio, iov, nv, pos); ++ if (err > 0 && wbr) ++ file_update_time(h_file); ++ ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++static int aufs_release_sp(struct inode *inode, struct file *file) ++{ ++ int err; ++ struct file *h_file; ++ ++ fi_read_lock(file); ++ h_file = au_hf_top(file); ++ fi_read_unlock(file); ++ /* close this fifo in aufs */ ++ err = h_file->f_op->release(inode, file); /* ignore */ ++ aufs_release_nondir(inode, file); /* ignore */ ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* currently, support only FIFO */ ++enum { ++ AuSp_FIFO, AuSp_FIFO_R, AuSp_FIFO_W, AuSp_FIFO_RW, ++ /* AuSp_SOCK, AuSp_CHR, AuSp_BLK, */ ++ AuSp_Last ++}; ++static int aufs_open_sp(struct inode *inode, struct file *file); ++static struct au_sp_fop { ++ int done; ++ struct file_operations fop; /* not 'const' */ ++ spinlock_t spin; ++} au_sp_fop[AuSp_Last] = { ++ [AuSp_FIFO] = { ++ .fop = { ++ .owner = THIS_MODULE, ++ .open = aufs_open_sp ++ } ++ } ++}; ++ ++static void au_init_fop_sp(struct file *file) ++{ ++ struct au_sp_fop *p; ++ int i; ++ struct file *h_file; ++ ++ p = au_sp_fop; ++ if (unlikely(!p->done)) { ++ /* initialize first time only */ ++ static DEFINE_SPINLOCK(spin); ++ ++ spin_lock(&spin); ++ if (!p->done) { ++ BUILD_BUG_ON(sizeof(au_sp_fop)/sizeof(*au_sp_fop) ++ != AuSp_Last); ++ for (i = 0; i < AuSp_Last; i++) ++ spin_lock_init(&p[i].spin); ++ p->done = 1; ++ } ++ spin_unlock(&spin); ++ } ++ ++ switch (file->f_mode & (FMODE_READ | FMODE_WRITE)) { ++ case FMODE_READ: ++ i = AuSp_FIFO_R; ++ break; ++ case FMODE_WRITE: ++ i = AuSp_FIFO_W; ++ break; ++ case FMODE_READ | FMODE_WRITE: ++ i = AuSp_FIFO_RW; ++ break; ++ default: ++ BUG(); ++ } ++ ++ p += i; ++ if (unlikely(!p->done)) { ++ /* initialize first time only */ ++ h_file = au_hf_top(file); ++ spin_lock(&p->spin); ++ if (!p->done) { ++ p->fop = *h_file->f_op; ++ p->fop.owner = THIS_MODULE; ++ if (p->fop.aio_read) ++ p->fop.aio_read = aufs_aio_read_sp; ++ if (p->fop.aio_write) ++ p->fop.aio_write = aufs_aio_write_sp; ++ p->fop.release = aufs_release_sp; ++ p->done = 1; ++ } ++ spin_unlock(&p->spin); ++ } ++ file->f_op = &p->fop; ++} ++ ++static int au_cpup_sp(struct dentry *dentry) ++{ ++ int err; ++ aufs_bindex_t bcpup; ++ struct au_pin pin; ++ struct au_wr_dir_args wr_dir_args = { ++ .force_btgt = -1, ++ .flags = 0 ++ }; ++ ++ AuDbg("%.*s\n", AuDLNPair(dentry)); ++ ++ di_read_unlock(dentry, AuLock_IR); ++ di_write_lock_child(dentry); ++ err = au_wr_dir(dentry, /*src_dentry*/NULL, &wr_dir_args); ++ if (unlikely(err < 0)) ++ goto out; ++ bcpup = err; ++ err = 0; ++ if (bcpup == au_dbstart(dentry)) ++ goto out; /* success */ ++ ++ err = au_pin(&pin, dentry, bcpup, au_opt_udba(dentry->d_sb), ++ AuPin_MNT_WRITE); ++ if (!err) { ++ err = au_sio_cpup_simple(dentry, bcpup, -1, AuCpup_DTIME); ++ au_unpin(&pin); ++ } ++ ++out: ++ di_downgrade_lock(dentry, AuLock_IR); ++ return err; ++} ++ ++static int au_do_open_sp(struct file *file, int flags) ++{ ++ int err; ++ struct dentry *dentry; ++ struct super_block *sb; ++ struct file *h_file; ++ struct inode *h_inode; ++ ++ dentry = file->f_dentry; ++ AuDbg("%.*s\n", AuDLNPair(dentry)); ++ ++ /* ++ * try copying-up. ++ * operate on the ro branch is not an error. ++ */ ++ au_cpup_sp(dentry); /* ignore */ ++ ++ /* prepare h_file */ ++ err = au_do_open_nondir(file, vfsub_file_flags(file)); ++ if (unlikely(err)) ++ goto out; ++ ++ sb = dentry->d_sb; ++ h_file = au_hf_top(file); ++ h_inode = h_file->f_dentry->d_inode; ++ di_read_unlock(dentry, AuLock_IR); ++ fi_write_unlock(file); ++ si_read_unlock(sb); ++ /* open this fifo in aufs */ ++ err = h_inode->i_fop->open(file->f_dentry->d_inode, file); ++ si_noflush_read_lock(sb); ++ fi_write_lock(file); ++ di_read_lock_child(dentry, AuLock_IR); ++ if (!err) ++ au_init_fop_sp(file); ++ ++out: ++ return err; ++} ++ ++static int aufs_open_sp(struct inode *inode, struct file *file) ++{ ++ int err; ++ struct super_block *sb; ++ ++ sb = file->f_dentry->d_sb; ++ si_read_lock(sb, AuLock_FLUSH); ++ err = au_do_open(file, au_do_open_sp, /*fidir*/NULL); ++ si_read_unlock(sb); ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++void au_init_special_fop(struct inode *inode, umode_t mode, dev_t rdev) ++{ ++ init_special_inode(inode, mode, rdev); ++ ++ switch (mode & S_IFMT) { ++ case S_IFIFO: ++ inode->i_fop = &au_sp_fop[AuSp_FIFO].fop; ++ /*FALLTHROUGH*/ ++ case S_IFCHR: ++ case S_IFBLK: ++ case S_IFSOCK: ++ break; ++ default: ++ AuDebugOn(1); ++ } ++} ++ ++int au_special_file(umode_t mode) ++{ ++ int ret; ++ ++ ret = 0; ++ switch (mode & S_IFMT) { ++ case S_IFIFO: ++#if 0 ++ case S_IFCHR: ++ case S_IFBLK: ++ case S_IFSOCK: ++#endif ++ ret = 1; ++ } ++ ++ return ret; ++} +diff -urN a/fs/aufs/fstype.h b/fs/aufs/fstype.h +--- a/fs/aufs/fstype.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/fstype.h 2011-03-06 23:28:02.620413138 +0000 +@@ -0,0 +1,497 @@ ++/* ++ * Copyright (C) 2005-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * judging filesystem type ++ */ ++ ++#ifndef __AUFS_FSTYPE_H__ ++#define __AUFS_FSTYPE_H__ ++ ++#ifdef __KERNEL__ ++ ++#include ++#include ++#include ++#include ++ ++static inline int au_test_aufs(struct super_block *sb) ++{ ++ return sb->s_magic == AUFS_SUPER_MAGIC; ++} ++ ++static inline const char *au_sbtype(struct super_block *sb) ++{ ++ return sb->s_type->name; ++} ++ ++static inline int au_test_iso9660(struct super_block *sb __maybe_unused) ++{ ++#if defined(CONFIG_ROMFS_FS) || defined(CONFIG_ROMFS_FS_MODULE) ++ return sb->s_magic == ROMFS_MAGIC; ++#else ++ return 0; ++#endif ++} ++ ++static inline int au_test_romfs(struct super_block *sb __maybe_unused) ++{ ++#if defined(CONFIG_ISO9660_FS) || defined(CONFIG_ISO9660_FS_MODULE) ++ return sb->s_magic == ISOFS_SUPER_MAGIC; ++#else ++ return 0; ++#endif ++} ++ ++static inline int au_test_cramfs(struct super_block *sb __maybe_unused) ++{ ++#if defined(CONFIG_CRAMFS) || defined(CONFIG_CRAMFS_MODULE) ++ return sb->s_magic == CRAMFS_MAGIC; ++#endif ++ return 0; ++} ++ ++static inline int au_test_nfs(struct super_block *sb __maybe_unused) ++{ ++#if defined(CONFIG_NFS_FS) || defined(CONFIG_NFS_FS_MODULE) ++ return sb->s_magic == NFS_SUPER_MAGIC; ++#else ++ return 0; ++#endif ++} ++ ++static inline int au_test_fuse(struct super_block *sb __maybe_unused) ++{ ++#if defined(CONFIG_FUSE_FS) || defined(CONFIG_FUSE_FS_MODULE) ++ return sb->s_magic == FUSE_SUPER_MAGIC; ++#else ++ return 0; ++#endif ++} ++ ++static inline int au_test_xfs(struct super_block *sb __maybe_unused) ++{ ++#if defined(CONFIG_XFS_FS) || defined(CONFIG_XFS_FS_MODULE) ++ return sb->s_magic == XFS_SB_MAGIC; ++#else ++ return 0; ++#endif ++} ++ ++static inline int au_test_tmpfs(struct super_block *sb __maybe_unused) ++{ ++#ifdef CONFIG_TMPFS ++ return sb->s_magic == TMPFS_MAGIC; ++#else ++ return 0; ++#endif ++} ++ ++static inline int au_test_ecryptfs(struct super_block *sb __maybe_unused) ++{ ++#if defined(CONFIG_ECRYPT_FS) || defined(CONFIG_ECRYPT_FS_MODULE) ++ return !strcmp(au_sbtype(sb), "ecryptfs"); ++#else ++ return 0; ++#endif ++} ++ ++static inline int au_test_smbfs(struct super_block *sb __maybe_unused) ++{ ++#if defined(CONFIG_SMB_FS) || defined(CONFIG_SMB_FS_MODULE) ++ return sb->s_magic == SMB_SUPER_MAGIC; ++#else ++ return 0; ++#endif ++} ++ ++static inline int au_test_ocfs2(struct super_block *sb __maybe_unused) ++{ ++#if defined(CONFIG_OCFS2_FS) || defined(CONFIG_OCFS2_FS_MODULE) ++ return sb->s_magic == OCFS2_SUPER_MAGIC; ++#else ++ return 0; ++#endif ++} ++ ++static inline int au_test_ocfs2_dlmfs(struct super_block *sb __maybe_unused) ++{ ++#if defined(CONFIG_OCFS2_FS_O2CB) || defined(CONFIG_OCFS2_FS_O2CB_MODULE) ++ return sb->s_magic == DLMFS_MAGIC; ++#else ++ return 0; ++#endif ++} ++ ++static inline int au_test_coda(struct super_block *sb __maybe_unused) ++{ ++#if defined(CONFIG_CODA_FS) || defined(CONFIG_CODA_FS_MODULE) ++ return sb->s_magic == CODA_SUPER_MAGIC; ++#else ++ return 0; ++#endif ++} ++ ++static inline int au_test_v9fs(struct super_block *sb __maybe_unused) ++{ ++#if defined(CONFIG_9P_FS) || defined(CONFIG_9P_FS_MODULE) ++ return sb->s_magic == V9FS_MAGIC; ++#else ++ return 0; ++#endif ++} ++ ++static inline int au_test_ext4(struct super_block *sb __maybe_unused) ++{ ++#if defined(CONFIG_EXT4DEV_FS) || defined(CONFIG_EXT4DEV_FS_MODULE) ++ return sb->s_magic == EXT4_SUPER_MAGIC; ++#else ++ return 0; ++#endif ++} ++ ++static inline int au_test_sysv(struct super_block *sb __maybe_unused) ++{ ++#if defined(CONFIG_SYSV_FS) || defined(CONFIG_SYSV_FS_MODULE) ++ return !strcmp(au_sbtype(sb), "sysv"); ++#else ++ return 0; ++#endif ++} ++ ++static inline int au_test_ramfs(struct super_block *sb) ++{ ++ return sb->s_magic == RAMFS_MAGIC; ++} ++ ++static inline int au_test_ubifs(struct super_block *sb __maybe_unused) ++{ ++#if defined(CONFIG_UBIFS_FS) || defined(CONFIG_UBIFS_FS_MODULE) ++ return sb->s_magic == UBIFS_SUPER_MAGIC; ++#else ++ return 0; ++#endif ++} ++ ++static inline int au_test_procfs(struct super_block *sb __maybe_unused) ++{ ++#ifdef CONFIG_PROC_FS ++ return sb->s_magic == PROC_SUPER_MAGIC; ++#else ++ return 0; ++#endif ++} ++ ++static inline int au_test_sysfs(struct super_block *sb __maybe_unused) ++{ ++#ifdef CONFIG_SYSFS ++ return sb->s_magic == SYSFS_MAGIC; ++#else ++ return 0; ++#endif ++} ++ ++static inline int au_test_configfs(struct super_block *sb __maybe_unused) ++{ ++#if defined(CONFIG_CONFIGFS_FS) || defined(CONFIG_CONFIGFS_FS_MODULE) ++ return sb->s_magic == CONFIGFS_MAGIC; ++#else ++ return 0; ++#endif ++} ++ ++static inline int au_test_minix(struct super_block *sb __maybe_unused) ++{ ++#if defined(CONFIG_MINIX_FS) || defined(CONFIG_MINIX_FS_MODULE) ++ return sb->s_magic == MINIX3_SUPER_MAGIC ++ || sb->s_magic == MINIX2_SUPER_MAGIC ++ || sb->s_magic == MINIX2_SUPER_MAGIC2 ++ || sb->s_magic == MINIX_SUPER_MAGIC ++ || sb->s_magic == MINIX_SUPER_MAGIC2; ++#else ++ return 0; ++#endif ++} ++ ++static inline int au_test_cifs(struct super_block *sb __maybe_unused) ++{ ++#if defined(CONFIG_CIFS_FS) || defined(CONFIGCIFS_FS_MODULE) ++ return sb->s_magic == CIFS_MAGIC_NUMBER; ++#else ++ return 0; ++#endif ++} ++ ++static inline int au_test_fat(struct super_block *sb __maybe_unused) ++{ ++#if defined(CONFIG_FAT_FS) || defined(CONFIG_FAT_FS_MODULE) ++ return sb->s_magic == MSDOS_SUPER_MAGIC; ++#else ++ return 0; ++#endif ++} ++ ++static inline int au_test_msdos(struct super_block *sb) ++{ ++ return au_test_fat(sb); ++} ++ ++static inline int au_test_vfat(struct super_block *sb) ++{ ++ return au_test_fat(sb); ++} ++ ++static inline int au_test_securityfs(struct super_block *sb __maybe_unused) ++{ ++#ifdef CONFIG_SECURITYFS ++ return sb->s_magic == SECURITYFS_MAGIC; ++#else ++ return 0; ++#endif ++} ++ ++static inline int au_test_squashfs(struct super_block *sb __maybe_unused) ++{ ++#if defined(CONFIG_SQUASHFS) || defined(CONFIG_SQUASHFS_MODULE) ++ return sb->s_magic == SQUASHFS_MAGIC; ++#else ++ return 0; ++#endif ++} ++ ++static inline int au_test_btrfs(struct super_block *sb __maybe_unused) ++{ ++#if defined(CONFIG_BTRFS_FS) || defined(CONFIG_BTRFS_FS_MODULE) ++ return sb->s_magic == BTRFS_SUPER_MAGIC; ++#else ++ return 0; ++#endif ++} ++ ++static inline int au_test_xenfs(struct super_block *sb __maybe_unused) ++{ ++#if defined(CONFIG_XENFS) || defined(CONFIG_XENFS_MODULE) ++ return sb->s_magic == XENFS_SUPER_MAGIC; ++#else ++ return 0; ++#endif ++} ++ ++static inline int au_test_debugfs(struct super_block *sb __maybe_unused) ++{ ++#ifdef CONFIG_DEBUG_FS ++ return sb->s_magic == DEBUGFS_MAGIC; ++#else ++ return 0; ++#endif ++} ++ ++static inline int au_test_nilfs(struct super_block *sb __maybe_unused) ++{ ++#if defined(CONFIG_NILFS) || defined(CONFIG_NILFS_MODULE) ++ return sb->s_magic == NILFS_SUPER_MAGIC; ++#else ++ return 0; ++#endif ++} ++ ++static inline int au_test_hfsplus(struct super_block *sb __maybe_unused) ++{ ++#if defined(CONFIG_HFSPLUS_FS) || defined(CONFIG_HFSPLUS_FS_MODULE) ++ return sb->s_magic == HFSPLUS_SUPER_MAGIC; ++#else ++ return 0; ++#endif ++} ++ ++/* ---------------------------------------------------------------------- */ ++/* ++ * they can't be an aufs branch. ++ */ ++static inline int au_test_fs_unsuppoted(struct super_block *sb) ++{ ++ return ++#ifndef CONFIG_AUFS_BR_RAMFS ++ au_test_ramfs(sb) || ++#endif ++ au_test_procfs(sb) ++ || au_test_sysfs(sb) ++ || au_test_configfs(sb) ++ || au_test_debugfs(sb) ++ || au_test_securityfs(sb) ++ || au_test_xenfs(sb) ++ || au_test_ecryptfs(sb) ++ /* || !strcmp(au_sbtype(sb), "unionfs") */ ++ || au_test_aufs(sb); /* will be supported in next version */ ++} ++ ++/* ++ * If the filesystem supports NFS-export, then it has to support NULL as ++ * a nameidata parameter for ->create(), ->lookup() and ->d_revalidate(). ++ * We can apply this principle when we handle a lower filesystem. ++ */ ++static inline int au_test_fs_null_nd(struct super_block *sb) ++{ ++ return !!sb->s_export_op; ++} ++ ++static inline int au_test_fs_remote(struct super_block *sb) ++{ ++ return !au_test_tmpfs(sb) ++#ifdef CONFIG_AUFS_BR_RAMFS ++ && !au_test_ramfs(sb) ++#endif ++ && !(sb->s_type->fs_flags & FS_REQUIRES_DEV); ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* ++ * Note: these functions (below) are created after reading ->getattr() in all ++ * filesystems under linux/fs. it means we have to do so in every update... ++ */ ++ ++/* ++ * some filesystems require getattr to refresh the inode attributes before ++ * referencing. ++ * in most cases, we can rely on the inode attribute in NFS (or every remote fs) ++ * and leave the work for d_revalidate() ++ */ ++static inline int au_test_fs_refresh_iattr(struct super_block *sb) ++{ ++ return au_test_nfs(sb) ++ || au_test_fuse(sb) ++ /* || au_test_smbfs(sb) */ /* untested */ ++ /* || au_test_ocfs2(sb) */ /* untested */ ++ /* || au_test_btrfs(sb) */ /* untested */ ++ /* || au_test_coda(sb) */ /* untested */ ++ /* || au_test_v9fs(sb) */ /* untested */ ++ ; ++} ++ ++/* ++ * filesystems which don't maintain i_size or i_blocks. ++ */ ++static inline int au_test_fs_bad_iattr_size(struct super_block *sb) ++{ ++ return au_test_xfs(sb) ++ || au_test_btrfs(sb) ++ || au_test_ubifs(sb) ++ || au_test_hfsplus(sb) /* maintained, but incorrect */ ++ /* || au_test_ext4(sb) */ /* untested */ ++ /* || au_test_ocfs2(sb) */ /* untested */ ++ /* || au_test_ocfs2_dlmfs(sb) */ /* untested */ ++ /* || au_test_sysv(sb) */ /* untested */ ++ /* || au_test_minix(sb) */ /* untested */ ++ ; ++} ++ ++/* ++ * filesystems which don't store the correct value in some of their inode ++ * attributes. ++ */ ++static inline int au_test_fs_bad_iattr(struct super_block *sb) ++{ ++ return au_test_fs_bad_iattr_size(sb) ++ /* || au_test_cifs(sb) */ /* untested */ ++ || au_test_fat(sb) ++ || au_test_msdos(sb) ++ || au_test_vfat(sb); ++} ++ ++/* they don't check i_nlink in link(2) */ ++static inline int au_test_fs_no_limit_nlink(struct super_block *sb) ++{ ++ return au_test_tmpfs(sb) ++#ifdef CONFIG_AUFS_BR_RAMFS ++ || au_test_ramfs(sb) ++#endif ++ || au_test_ubifs(sb) ++ || au_test_btrfs(sb) ++ || au_test_hfsplus(sb); ++} ++ ++/* ++ * filesystems which sets S_NOATIME and S_NOCMTIME. ++ */ ++static inline int au_test_fs_notime(struct super_block *sb) ++{ ++ return au_test_nfs(sb) ++ || au_test_fuse(sb) ++ || au_test_ubifs(sb) ++ /* || au_test_cifs(sb) */ /* untested */ ++ ; ++} ++ ++/* ++ * filesystems which requires replacing i_mapping. ++ */ ++static inline int au_test_fs_bad_mapping(struct super_block *sb) ++{ ++ return au_test_fuse(sb) ++ || au_test_ubifs(sb); ++} ++ ++/* temporary support for i#1 in cramfs */ ++static inline int au_test_fs_unique_ino(struct inode *inode) ++{ ++ if (au_test_cramfs(inode->i_sb)) ++ return inode->i_ino != 1; ++ return 1; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* ++ * the filesystem where the xino files placed must support i/o after unlink and ++ * maintain i_size and i_blocks. ++ */ ++static inline int au_test_fs_bad_xino(struct super_block *sb) ++{ ++ return au_test_fs_remote(sb) ++ || au_test_fs_bad_iattr_size(sb) ++#ifdef CONFIG_AUFS_BR_RAMFS ++ || !(au_test_ramfs(sb) || au_test_fs_null_nd(sb)) ++#else ++ || !au_test_fs_null_nd(sb) /* to keep xino code simple */ ++#endif ++ /* don't want unnecessary work for xino */ ++ || au_test_aufs(sb) ++ || au_test_ecryptfs(sb) ++ || au_test_nilfs(sb); ++} ++ ++static inline int au_test_fs_trunc_xino(struct super_block *sb) ++{ ++ return au_test_tmpfs(sb) ++ || au_test_ramfs(sb); ++} ++ ++/* ++ * test if the @sb is real-readonly. ++ */ ++static inline int au_test_fs_rr(struct super_block *sb) ++{ ++ return au_test_squashfs(sb) ++ || au_test_iso9660(sb) ++ || au_test_cramfs(sb) ++ || au_test_romfs(sb); ++} ++ ++#endif /* __KERNEL__ */ ++#endif /* __AUFS_FSTYPE_H__ */ +diff -urN a/fs/aufs/hfsnotify.c b/fs/aufs/hfsnotify.c +--- a/fs/aufs/hfsnotify.c 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/hfsnotify.c 2011-03-06 23:28:02.616413258 +0000 +@@ -0,0 +1,247 @@ ++/* ++ * Copyright (C) 2005-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * fsnotify for the lower directories ++ */ ++ ++#include "aufs.h" ++ ++/* FS_IN_IGNORED is unnecessary */ ++static const __u32 AuHfsnMask = (FS_MOVED_TO | FS_MOVED_FROM | FS_DELETE ++ | FS_CREATE | FS_EVENT_ON_CHILD); ++static DECLARE_WAIT_QUEUE_HEAD(au_hfsn_wq); ++ ++static void au_hfsn_free_mark(struct fsnotify_mark *mark) ++{ ++ struct au_hnotify *hn = container_of(mark, struct au_hnotify, ++ hn_mark); ++ AuDbg("here\n"); ++ hn->hn_mark_dead = 1; ++ smp_mb(); ++ wake_up_all(&au_hfsn_wq); ++} ++ ++static int au_hfsn_alloc(struct au_hinode *hinode) ++{ ++ struct au_hnotify *hn; ++ struct super_block *sb; ++ struct au_branch *br; ++ struct fsnotify_mark *mark; ++ aufs_bindex_t bindex; ++ ++ hn = hinode->hi_notify; ++ sb = hn->hn_aufs_inode->i_sb; ++ bindex = au_br_index(sb, hinode->hi_id); ++ br = au_sbr(sb, bindex); ++ hn->hn_mark_dead = 0; ++ mark = &hn->hn_mark; ++ fsnotify_init_mark(mark, au_hfsn_free_mark); ++ mark->mask = AuHfsnMask; ++ /* ++ * by udba rename or rmdir, aufs assign a new inode to the known ++ * h_inode, so specify 1 to allow dups. ++ */ ++ return fsnotify_add_mark(mark, br->br_hfsn_group, hinode->hi_inode, ++ /*mnt*/NULL, /*allow_dups*/1); ++} ++ ++static void au_hfsn_free(struct au_hinode *hinode) ++{ ++ struct au_hnotify *hn; ++ struct fsnotify_mark *mark; ++ ++ hn = hinode->hi_notify; ++ mark = &hn->hn_mark; ++ fsnotify_destroy_mark(mark); ++ fsnotify_put_mark(mark); ++ ++ /* TODO: bad approach */ ++ wait_event(au_hfsn_wq, hn->hn_mark_dead); ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++static void au_hfsn_ctl(struct au_hinode *hinode, int do_set) ++{ ++ struct fsnotify_mark *mark; ++ ++ mark = &hinode->hi_notify->hn_mark; ++ spin_lock(&mark->lock); ++ if (do_set) { ++ AuDebugOn(mark->mask & AuHfsnMask); ++ mark->mask |= AuHfsnMask; ++ } else { ++ AuDebugOn(!(mark->mask & AuHfsnMask)); ++ mark->mask &= ~AuHfsnMask; ++ } ++ spin_unlock(&mark->lock); ++ /* fsnotify_recalc_inode_mask(hinode->hi_inode); */ ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* #define AuDbgHnotify */ ++#ifdef AuDbgHnotify ++static char *au_hfsn_name(u32 mask) ++{ ++#ifdef CONFIG_AUFS_DEBUG ++#define test_ret(flag) if (mask & flag) \ ++ return #flag; ++ test_ret(FS_ACCESS); ++ test_ret(FS_MODIFY); ++ test_ret(FS_ATTRIB); ++ test_ret(FS_CLOSE_WRITE); ++ test_ret(FS_CLOSE_NOWRITE); ++ test_ret(FS_OPEN); ++ test_ret(FS_MOVED_FROM); ++ test_ret(FS_MOVED_TO); ++ test_ret(FS_CREATE); ++ test_ret(FS_DELETE); ++ test_ret(FS_DELETE_SELF); ++ test_ret(FS_MOVE_SELF); ++ test_ret(FS_UNMOUNT); ++ test_ret(FS_Q_OVERFLOW); ++ test_ret(FS_IN_IGNORED); ++ test_ret(FS_IN_ISDIR); ++ test_ret(FS_IN_ONESHOT); ++ test_ret(FS_EVENT_ON_CHILD); ++ return ""; ++#undef test_ret ++#else ++ return "??"; ++#endif ++} ++#endif ++ ++/* ---------------------------------------------------------------------- */ ++ ++static int au_hfsn_handle_event(struct fsnotify_group *group, ++ struct fsnotify_mark *inode_mark, ++ struct fsnotify_mark *vfsmount_mark, ++ struct fsnotify_event *event) ++{ ++ int err; ++ struct au_hnotify *hnotify; ++ struct inode *h_dir, *h_inode; ++ __u32 mask; ++ struct qstr h_child_qstr = { ++ .name = event->file_name, ++ .len = event->name_len ++ }; ++ ++ AuDebugOn(event->data_type != FSNOTIFY_EVENT_INODE); ++ ++ err = 0; ++ /* if FS_UNMOUNT happens, there must be another bug */ ++ mask = event->mask; ++ AuDebugOn(mask & FS_UNMOUNT); ++ if (mask & (FS_IN_IGNORED | FS_UNMOUNT)) ++ goto out; ++ ++ h_dir = event->to_tell; ++ h_inode = event->inode; ++#ifdef AuDbgHnotify ++ au_debug(1); ++ if (1 || h_child_qstr.len != sizeof(AUFS_XINO_FNAME) - 1 ++ || strncmp(h_child_qstr.name, AUFS_XINO_FNAME, h_child_qstr.len)) { ++ AuDbg("i%lu, mask 0x%x %s, hcname %.*s, hi%lu\n", ++ h_dir->i_ino, mask, au_hfsn_name(mask), ++ AuLNPair(&h_child_qstr), h_inode ? h_inode->i_ino : 0); ++ /* WARN_ON(1); */ ++ } ++ au_debug(0); ++#endif ++ ++ AuDebugOn(!inode_mark); ++ hnotify = container_of(inode_mark, struct au_hnotify, hn_mark); ++ err = au_hnotify(h_dir, hnotify, mask, &h_child_qstr, h_inode); ++ ++out: ++ return err; ++} ++ ++/* isn't it waste to ask every registered 'group'? */ ++/* copied from linux/fs/notify/inotify/inotify_fsnotiry.c */ ++/* it should be exported to modules */ ++static bool au_hfsn_should_send_event(struct fsnotify_group *group, ++ struct inode *h_inode, ++ struct fsnotify_mark *inode_mark, ++ struct fsnotify_mark *vfsmount_mark, ++ __u32 mask, void *data, int data_type) ++{ ++ mask = (mask & ~FS_EVENT_ON_CHILD); ++ return inode_mark->mask & mask; ++} ++ ++static struct fsnotify_ops au_hfsn_ops = { ++ .should_send_event = au_hfsn_should_send_event, ++ .handle_event = au_hfsn_handle_event ++}; ++ ++/* ---------------------------------------------------------------------- */ ++ ++static void au_hfsn_fin_br(struct au_branch *br) ++{ ++ if (br->br_hfsn_group) ++ fsnotify_put_group(br->br_hfsn_group); ++} ++ ++static int au_hfsn_init_br(struct au_branch *br, int perm) ++{ ++ br->br_hfsn_group = NULL; ++ br->br_hfsn_ops = au_hfsn_ops; ++ return 0; ++} ++ ++static int au_hfsn_reset_br(unsigned int udba, struct au_branch *br, int perm) ++{ ++ int err; ++ ++ err = 0; ++ if (udba != AuOpt_UDBA_HNOTIFY ++ || !au_br_hnotifyable(perm)) { ++ au_hfsn_fin_br(br); ++ br->br_hfsn_group = NULL; ++ goto out; ++ } ++ ++ if (br->br_hfsn_group) ++ goto out; ++ ++ br->br_hfsn_group = fsnotify_alloc_group(&br->br_hfsn_ops); ++ if (IS_ERR(br->br_hfsn_group)) { ++ err = PTR_ERR(br->br_hfsn_group); ++ pr_err("fsnotify_alloc_group() failed, %d\n", err); ++ br->br_hfsn_group = NULL; ++ } ++ ++out: ++ AuTraceErr(err); ++ return err; ++} ++ ++const struct au_hnotify_op au_hnotify_op = { ++ .ctl = au_hfsn_ctl, ++ .alloc = au_hfsn_alloc, ++ .free = au_hfsn_free, ++ ++ .reset_br = au_hfsn_reset_br, ++ .fin_br = au_hfsn_fin_br, ++ .init_br = au_hfsn_init_br ++}; +diff -urN a/fs/aufs/hfsplus.c b/fs/aufs/hfsplus.c +--- a/fs/aufs/hfsplus.c 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/hfsplus.c 2011-03-06 23:28:02.616413258 +0000 +@@ -0,0 +1,58 @@ ++/* ++ * Copyright (C) 2010-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * special support for filesystems which aqucires an inode mutex ++ * at final closing a file, eg, hfsplus. ++ * ++ * This trick is very simple and stupid, just to open the file before really ++ * neceeary open to tell hfsplus that this is not the final closing. ++ * The caller should call au_h_open_pre() after acquiring the inode mutex, ++ * and au_h_open_post() after releasing it. ++ */ ++ ++#include ++#include "aufs.h" ++ ++struct file *au_h_open_pre(struct dentry *dentry, aufs_bindex_t bindex) ++{ ++ struct file *h_file; ++ struct dentry *h_dentry; ++ ++ h_dentry = au_h_dptr(dentry, bindex); ++ AuDebugOn(!h_dentry); ++ AuDebugOn(!h_dentry->d_inode); ++ IMustLock(h_dentry->d_inode); ++ ++ h_file = NULL; ++ if (au_test_hfsplus(h_dentry->d_sb) ++ && S_ISREG(h_dentry->d_inode->i_mode)) ++ h_file = au_h_open(dentry, bindex, ++ O_RDONLY | O_NOATIME | O_LARGEFILE, ++ /*file*/NULL); ++ return h_file; ++} ++ ++void au_h_open_post(struct dentry *dentry, aufs_bindex_t bindex, ++ struct file *h_file) ++{ ++ if (h_file) { ++ fput(h_file); ++ au_sbr_put(dentry->d_sb, bindex); ++ } ++} +diff -urN a/fs/aufs/hnotify.c b/fs/aufs/hnotify.c +--- a/fs/aufs/hnotify.c 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/hnotify.c 2011-03-06 23:28:02.620413138 +0000 +@@ -0,0 +1,709 @@ ++/* ++ * Copyright (C) 2005-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * abstraction to notify the direct changes on lower directories ++ */ ++ ++#include "aufs.h" ++ ++int au_hn_alloc(struct au_hinode *hinode, struct inode *inode) ++{ ++ int err; ++ struct au_hnotify *hn; ++ ++ err = -ENOMEM; ++ hn = au_cache_alloc_hnotify(); ++ if (hn) { ++ hn->hn_aufs_inode = inode; ++ hinode->hi_notify = hn; ++ err = au_hnotify_op.alloc(hinode); ++ AuTraceErr(err); ++ if (unlikely(err)) { ++ hinode->hi_notify = NULL; ++ au_cache_free_hnotify(hn); ++ /* ++ * The upper dir was removed by udba, but the same named ++ * dir left. In this case, aufs assignes a new inode ++ * number and set the monitor again. ++ * For the lower dir, the old monitnor is still left. ++ */ ++ if (err == -EEXIST) ++ err = 0; ++ } ++ } ++ ++ AuTraceErr(err); ++ return err; ++} ++ ++void au_hn_free(struct au_hinode *hinode) ++{ ++ struct au_hnotify *hn; ++ ++ hn = hinode->hi_notify; ++ if (hn) { ++ au_hnotify_op.free(hinode); ++ au_cache_free_hnotify(hn); ++ hinode->hi_notify = NULL; ++ } ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++void au_hn_ctl(struct au_hinode *hinode, int do_set) ++{ ++ if (hinode->hi_notify) ++ au_hnotify_op.ctl(hinode, do_set); ++} ++ ++void au_hn_reset(struct inode *inode, unsigned int flags) ++{ ++ aufs_bindex_t bindex, bend; ++ struct inode *hi; ++ struct dentry *iwhdentry; ++ ++ bend = au_ibend(inode); ++ for (bindex = au_ibstart(inode); bindex <= bend; bindex++) { ++ hi = au_h_iptr(inode, bindex); ++ if (!hi) ++ continue; ++ ++ /* mutex_lock_nested(&hi->i_mutex, AuLsc_I_CHILD); */ ++ iwhdentry = au_hi_wh(inode, bindex); ++ if (iwhdentry) ++ dget(iwhdentry); ++ au_igrab(hi); ++ au_set_h_iptr(inode, bindex, NULL, 0); ++ au_set_h_iptr(inode, bindex, au_igrab(hi), ++ flags & ~AuHi_XINO); ++ iput(hi); ++ dput(iwhdentry); ++ /* mutex_unlock(&hi->i_mutex); */ ++ } ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++static int hn_xino(struct inode *inode, struct inode *h_inode) ++{ ++ int err; ++ aufs_bindex_t bindex, bend, bfound, bstart; ++ struct inode *h_i; ++ ++ err = 0; ++ if (unlikely(inode->i_ino == AUFS_ROOT_INO)) { ++ pr_warning("branch root dir was changed\n"); ++ goto out; ++ } ++ ++ bfound = -1; ++ bend = au_ibend(inode); ++ bstart = au_ibstart(inode); ++#if 0 /* reserved for future use */ ++ if (bindex == bend) { ++ /* keep this ino in rename case */ ++ goto out; ++ } ++#endif ++ for (bindex = bstart; bindex <= bend; bindex++) ++ if (au_h_iptr(inode, bindex) == h_inode) { ++ bfound = bindex; ++ break; ++ } ++ if (bfound < 0) ++ goto out; ++ ++ for (bindex = bstart; bindex <= bend; bindex++) { ++ h_i = au_h_iptr(inode, bindex); ++ if (!h_i) ++ continue; ++ ++ err = au_xino_write(inode->i_sb, bindex, h_i->i_ino, /*ino*/0); ++ /* ignore this error */ ++ /* bad action? */ ++ } ++ ++ /* children inode number will be broken */ ++ ++out: ++ AuTraceErr(err); ++ return err; ++} ++ ++static int hn_gen_tree(struct dentry *dentry) ++{ ++ int err, i, j, ndentry; ++ struct au_dcsub_pages dpages; ++ struct au_dpage *dpage; ++ struct dentry **dentries; ++ ++ err = au_dpages_init(&dpages, GFP_NOFS); ++ if (unlikely(err)) ++ goto out; ++ err = au_dcsub_pages(&dpages, dentry, NULL, NULL); ++ if (unlikely(err)) ++ goto out_dpages; ++ ++ for (i = 0; i < dpages.ndpage; i++) { ++ dpage = dpages.dpages + i; ++ dentries = dpage->dentries; ++ ndentry = dpage->ndentry; ++ for (j = 0; j < ndentry; j++) { ++ struct dentry *d; ++ ++ d = dentries[j]; ++ if (IS_ROOT(d)) ++ continue; ++ ++ au_digen_dec(d); ++ if (d->d_inode) ++ /* todo: reset children xino? ++ cached children only? */ ++ au_iigen_dec(d->d_inode); ++ } ++ } ++ ++out_dpages: ++ au_dpages_free(&dpages); ++ ++#if 0 ++ /* discard children */ ++ dentry_unhash(dentry); ++ dput(dentry); ++#endif ++out: ++ return err; ++} ++ ++/* ++ * return 0 if processed. ++ */ ++static int hn_gen_by_inode(char *name, unsigned int nlen, struct inode *inode, ++ const unsigned int isdir) ++{ ++ int err; ++ struct dentry *d; ++ struct qstr *dname; ++ ++ err = 1; ++ if (unlikely(inode->i_ino == AUFS_ROOT_INO)) { ++ pr_warning("branch root dir was changed\n"); ++ err = 0; ++ goto out; ++ } ++ ++ if (!isdir) { ++ AuDebugOn(!name); ++ au_iigen_dec(inode); ++ spin_lock(&inode->i_lock); ++ list_for_each_entry(d, &inode->i_dentry, d_alias) { ++ spin_lock(&d->d_lock); ++ dname = &d->d_name; ++ if (dname->len != nlen ++ && memcmp(dname->name, name, nlen)) { ++ spin_unlock(&d->d_lock); ++ continue; ++ } ++ err = 0; ++ au_digen_dec(d); ++ spin_unlock(&d->d_lock); ++ break; ++ } ++ spin_unlock(&inode->i_lock); ++ } else { ++ au_fset_si(au_sbi(inode->i_sb), FAILED_REFRESH_DIR); ++ d = d_find_alias(inode); ++ if (!d) { ++ au_iigen_dec(inode); ++ goto out; ++ } ++ ++ spin_lock(&d->d_lock); ++ dname = &d->d_name; ++ if (dname->len == nlen && !memcmp(dname->name, name, nlen)) { ++ spin_unlock(&d->d_lock); ++ err = hn_gen_tree(d); ++ spin_lock(&d->d_lock); ++ } ++ spin_unlock(&d->d_lock); ++ dput(d); ++ } ++ ++out: ++ AuTraceErr(err); ++ return err; ++} ++ ++static int hn_gen_by_name(struct dentry *dentry, const unsigned int isdir) ++{ ++ int err; ++ struct inode *inode; ++ ++ inode = dentry->d_inode; ++ if (IS_ROOT(dentry) ++ /* || (inode && inode->i_ino == AUFS_ROOT_INO) */ ++ ) { ++ pr_warning("branch root dir was changed\n"); ++ return 0; ++ } ++ ++ err = 0; ++ if (!isdir) { ++ au_digen_dec(dentry); ++ if (inode) ++ au_iigen_dec(inode); ++ } else { ++ au_fset_si(au_sbi(dentry->d_sb), FAILED_REFRESH_DIR); ++ if (inode) ++ err = hn_gen_tree(dentry); ++ } ++ ++ AuTraceErr(err); ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* hnotify job flags */ ++#define AuHnJob_XINO0 1 ++#define AuHnJob_GEN (1 << 1) ++#define AuHnJob_DIRENT (1 << 2) ++#define AuHnJob_ISDIR (1 << 3) ++#define AuHnJob_TRYXINO0 (1 << 4) ++#define AuHnJob_MNTPNT (1 << 5) ++#define au_ftest_hnjob(flags, name) ((flags) & AuHnJob_##name) ++#define au_fset_hnjob(flags, name) \ ++ do { (flags) |= AuHnJob_##name; } while (0) ++#define au_fclr_hnjob(flags, name) \ ++ do { (flags) &= ~AuHnJob_##name; } while (0) ++ ++enum { ++ AuHn_CHILD, ++ AuHn_PARENT, ++ AuHnLast ++}; ++ ++struct au_hnotify_args { ++ struct inode *h_dir, *dir, *h_child_inode; ++ u32 mask; ++ unsigned int flags[AuHnLast]; ++ unsigned int h_child_nlen; ++ char h_child_name[]; ++}; ++ ++struct hn_job_args { ++ unsigned int flags; ++ struct inode *inode, *h_inode, *dir, *h_dir; ++ struct dentry *dentry; ++ char *h_name; ++ int h_nlen; ++}; ++ ++static int hn_job(struct hn_job_args *a) ++{ ++ const unsigned int isdir = au_ftest_hnjob(a->flags, ISDIR); ++ ++ /* reset xino */ ++ if (au_ftest_hnjob(a->flags, XINO0) && a->inode) ++ hn_xino(a->inode, a->h_inode); /* ignore this error */ ++ ++ if (au_ftest_hnjob(a->flags, TRYXINO0) ++ && a->inode ++ && a->h_inode) { ++ mutex_lock_nested(&a->h_inode->i_mutex, AuLsc_I_CHILD); ++ if (!a->h_inode->i_nlink) ++ hn_xino(a->inode, a->h_inode); /* ignore this error */ ++ mutex_unlock(&a->h_inode->i_mutex); ++ } ++ ++ /* make the generation obsolete */ ++ if (au_ftest_hnjob(a->flags, GEN)) { ++ int err = -1; ++ if (a->inode) ++ err = hn_gen_by_inode(a->h_name, a->h_nlen, a->inode, ++ isdir); ++ if (err && a->dentry) ++ hn_gen_by_name(a->dentry, isdir); ++ /* ignore this error */ ++ } ++ ++ /* make dir entries obsolete */ ++ if (au_ftest_hnjob(a->flags, DIRENT) && a->inode) { ++ struct au_vdir *vdir; ++ ++ vdir = au_ivdir(a->inode); ++ if (vdir) ++ vdir->vd_jiffy = 0; ++ /* IMustLock(a->inode); */ ++ /* a->inode->i_version++; */ ++ } ++ ++ /* can do nothing but warn */ ++ if (au_ftest_hnjob(a->flags, MNTPNT) ++ && a->dentry ++ && d_mountpoint(a->dentry)) ++ pr_warning("mount-point %.*s is removed or renamed\n", ++ AuDLNPair(a->dentry)); ++ ++ return 0; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++static struct dentry *lookup_wlock_by_name(char *name, unsigned int nlen, ++ struct inode *dir) ++{ ++ struct dentry *dentry, *d, *parent; ++ struct qstr *dname; ++ ++ parent = d_find_alias(dir); ++ if (!parent) ++ return NULL; ++ ++ dentry = NULL; ++ spin_lock(&parent->d_lock); ++ list_for_each_entry(d, &parent->d_subdirs, d_u.d_child) { ++ /* AuDbg("%.*s\n", AuDLNPair(d)); */ ++ spin_lock_nested(&d->d_lock, DENTRY_D_LOCK_NESTED); ++ dname = &d->d_name; ++ if (dname->len != nlen || memcmp(dname->name, name, nlen)) ++ goto cont_unlock; ++ if (au_di(d)) ++ au_digen_dec(d); ++ else ++ goto cont_unlock; ++ if (d->d_count) { ++ dentry = dget_dlock(d); ++ spin_unlock(&d->d_lock); ++ break; ++ } ++ ++ cont_unlock: ++ spin_unlock(&d->d_lock); ++ } ++ spin_unlock(&parent->d_lock); ++ dput(parent); ++ ++ if (dentry) ++ di_write_lock_child(dentry); ++ ++ return dentry; ++} ++ ++static struct inode *lookup_wlock_by_ino(struct super_block *sb, ++ aufs_bindex_t bindex, ino_t h_ino) ++{ ++ struct inode *inode; ++ ino_t ino; ++ int err; ++ ++ inode = NULL; ++ err = au_xino_read(sb, bindex, h_ino, &ino); ++ if (!err && ino) ++ inode = ilookup(sb, ino); ++ if (!inode) ++ goto out; ++ ++ if (unlikely(inode->i_ino == AUFS_ROOT_INO)) { ++ pr_warning("wrong root branch\n"); ++ iput(inode); ++ inode = NULL; ++ goto out; ++ } ++ ++ ii_write_lock_child(inode); ++ ++out: ++ return inode; ++} ++ ++static void au_hn_bh(void *_args) ++{ ++ struct au_hnotify_args *a = _args; ++ struct super_block *sb; ++ aufs_bindex_t bindex, bend, bfound; ++ unsigned char xino, try_iput; ++ int err; ++ struct inode *inode; ++ ino_t h_ino; ++ struct hn_job_args args; ++ struct dentry *dentry; ++ struct au_sbinfo *sbinfo; ++ ++ AuDebugOn(!_args); ++ AuDebugOn(!a->h_dir); ++ AuDebugOn(!a->dir); ++ AuDebugOn(!a->mask); ++ AuDbg("mask 0x%x, i%lu, hi%lu, hci%lu\n", ++ a->mask, a->dir->i_ino, a->h_dir->i_ino, ++ a->h_child_inode ? a->h_child_inode->i_ino : 0); ++ ++ inode = NULL; ++ dentry = NULL; ++ /* ++ * do not lock a->dir->i_mutex here ++ * because of d_revalidate() may cause a deadlock. ++ */ ++ sb = a->dir->i_sb; ++ AuDebugOn(!sb); ++ sbinfo = au_sbi(sb); ++ AuDebugOn(!sbinfo); ++ si_write_lock(sb, AuLock_NOPLMW); ++ ++ ii_read_lock_parent(a->dir); ++ bfound = -1; ++ bend = au_ibend(a->dir); ++ for (bindex = au_ibstart(a->dir); bindex <= bend; bindex++) ++ if (au_h_iptr(a->dir, bindex) == a->h_dir) { ++ bfound = bindex; ++ break; ++ } ++ ii_read_unlock(a->dir); ++ if (unlikely(bfound < 0)) ++ goto out; ++ ++ xino = !!au_opt_test(au_mntflags(sb), XINO); ++ h_ino = 0; ++ if (a->h_child_inode) ++ h_ino = a->h_child_inode->i_ino; ++ ++ if (a->h_child_nlen ++ && (au_ftest_hnjob(a->flags[AuHn_CHILD], GEN) ++ || au_ftest_hnjob(a->flags[AuHn_CHILD], MNTPNT))) ++ dentry = lookup_wlock_by_name(a->h_child_name, a->h_child_nlen, ++ a->dir); ++ try_iput = 0; ++ if (dentry) ++ inode = dentry->d_inode; ++ if (xino && !inode && h_ino ++ && (au_ftest_hnjob(a->flags[AuHn_CHILD], XINO0) ++ || au_ftest_hnjob(a->flags[AuHn_CHILD], TRYXINO0) ++ || au_ftest_hnjob(a->flags[AuHn_CHILD], GEN))) { ++ inode = lookup_wlock_by_ino(sb, bfound, h_ino); ++ try_iput = 1; ++ } ++ ++ args.flags = a->flags[AuHn_CHILD]; ++ args.dentry = dentry; ++ args.inode = inode; ++ args.h_inode = a->h_child_inode; ++ args.dir = a->dir; ++ args.h_dir = a->h_dir; ++ args.h_name = a->h_child_name; ++ args.h_nlen = a->h_child_nlen; ++ err = hn_job(&args); ++ if (dentry) { ++ if (au_di(dentry)) ++ di_write_unlock(dentry); ++ dput(dentry); ++ } ++ if (inode && try_iput) { ++ ii_write_unlock(inode); ++ iput(inode); ++ } ++ ++ ii_write_lock_parent(a->dir); ++ args.flags = a->flags[AuHn_PARENT]; ++ args.dentry = NULL; ++ args.inode = a->dir; ++ args.h_inode = a->h_dir; ++ args.dir = NULL; ++ args.h_dir = NULL; ++ args.h_name = NULL; ++ args.h_nlen = 0; ++ err = hn_job(&args); ++ ii_write_unlock(a->dir); ++ ++out: ++ iput(a->h_child_inode); ++ iput(a->h_dir); ++ iput(a->dir); ++ si_write_unlock(sb); ++ au_nwt_done(&sbinfo->si_nowait); ++ kfree(a); ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++int au_hnotify(struct inode *h_dir, struct au_hnotify *hnotify, u32 mask, ++ struct qstr *h_child_qstr, struct inode *h_child_inode) ++{ ++ int err, len; ++ unsigned int flags[AuHnLast]; ++ unsigned char isdir, isroot, wh; ++ struct inode *dir; ++ struct au_hnotify_args *args; ++ char *p, *h_child_name; ++ ++ err = 0; ++ AuDebugOn(!hnotify || !hnotify->hn_aufs_inode); ++ dir = igrab(hnotify->hn_aufs_inode); ++ if (!dir) ++ goto out; ++ ++ isroot = (dir->i_ino == AUFS_ROOT_INO); ++ wh = 0; ++ h_child_name = (void *)h_child_qstr->name; ++ len = h_child_qstr->len; ++ if (h_child_name) { ++ if (len > AUFS_WH_PFX_LEN ++ && !memcmp(h_child_name, AUFS_WH_PFX, AUFS_WH_PFX_LEN)) { ++ h_child_name += AUFS_WH_PFX_LEN; ++ len -= AUFS_WH_PFX_LEN; ++ wh = 1; ++ } ++ } ++ ++ isdir = 0; ++ if (h_child_inode) ++ isdir = !!S_ISDIR(h_child_inode->i_mode); ++ flags[AuHn_PARENT] = AuHnJob_ISDIR; ++ flags[AuHn_CHILD] = 0; ++ if (isdir) ++ flags[AuHn_CHILD] = AuHnJob_ISDIR; ++ au_fset_hnjob(flags[AuHn_PARENT], DIRENT); ++ au_fset_hnjob(flags[AuHn_CHILD], GEN); ++ switch (mask & FS_EVENTS_POSS_ON_CHILD) { ++ case FS_MOVED_FROM: ++ case FS_MOVED_TO: ++ au_fset_hnjob(flags[AuHn_CHILD], XINO0); ++ au_fset_hnjob(flags[AuHn_CHILD], MNTPNT); ++ /*FALLTHROUGH*/ ++ case FS_CREATE: ++ AuDebugOn(!h_child_name || !h_child_inode); ++ break; ++ ++ case FS_DELETE: ++ /* ++ * aufs never be able to get this child inode. ++ * revalidation should be in d_revalidate() ++ * by checking i_nlink, i_generation or d_unhashed(). ++ */ ++ AuDebugOn(!h_child_name); ++ au_fset_hnjob(flags[AuHn_CHILD], TRYXINO0); ++ au_fset_hnjob(flags[AuHn_CHILD], MNTPNT); ++ break; ++ ++ default: ++ AuDebugOn(1); ++ } ++ ++ if (wh) ++ h_child_inode = NULL; ++ ++ err = -ENOMEM; ++ /* iput() and kfree() will be called in au_hnotify() */ ++ args = kmalloc(sizeof(*args) + len + 1, GFP_NOFS); ++ if (unlikely(!args)) { ++ AuErr1("no memory\n"); ++ iput(dir); ++ goto out; ++ } ++ args->flags[AuHn_PARENT] = flags[AuHn_PARENT]; ++ args->flags[AuHn_CHILD] = flags[AuHn_CHILD]; ++ args->mask = mask; ++ args->dir = dir; ++ args->h_dir = igrab(h_dir); ++ if (h_child_inode) ++ h_child_inode = igrab(h_child_inode); /* can be NULL */ ++ args->h_child_inode = h_child_inode; ++ args->h_child_nlen = len; ++ if (len) { ++ p = (void *)args; ++ p += sizeof(*args); ++ memcpy(p, h_child_name, len); ++ p[len] = 0; ++ } ++ ++ err = au_wkq_nowait(au_hn_bh, args, dir->i_sb); ++ if (unlikely(err)) { ++ pr_err("wkq %d\n", err); ++ iput(args->h_child_inode); ++ iput(args->h_dir); ++ iput(args->dir); ++ kfree(args); ++ } ++ ++out: ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++int au_hnotify_reset_br(unsigned int udba, struct au_branch *br, int perm) ++{ ++ int err; ++ ++ AuDebugOn(!(udba & AuOptMask_UDBA)); ++ ++ err = 0; ++ if (au_hnotify_op.reset_br) ++ err = au_hnotify_op.reset_br(udba, br, perm); ++ ++ return err; ++} ++ ++int au_hnotify_init_br(struct au_branch *br, int perm) ++{ ++ int err; ++ ++ err = 0; ++ if (au_hnotify_op.init_br) ++ err = au_hnotify_op.init_br(br, perm); ++ ++ return err; ++} ++ ++void au_hnotify_fin_br(struct au_branch *br) ++{ ++ if (au_hnotify_op.fin_br) ++ au_hnotify_op.fin_br(br); ++} ++ ++static void au_hn_destroy_cache(void) ++{ ++ kmem_cache_destroy(au_cachep[AuCache_HNOTIFY]); ++ au_cachep[AuCache_HNOTIFY] = NULL; ++} ++ ++int __init au_hnotify_init(void) ++{ ++ int err; ++ ++ err = -ENOMEM; ++ au_cachep[AuCache_HNOTIFY] = AuCache(au_hnotify); ++ if (au_cachep[AuCache_HNOTIFY]) { ++ err = 0; ++ if (au_hnotify_op.init) ++ err = au_hnotify_op.init(); ++ if (unlikely(err)) ++ au_hn_destroy_cache(); ++ } ++ AuTraceErr(err); ++ return err; ++} ++ ++void au_hnotify_fin(void) ++{ ++ if (au_hnotify_op.fin) ++ au_hnotify_op.fin(); ++ /* cf. au_cache_fin() */ ++ if (au_cachep[AuCache_HNOTIFY]) ++ au_hn_destroy_cache(); ++} +diff -urN a/fs/aufs/iinfo.c b/fs/aufs/iinfo.c +--- a/fs/aufs/iinfo.c 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/iinfo.c 2011-03-06 23:28:02.616413258 +0000 +@@ -0,0 +1,264 @@ ++/* ++ * Copyright (C) 2005-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * inode private data ++ */ ++ ++#include "aufs.h" ++ ++struct inode *au_h_iptr(struct inode *inode, aufs_bindex_t bindex) ++{ ++ struct inode *h_inode; ++ ++ IiMustAnyLock(inode); ++ ++ h_inode = au_ii(inode)->ii_hinode[0 + bindex].hi_inode; ++ AuDebugOn(h_inode && atomic_read(&h_inode->i_count) <= 0); ++ return h_inode; ++} ++ ++/* todo: hard/soft set? */ ++void au_hiput(struct au_hinode *hinode) ++{ ++ au_hn_free(hinode); ++ dput(hinode->hi_whdentry); ++ iput(hinode->hi_inode); ++} ++ ++unsigned int au_hi_flags(struct inode *inode, int isdir) ++{ ++ unsigned int flags; ++ const unsigned int mnt_flags = au_mntflags(inode->i_sb); ++ ++ flags = 0; ++ if (au_opt_test(mnt_flags, XINO)) ++ au_fset_hi(flags, XINO); ++ if (isdir && au_opt_test(mnt_flags, UDBA_HNOTIFY)) ++ au_fset_hi(flags, HNOTIFY); ++ return flags; ++} ++ ++void au_set_h_iptr(struct inode *inode, aufs_bindex_t bindex, ++ struct inode *h_inode, unsigned int flags) ++{ ++ struct au_hinode *hinode; ++ struct inode *hi; ++ struct au_iinfo *iinfo = au_ii(inode); ++ ++ IiMustWriteLock(inode); ++ ++ hinode = iinfo->ii_hinode + bindex; ++ hi = hinode->hi_inode; ++ AuDebugOn(h_inode && atomic_read(&h_inode->i_count) <= 0); ++ ++ if (hi) ++ au_hiput(hinode); ++ hinode->hi_inode = h_inode; ++ if (h_inode) { ++ int err; ++ struct super_block *sb = inode->i_sb; ++ struct au_branch *br; ++ ++ AuDebugOn(inode->i_mode ++ && (h_inode->i_mode & S_IFMT) ++ != (inode->i_mode & S_IFMT)); ++ if (bindex == iinfo->ii_bstart) ++ au_cpup_igen(inode, h_inode); ++ br = au_sbr(sb, bindex); ++ hinode->hi_id = br->br_id; ++ if (au_ftest_hi(flags, XINO)) { ++ err = au_xino_write(sb, bindex, h_inode->i_ino, ++ inode->i_ino); ++ if (unlikely(err)) ++ AuIOErr1("failed au_xino_write() %d\n", err); ++ } ++ ++ if (au_ftest_hi(flags, HNOTIFY) ++ && au_br_hnotifyable(br->br_perm)) { ++ err = au_hn_alloc(hinode, inode); ++ if (unlikely(err)) ++ AuIOErr1("au_hn_alloc() %d\n", err); ++ } ++ } ++} ++ ++void au_set_hi_wh(struct inode *inode, aufs_bindex_t bindex, ++ struct dentry *h_wh) ++{ ++ struct au_hinode *hinode; ++ ++ IiMustWriteLock(inode); ++ ++ hinode = au_ii(inode)->ii_hinode + bindex; ++ AuDebugOn(hinode->hi_whdentry); ++ hinode->hi_whdentry = h_wh; ++} ++ ++void au_update_iigen(struct inode *inode) ++{ ++ atomic_set(&au_ii(inode)->ii_generation, au_sigen(inode->i_sb)); ++ /* smp_mb(); */ /* atomic_set */ ++} ++ ++/* it may be called at remount time, too */ ++void au_update_ibrange(struct inode *inode, int do_put_zero) ++{ ++ struct au_iinfo *iinfo; ++ aufs_bindex_t bindex, bend; ++ ++ iinfo = au_ii(inode); ++ if (!iinfo) ++ return; ++ ++ IiMustWriteLock(inode); ++ ++ if (do_put_zero && iinfo->ii_bstart >= 0) { ++ for (bindex = iinfo->ii_bstart; bindex <= iinfo->ii_bend; ++ bindex++) { ++ struct inode *h_i; ++ ++ h_i = iinfo->ii_hinode[0 + bindex].hi_inode; ++ if (h_i && !h_i->i_nlink) ++ au_set_h_iptr(inode, bindex, NULL, 0); ++ } ++ } ++ ++ iinfo->ii_bstart = -1; ++ iinfo->ii_bend = -1; ++ bend = au_sbend(inode->i_sb); ++ for (bindex = 0; bindex <= bend; bindex++) ++ if (iinfo->ii_hinode[0 + bindex].hi_inode) { ++ iinfo->ii_bstart = bindex; ++ break; ++ } ++ if (iinfo->ii_bstart >= 0) ++ for (bindex = bend; bindex >= iinfo->ii_bstart; bindex--) ++ if (iinfo->ii_hinode[0 + bindex].hi_inode) { ++ iinfo->ii_bend = bindex; ++ break; ++ } ++ AuDebugOn(iinfo->ii_bstart > iinfo->ii_bend); ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++void au_icntnr_init_once(void *_c) ++{ ++ struct au_icntnr *c = _c; ++ struct au_iinfo *iinfo = &c->iinfo; ++ static struct lock_class_key aufs_ii; ++ ++ au_rw_init(&iinfo->ii_rwsem); ++ au_rw_class(&iinfo->ii_rwsem, &aufs_ii); ++ inode_init_once(&c->vfs_inode); ++} ++ ++int au_iinfo_init(struct inode *inode) ++{ ++ struct au_iinfo *iinfo; ++ struct super_block *sb; ++ int nbr, i; ++ ++ sb = inode->i_sb; ++ iinfo = &(container_of(inode, struct au_icntnr, vfs_inode)->iinfo); ++ nbr = au_sbend(sb) + 1; ++ if (unlikely(nbr <= 0)) ++ nbr = 1; ++ iinfo->ii_hinode = kcalloc(nbr, sizeof(*iinfo->ii_hinode), GFP_NOFS); ++ if (iinfo->ii_hinode) { ++ au_ninodes_inc(sb); ++ for (i = 0; i < nbr; i++) ++ iinfo->ii_hinode[i].hi_id = -1; ++ ++ atomic_set(&iinfo->ii_generation, au_sigen(sb)); ++ /* smp_mb(); */ /* atomic_set */ ++ iinfo->ii_bstart = -1; ++ iinfo->ii_bend = -1; ++ iinfo->ii_vdir = NULL; ++ return 0; ++ } ++ return -ENOMEM; ++} ++ ++int au_ii_realloc(struct au_iinfo *iinfo, int nbr) ++{ ++ int err, sz; ++ struct au_hinode *hip; ++ ++ AuRwMustWriteLock(&iinfo->ii_rwsem); ++ ++ err = -ENOMEM; ++ sz = sizeof(*hip) * (iinfo->ii_bend + 1); ++ if (!sz) ++ sz = sizeof(*hip); ++ hip = au_kzrealloc(iinfo->ii_hinode, sz, sizeof(*hip) * nbr, GFP_NOFS); ++ if (hip) { ++ iinfo->ii_hinode = hip; ++ err = 0; ++ } ++ ++ return err; ++} ++ ++void au_iinfo_fin(struct inode *inode) ++{ ++ struct au_iinfo *iinfo; ++ struct au_hinode *hi; ++ struct super_block *sb; ++ aufs_bindex_t bindex, bend; ++ const unsigned char unlinked = !inode->i_nlink; ++ ++ iinfo = au_ii(inode); ++ /* bad_inode case */ ++ if (!iinfo) ++ return; ++ ++ sb = inode->i_sb; ++ au_ninodes_dec(sb); ++ if (si_pid_test(sb)) ++ au_xino_delete_inode(inode, unlinked); ++ else { ++ /* ++ * it is safe to hide the dependency between sbinfo and ++ * sb->s_umount. ++ */ ++ lockdep_off(); ++ si_noflush_read_lock(sb); ++ au_xino_delete_inode(inode, unlinked); ++ si_read_unlock(sb); ++ lockdep_on(); ++ } ++ ++ if (iinfo->ii_vdir) ++ au_vdir_free(iinfo->ii_vdir); ++ ++ bindex = iinfo->ii_bstart; ++ if (bindex >= 0) { ++ hi = iinfo->ii_hinode + bindex; ++ bend = iinfo->ii_bend; ++ while (bindex++ <= bend) { ++ if (hi->hi_inode) ++ au_hiput(hi); ++ hi++; ++ } ++ } ++ kfree(iinfo->ii_hinode); ++ iinfo->ii_hinode = NULL; ++ AuRwDestroy(&iinfo->ii_rwsem); ++} +diff -urN a/fs/aufs/inode.c b/fs/aufs/inode.c +--- a/fs/aufs/inode.c 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/inode.c 2011-03-06 23:28:02.620413138 +0000 +@@ -0,0 +1,471 @@ ++/* ++ * Copyright (C) 2005-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * inode functions ++ */ ++ ++#include "aufs.h" ++ ++struct inode *au_igrab(struct inode *inode) ++{ ++ if (inode) { ++ AuDebugOn(!atomic_read(&inode->i_count)); ++ ihold(inode); ++ } ++ return inode; ++} ++ ++static void au_refresh_hinode_attr(struct inode *inode, int do_version) ++{ ++ au_cpup_attr_all(inode, /*force*/0); ++ au_update_iigen(inode); ++ if (do_version) ++ inode->i_version++; ++} ++ ++static int au_ii_refresh(struct inode *inode, int *update) ++{ ++ int err, e; ++ umode_t type; ++ aufs_bindex_t bindex, new_bindex; ++ struct super_block *sb; ++ struct au_iinfo *iinfo; ++ struct au_hinode *p, *q, tmp; ++ ++ IiMustWriteLock(inode); ++ ++ *update = 0; ++ sb = inode->i_sb; ++ type = inode->i_mode & S_IFMT; ++ iinfo = au_ii(inode); ++ err = au_ii_realloc(iinfo, au_sbend(sb) + 1); ++ if (unlikely(err)) ++ goto out; ++ ++ AuDebugOn(iinfo->ii_bstart < 0); ++ p = iinfo->ii_hinode + iinfo->ii_bstart; ++ for (bindex = iinfo->ii_bstart; bindex <= iinfo->ii_bend; ++ bindex++, p++) { ++ if (!p->hi_inode) ++ continue; ++ ++ AuDebugOn(type != (p->hi_inode->i_mode & S_IFMT)); ++ new_bindex = au_br_index(sb, p->hi_id); ++ if (new_bindex == bindex) ++ continue; ++ ++ if (new_bindex < 0) { ++ *update = 1; ++ au_hiput(p); ++ p->hi_inode = NULL; ++ continue; ++ } ++ ++ if (new_bindex < iinfo->ii_bstart) ++ iinfo->ii_bstart = new_bindex; ++ if (iinfo->ii_bend < new_bindex) ++ iinfo->ii_bend = new_bindex; ++ /* swap two lower inode, and loop again */ ++ q = iinfo->ii_hinode + new_bindex; ++ tmp = *q; ++ *q = *p; ++ *p = tmp; ++ if (tmp.hi_inode) { ++ bindex--; ++ p--; ++ } ++ } ++ au_update_ibrange(inode, /*do_put_zero*/0); ++ e = au_dy_irefresh(inode); ++ if (unlikely(e && !err)) ++ err = e; ++ ++out: ++ AuTraceErr(err); ++ return err; ++} ++ ++int au_refresh_hinode_self(struct inode *inode) ++{ ++ int err, update; ++ ++ err = au_ii_refresh(inode, &update); ++ if (!err) ++ au_refresh_hinode_attr(inode, update && S_ISDIR(inode->i_mode)); ++ ++ AuTraceErr(err); ++ return err; ++} ++ ++int au_refresh_hinode(struct inode *inode, struct dentry *dentry) ++{ ++ int err, e, update; ++ unsigned int flags; ++ umode_t mode; ++ aufs_bindex_t bindex, bend; ++ unsigned char isdir; ++ struct au_hinode *p; ++ struct au_iinfo *iinfo; ++ ++ err = au_ii_refresh(inode, &update); ++ if (unlikely(err)) ++ goto out; ++ ++ update = 0; ++ iinfo = au_ii(inode); ++ p = iinfo->ii_hinode + iinfo->ii_bstart; ++ mode = (inode->i_mode & S_IFMT); ++ isdir = S_ISDIR(mode); ++ flags = au_hi_flags(inode, isdir); ++ bend = au_dbend(dentry); ++ for (bindex = au_dbstart(dentry); bindex <= bend; bindex++) { ++ struct inode *h_i; ++ struct dentry *h_d; ++ ++ h_d = au_h_dptr(dentry, bindex); ++ if (!h_d || !h_d->d_inode) ++ continue; ++ ++ AuDebugOn(mode != (h_d->d_inode->i_mode & S_IFMT)); ++ if (iinfo->ii_bstart <= bindex && bindex <= iinfo->ii_bend) { ++ h_i = au_h_iptr(inode, bindex); ++ if (h_i) { ++ if (h_i == h_d->d_inode) ++ continue; ++ err = -EIO; ++ break; ++ } ++ } ++ if (bindex < iinfo->ii_bstart) ++ iinfo->ii_bstart = bindex; ++ if (iinfo->ii_bend < bindex) ++ iinfo->ii_bend = bindex; ++ au_set_h_iptr(inode, bindex, au_igrab(h_d->d_inode), flags); ++ update = 1; ++ } ++ au_update_ibrange(inode, /*do_put_zero*/0); ++ e = au_dy_irefresh(inode); ++ if (unlikely(e && !err)) ++ err = e; ++ if (!err) ++ au_refresh_hinode_attr(inode, update && isdir); ++ ++out: ++ AuTraceErr(err); ++ return err; ++} ++ ++static int set_inode(struct inode *inode, struct dentry *dentry) ++{ ++ int err; ++ unsigned int flags; ++ umode_t mode; ++ aufs_bindex_t bindex, bstart, btail; ++ unsigned char isdir; ++ struct dentry *h_dentry; ++ struct inode *h_inode; ++ struct au_iinfo *iinfo; ++ ++ IiMustWriteLock(inode); ++ ++ err = 0; ++ isdir = 0; ++ bstart = au_dbstart(dentry); ++ h_inode = au_h_dptr(dentry, bstart)->d_inode; ++ mode = h_inode->i_mode; ++ switch (mode & S_IFMT) { ++ case S_IFREG: ++ btail = au_dbtail(dentry); ++ inode->i_op = &aufs_iop; ++ inode->i_fop = &aufs_file_fop; ++ err = au_dy_iaop(inode, bstart, h_inode); ++ if (unlikely(err)) ++ goto out; ++ break; ++ case S_IFDIR: ++ isdir = 1; ++ btail = au_dbtaildir(dentry); ++ inode->i_op = &aufs_dir_iop; ++ inode->i_fop = &aufs_dir_fop; ++ break; ++ case S_IFLNK: ++ btail = au_dbtail(dentry); ++ inode->i_op = &aufs_symlink_iop; ++ break; ++ case S_IFBLK: ++ case S_IFCHR: ++ case S_IFIFO: ++ case S_IFSOCK: ++ btail = au_dbtail(dentry); ++ inode->i_op = &aufs_iop; ++ au_init_special_fop(inode, mode, h_inode->i_rdev); ++ break; ++ default: ++ AuIOErr("Unknown file type 0%o\n", mode); ++ err = -EIO; ++ goto out; ++ } ++ ++ /* do not set hnotify for whiteouted dirs (SHWH mode) */ ++ flags = au_hi_flags(inode, isdir); ++ if (au_opt_test(au_mntflags(dentry->d_sb), SHWH) ++ && au_ftest_hi(flags, HNOTIFY) ++ && dentry->d_name.len > AUFS_WH_PFX_LEN ++ && !memcmp(dentry->d_name.name, AUFS_WH_PFX, AUFS_WH_PFX_LEN)) ++ au_fclr_hi(flags, HNOTIFY); ++ iinfo = au_ii(inode); ++ iinfo->ii_bstart = bstart; ++ iinfo->ii_bend = btail; ++ for (bindex = bstart; bindex <= btail; bindex++) { ++ h_dentry = au_h_dptr(dentry, bindex); ++ if (h_dentry) ++ au_set_h_iptr(inode, bindex, ++ au_igrab(h_dentry->d_inode), flags); ++ } ++ au_cpup_attr_all(inode, /*force*/1); ++ ++out: ++ return err; ++} ++ ++/* ++ * successful returns with iinfo write_locked ++ * minus: errno ++ * zero: success, matched ++ * plus: no error, but unmatched ++ */ ++static int reval_inode(struct inode *inode, struct dentry *dentry) ++{ ++ int err; ++ aufs_bindex_t bindex, bend; ++ struct inode *h_inode, *h_dinode; ++ ++ /* ++ * before this function, if aufs got any iinfo lock, it must be only ++ * one, the parent dir. ++ * it can happen by UDBA and the obsoleted inode number. ++ */ ++ err = -EIO; ++ if (unlikely(inode->i_ino == parent_ino(dentry))) ++ goto out; ++ ++ err = 1; ++ ii_write_lock_new_child(inode); ++ h_dinode = au_h_dptr(dentry, au_dbstart(dentry))->d_inode; ++ bend = au_ibend(inode); ++ for (bindex = au_ibstart(inode); bindex <= bend; bindex++) { ++ h_inode = au_h_iptr(inode, bindex); ++ if (h_inode && h_inode == h_dinode) { ++ err = 0; ++ if (au_iigen_test(inode, au_digen(dentry))) ++ err = au_refresh_hinode(inode, dentry); ++ break; ++ } ++ } ++ ++ if (unlikely(err)) ++ ii_write_unlock(inode); ++out: ++ return err; ++} ++ ++int au_ino(struct super_block *sb, aufs_bindex_t bindex, ino_t h_ino, ++ unsigned int d_type, ino_t *ino) ++{ ++ int err; ++ struct mutex *mtx; ++ ++ /* prevent hardlinked inode number from race condition */ ++ mtx = NULL; ++ if (d_type != DT_DIR) { ++ mtx = &au_sbr(sb, bindex)->br_xino.xi_nondir_mtx; ++ mutex_lock(mtx); ++ } ++ err = au_xino_read(sb, bindex, h_ino, ino); ++ if (unlikely(err)) ++ goto out; ++ ++ if (!*ino) { ++ err = -EIO; ++ *ino = au_xino_new_ino(sb); ++ if (unlikely(!*ino)) ++ goto out; ++ err = au_xino_write(sb, bindex, h_ino, *ino); ++ if (unlikely(err)) ++ goto out; ++ } ++ ++out: ++ if (mtx) ++ mutex_unlock(mtx); ++ return err; ++} ++ ++/* successful returns with iinfo write_locked */ ++/* todo: return with unlocked? */ ++struct inode *au_new_inode(struct dentry *dentry, int must_new) ++{ ++ struct inode *inode, *h_inode; ++ struct dentry *h_dentry; ++ struct super_block *sb; ++ struct mutex *mtx; ++ ino_t h_ino, ino; ++ int err; ++ aufs_bindex_t bstart; ++ ++ sb = dentry->d_sb; ++ bstart = au_dbstart(dentry); ++ h_dentry = au_h_dptr(dentry, bstart); ++ h_inode = h_dentry->d_inode; ++ h_ino = h_inode->i_ino; ++ ++ /* ++ * stop 'race'-ing between hardlinks under different ++ * parents. ++ */ ++ mtx = NULL; ++ if (!S_ISDIR(h_inode->i_mode)) ++ mtx = &au_sbr(sb, bstart)->br_xino.xi_nondir_mtx; ++ ++new_ino: ++ if (mtx) ++ mutex_lock(mtx); ++ err = au_xino_read(sb, bstart, h_ino, &ino); ++ inode = ERR_PTR(err); ++ if (unlikely(err)) ++ goto out; ++ ++ if (!ino) { ++ ino = au_xino_new_ino(sb); ++ if (unlikely(!ino)) { ++ inode = ERR_PTR(-EIO); ++ goto out; ++ } ++ } ++ ++ AuDbg("i%lu\n", (unsigned long)ino); ++ inode = au_iget_locked(sb, ino); ++ err = PTR_ERR(inode); ++ if (IS_ERR(inode)) ++ goto out; ++ ++ AuDbg("%lx, new %d\n", inode->i_state, !!(inode->i_state & I_NEW)); ++ if (inode->i_state & I_NEW) { ++ ii_write_lock_new_child(inode); ++ err = set_inode(inode, dentry); ++ if (!err) { ++ unlock_new_inode(inode); ++ goto out; /* success */ ++ } ++ ++ /* ++ * iget_failed() calls iput(), but we need to call ++ * ii_write_unlock() after iget_failed(). so dirty hack for ++ * i_count. ++ */ ++ atomic_inc(&inode->i_count); ++ iget_failed(inode); ++ ii_write_unlock(inode); ++ au_xino_write(sb, bstart, h_ino, /*ino*/0); ++ /* ignore this error */ ++ goto out_iput; ++ } else if (!must_new && !IS_DEADDIR(inode) && inode->i_nlink) { ++ /* ++ * horrible race condition between lookup, readdir and copyup ++ * (or something). ++ */ ++ if (mtx) ++ mutex_unlock(mtx); ++ err = reval_inode(inode, dentry); ++ if (unlikely(err < 0)) { ++ mtx = NULL; ++ goto out_iput; ++ } ++ ++ if (!err) { ++ mtx = NULL; ++ goto out; /* success */ ++ } else if (mtx) ++ mutex_lock(mtx); ++ } ++ ++ if (unlikely(au_test_fs_unique_ino(h_dentry->d_inode))) ++ AuWarn1("Warning: Un-notified UDBA or repeatedly renamed dir," ++ " b%d, %s, %.*s, hi%lu, i%lu.\n", ++ bstart, au_sbtype(h_dentry->d_sb), AuDLNPair(dentry), ++ (unsigned long)h_ino, (unsigned long)ino); ++ ino = 0; ++ err = au_xino_write(sb, bstart, h_ino, /*ino*/0); ++ if (!err) { ++ iput(inode); ++ if (mtx) ++ mutex_unlock(mtx); ++ goto new_ino; ++ } ++ ++out_iput: ++ iput(inode); ++ inode = ERR_PTR(err); ++out: ++ if (mtx) ++ mutex_unlock(mtx); ++ return inode; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++int au_test_ro(struct super_block *sb, aufs_bindex_t bindex, ++ struct inode *inode) ++{ ++ int err; ++ ++ err = au_br_rdonly(au_sbr(sb, bindex)); ++ ++ /* pseudo-link after flushed may happen out of bounds */ ++ if (!err ++ && inode ++ && au_ibstart(inode) <= bindex ++ && bindex <= au_ibend(inode)) { ++ /* ++ * permission check is unnecessary since vfsub routine ++ * will be called later ++ */ ++ struct inode *hi = au_h_iptr(inode, bindex); ++ if (hi) ++ err = IS_IMMUTABLE(hi) ? -EROFS : 0; ++ } ++ ++ return err; ++} ++ ++int au_test_h_perm(struct inode *h_inode, int mask) ++{ ++ if (!current_fsuid()) ++ return 0; ++ return inode_permission(h_inode, mask); ++} ++ ++int au_test_h_perm_sio(struct inode *h_inode, int mask) ++{ ++ if (au_test_nfs(h_inode->i_sb) ++ && (mask & MAY_WRITE) ++ && S_ISDIR(h_inode->i_mode)) ++ mask |= MAY_READ; /* force permission check */ ++ return au_test_h_perm(h_inode, mask); ++} +diff -urN a/fs/aufs/inode.h b/fs/aufs/inode.h +--- a/fs/aufs/inode.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/inode.h 2011-03-06 23:28:02.616413258 +0000 +@@ -0,0 +1,546 @@ ++/* ++ * Copyright (C) 2005-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * inode operations ++ */ ++ ++#ifndef __AUFS_INODE_H__ ++#define __AUFS_INODE_H__ ++ ++#ifdef __KERNEL__ ++ ++#include ++#include ++#include ++#include "rwsem.h" ++ ++struct vfsmount; ++ ++struct au_hnotify { ++#ifdef CONFIG_AUFS_HNOTIFY ++#ifdef CONFIG_AUFS_HFSNOTIFY ++ /* never use fsnotify_add_vfsmount_mark() */ ++ struct fsnotify_mark hn_mark; ++ int hn_mark_dead; ++#endif ++ struct inode *hn_aufs_inode; /* no get/put */ ++#endif ++} ____cacheline_aligned_in_smp; ++ ++struct au_hinode { ++ struct inode *hi_inode; ++ aufs_bindex_t hi_id; ++#ifdef CONFIG_AUFS_HNOTIFY ++ struct au_hnotify *hi_notify; ++#endif ++ ++ /* reference to the copied-up whiteout with get/put */ ++ struct dentry *hi_whdentry; ++}; ++ ++struct au_vdir; ++struct au_iinfo { ++ atomic_t ii_generation; ++ struct super_block *ii_hsb1; /* no get/put */ ++ ++ struct au_rwsem ii_rwsem; ++ aufs_bindex_t ii_bstart, ii_bend; ++ __u32 ii_higen; ++ struct au_hinode *ii_hinode; ++ struct au_vdir *ii_vdir; ++}; ++ ++struct au_icntnr { ++ struct au_iinfo iinfo; ++ struct inode vfs_inode; ++} ____cacheline_aligned_in_smp; ++ ++/* au_pin flags */ ++#define AuPin_DI_LOCKED 1 ++#define AuPin_MNT_WRITE (1 << 1) ++#define au_ftest_pin(flags, name) ((flags) & AuPin_##name) ++#define au_fset_pin(flags, name) \ ++ do { (flags) |= AuPin_##name; } while (0) ++#define au_fclr_pin(flags, name) \ ++ do { (flags) &= ~AuPin_##name; } while (0) ++ ++struct au_pin { ++ /* input */ ++ struct dentry *dentry; ++ unsigned int udba; ++ unsigned char lsc_di, lsc_hi, flags; ++ aufs_bindex_t bindex; ++ ++ /* output */ ++ struct dentry *parent; ++ struct au_hinode *hdir; ++ struct vfsmount *h_mnt; ++}; ++ ++/* ---------------------------------------------------------------------- */ ++ ++static inline struct au_iinfo *au_ii(struct inode *inode) ++{ ++ struct au_iinfo *iinfo; ++ ++ iinfo = &(container_of(inode, struct au_icntnr, vfs_inode)->iinfo); ++ if (iinfo->ii_hinode) ++ return iinfo; ++ return NULL; /* debugging bad_inode case */ ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* inode.c */ ++struct inode *au_igrab(struct inode *inode); ++int au_refresh_hinode_self(struct inode *inode); ++int au_refresh_hinode(struct inode *inode, struct dentry *dentry); ++int au_ino(struct super_block *sb, aufs_bindex_t bindex, ino_t h_ino, ++ unsigned int d_type, ino_t *ino); ++struct inode *au_new_inode(struct dentry *dentry, int must_new); ++int au_test_ro(struct super_block *sb, aufs_bindex_t bindex, ++ struct inode *inode); ++int au_test_h_perm(struct inode *h_inode, int mask); ++int au_test_h_perm_sio(struct inode *h_inode, int mask); ++ ++static inline int au_wh_ino(struct super_block *sb, aufs_bindex_t bindex, ++ ino_t h_ino, unsigned int d_type, ino_t *ino) ++{ ++#ifdef CONFIG_AUFS_SHWH ++ return au_ino(sb, bindex, h_ino, d_type, ino); ++#else ++ return 0; ++#endif ++} ++ ++/* i_op.c */ ++extern struct inode_operations aufs_iop, aufs_symlink_iop, aufs_dir_iop; ++ ++/* au_wr_dir flags */ ++#define AuWrDir_ADD_ENTRY 1 ++#define AuWrDir_ISDIR (1 << 1) ++#define au_ftest_wrdir(flags, name) ((flags) & AuWrDir_##name) ++#define au_fset_wrdir(flags, name) \ ++ do { (flags) |= AuWrDir_##name; } while (0) ++#define au_fclr_wrdir(flags, name) \ ++ do { (flags) &= ~AuWrDir_##name; } while (0) ++ ++struct au_wr_dir_args { ++ aufs_bindex_t force_btgt; ++ unsigned char flags; ++}; ++int au_wr_dir(struct dentry *dentry, struct dentry *src_dentry, ++ struct au_wr_dir_args *args); ++ ++struct dentry *au_pinned_h_parent(struct au_pin *pin); ++void au_pin_init(struct au_pin *pin, struct dentry *dentry, ++ aufs_bindex_t bindex, int lsc_di, int lsc_hi, ++ unsigned int udba, unsigned char flags); ++int au_pin(struct au_pin *pin, struct dentry *dentry, aufs_bindex_t bindex, ++ unsigned int udba, unsigned char flags) __must_check; ++int au_do_pin(struct au_pin *pin) __must_check; ++void au_unpin(struct au_pin *pin); ++ ++/* i_op_add.c */ ++int au_may_add(struct dentry *dentry, aufs_bindex_t bindex, ++ struct dentry *h_parent, int isdir); ++int aufs_mknod(struct inode *dir, struct dentry *dentry, int mode, dev_t dev); ++int aufs_symlink(struct inode *dir, struct dentry *dentry, const char *symname); ++int aufs_create(struct inode *dir, struct dentry *dentry, int mode, ++ struct nameidata *nd); ++int aufs_link(struct dentry *src_dentry, struct inode *dir, ++ struct dentry *dentry); ++int aufs_mkdir(struct inode *dir, struct dentry *dentry, int mode); ++ ++/* i_op_del.c */ ++int au_wr_dir_need_wh(struct dentry *dentry, int isdir, aufs_bindex_t *bcpup); ++int au_may_del(struct dentry *dentry, aufs_bindex_t bindex, ++ struct dentry *h_parent, int isdir); ++int aufs_unlink(struct inode *dir, struct dentry *dentry); ++int aufs_rmdir(struct inode *dir, struct dentry *dentry); ++ ++/* i_op_ren.c */ ++int au_wbr(struct dentry *dentry, aufs_bindex_t btgt); ++int aufs_rename(struct inode *src_dir, struct dentry *src_dentry, ++ struct inode *dir, struct dentry *dentry); ++ ++/* iinfo.c */ ++struct inode *au_h_iptr(struct inode *inode, aufs_bindex_t bindex); ++void au_hiput(struct au_hinode *hinode); ++void au_set_hi_wh(struct inode *inode, aufs_bindex_t bindex, ++ struct dentry *h_wh); ++unsigned int au_hi_flags(struct inode *inode, int isdir); ++ ++/* hinode flags */ ++#define AuHi_XINO 1 ++#define AuHi_HNOTIFY (1 << 1) ++#define au_ftest_hi(flags, name) ((flags) & AuHi_##name) ++#define au_fset_hi(flags, name) \ ++ do { (flags) |= AuHi_##name; } while (0) ++#define au_fclr_hi(flags, name) \ ++ do { (flags) &= ~AuHi_##name; } while (0) ++ ++#ifndef CONFIG_AUFS_HNOTIFY ++#undef AuHi_HNOTIFY ++#define AuHi_HNOTIFY 0 ++#endif ++ ++void au_set_h_iptr(struct inode *inode, aufs_bindex_t bindex, ++ struct inode *h_inode, unsigned int flags); ++ ++void au_update_iigen(struct inode *inode); ++void au_update_ibrange(struct inode *inode, int do_put_zero); ++ ++void au_icntnr_init_once(void *_c); ++int au_iinfo_init(struct inode *inode); ++void au_iinfo_fin(struct inode *inode); ++int au_ii_realloc(struct au_iinfo *iinfo, int nbr); ++ ++#ifdef CONFIG_PROC_FS ++/* plink.c */ ++int au_plink_maint(struct super_block *sb, int flags); ++void au_plink_maint_leave(struct au_sbinfo *sbinfo); ++int au_plink_maint_enter(struct super_block *sb); ++#ifdef CONFIG_AUFS_DEBUG ++void au_plink_list(struct super_block *sb); ++#else ++AuStubVoid(au_plink_list, struct super_block *sb) ++#endif ++int au_plink_test(struct inode *inode); ++struct dentry *au_plink_lkup(struct inode *inode, aufs_bindex_t bindex); ++void au_plink_append(struct inode *inode, aufs_bindex_t bindex, ++ struct dentry *h_dentry); ++void au_plink_put(struct super_block *sb, int verbose); ++void au_plink_clean(struct super_block *sb, int verbose); ++void au_plink_half_refresh(struct super_block *sb, aufs_bindex_t br_id); ++#else ++AuStubInt0(au_plink_maint, struct super_block *sb, int flags); ++AuStubVoid(au_plink_maint_leave, struct au_sbinfo *sbinfo); ++AuStubInt0(au_plink_maint_enter, struct super_block *sb); ++AuStubVoid(au_plink_list, struct super_block *sb); ++AuStubInt0(au_plink_test, struct inode *inode); ++AuStub(struct dentry *, au_plink_lkup, return NULL, ++ struct inode *inode, aufs_bindex_t bindex); ++AuStubVoid(au_plink_append, struct inode *inode, aufs_bindex_t bindex, ++ struct dentry *h_dentry); ++AuStubVoid(au_plink_put, struct super_block *sb, int verbose); ++AuStubVoid(au_plink_clean, struct super_block *sb, int verbose); ++AuStubVoid(au_plink_half_refresh, struct super_block *sb, aufs_bindex_t br_id); ++#endif /* CONFIG_PROC_FS */ ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* lock subclass for iinfo */ ++enum { ++ AuLsc_II_CHILD, /* child first */ ++ AuLsc_II_CHILD2, /* rename(2), link(2), and cpup at hnotify */ ++ AuLsc_II_CHILD3, /* copyup dirs */ ++ AuLsc_II_PARENT, /* see AuLsc_I_PARENT in vfsub.h */ ++ AuLsc_II_PARENT2, ++ AuLsc_II_PARENT3, /* copyup dirs */ ++ AuLsc_II_NEW_CHILD ++}; ++ ++/* ++ * ii_read_lock_child, ii_write_lock_child, ++ * ii_read_lock_child2, ii_write_lock_child2, ++ * ii_read_lock_child3, ii_write_lock_child3, ++ * ii_read_lock_parent, ii_write_lock_parent, ++ * ii_read_lock_parent2, ii_write_lock_parent2, ++ * ii_read_lock_parent3, ii_write_lock_parent3, ++ * ii_read_lock_new_child, ii_write_lock_new_child, ++ */ ++#define AuReadLockFunc(name, lsc) \ ++static inline void ii_read_lock_##name(struct inode *i) \ ++{ \ ++ au_rw_read_lock_nested(&au_ii(i)->ii_rwsem, AuLsc_II_##lsc); \ ++} ++ ++#define AuWriteLockFunc(name, lsc) \ ++static inline void ii_write_lock_##name(struct inode *i) \ ++{ \ ++ au_rw_write_lock_nested(&au_ii(i)->ii_rwsem, AuLsc_II_##lsc); \ ++} ++ ++#define AuRWLockFuncs(name, lsc) \ ++ AuReadLockFunc(name, lsc) \ ++ AuWriteLockFunc(name, lsc) ++ ++AuRWLockFuncs(child, CHILD); ++AuRWLockFuncs(child2, CHILD2); ++AuRWLockFuncs(child3, CHILD3); ++AuRWLockFuncs(parent, PARENT); ++AuRWLockFuncs(parent2, PARENT2); ++AuRWLockFuncs(parent3, PARENT3); ++AuRWLockFuncs(new_child, NEW_CHILD); ++ ++#undef AuReadLockFunc ++#undef AuWriteLockFunc ++#undef AuRWLockFuncs ++ ++/* ++ * ii_read_unlock, ii_write_unlock, ii_downgrade_lock ++ */ ++AuSimpleUnlockRwsemFuncs(ii, struct inode *i, &au_ii(i)->ii_rwsem); ++ ++#define IiMustNoWaiters(i) AuRwMustNoWaiters(&au_ii(i)->ii_rwsem) ++#define IiMustAnyLock(i) AuRwMustAnyLock(&au_ii(i)->ii_rwsem) ++#define IiMustWriteLock(i) AuRwMustWriteLock(&au_ii(i)->ii_rwsem) ++ ++/* ---------------------------------------------------------------------- */ ++ ++static inline void au_icntnr_init(struct au_icntnr *c) ++{ ++#ifdef CONFIG_AUFS_DEBUG ++ c->vfs_inode.i_mode = 0; ++#endif ++} ++ ++static inline unsigned int au_iigen(struct inode *inode) ++{ ++ return atomic_read(&au_ii(inode)->ii_generation); ++} ++ ++/* tiny test for inode number */ ++/* tmpfs generation is too rough */ ++static inline int au_test_higen(struct inode *inode, struct inode *h_inode) ++{ ++ struct au_iinfo *iinfo; ++ ++ iinfo = au_ii(inode); ++ AuRwMustAnyLock(&iinfo->ii_rwsem); ++ return !(iinfo->ii_hsb1 == h_inode->i_sb ++ && iinfo->ii_higen == h_inode->i_generation); ++} ++ ++static inline void au_iigen_dec(struct inode *inode) ++{ ++ atomic_dec(&au_ii(inode)->ii_generation); ++} ++ ++static inline int au_iigen_test(struct inode *inode, unsigned int sigen) ++{ ++ int err; ++ ++ err = 0; ++ if (unlikely(inode && au_iigen(inode) != sigen)) ++ err = -EIO; ++ ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++static inline aufs_bindex_t au_ii_br_id(struct inode *inode, ++ aufs_bindex_t bindex) ++{ ++ IiMustAnyLock(inode); ++ return au_ii(inode)->ii_hinode[0 + bindex].hi_id; ++} ++ ++static inline aufs_bindex_t au_ibstart(struct inode *inode) ++{ ++ IiMustAnyLock(inode); ++ return au_ii(inode)->ii_bstart; ++} ++ ++static inline aufs_bindex_t au_ibend(struct inode *inode) ++{ ++ IiMustAnyLock(inode); ++ return au_ii(inode)->ii_bend; ++} ++ ++static inline struct au_vdir *au_ivdir(struct inode *inode) ++{ ++ IiMustAnyLock(inode); ++ return au_ii(inode)->ii_vdir; ++} ++ ++static inline struct dentry *au_hi_wh(struct inode *inode, aufs_bindex_t bindex) ++{ ++ IiMustAnyLock(inode); ++ return au_ii(inode)->ii_hinode[0 + bindex].hi_whdentry; ++} ++ ++static inline void au_set_ibstart(struct inode *inode, aufs_bindex_t bindex) ++{ ++ IiMustWriteLock(inode); ++ au_ii(inode)->ii_bstart = bindex; ++} ++ ++static inline void au_set_ibend(struct inode *inode, aufs_bindex_t bindex) ++{ ++ IiMustWriteLock(inode); ++ au_ii(inode)->ii_bend = bindex; ++} ++ ++static inline void au_set_ivdir(struct inode *inode, struct au_vdir *vdir) ++{ ++ IiMustWriteLock(inode); ++ au_ii(inode)->ii_vdir = vdir; ++} ++ ++static inline struct au_hinode *au_hi(struct inode *inode, aufs_bindex_t bindex) ++{ ++ IiMustAnyLock(inode); ++ return au_ii(inode)->ii_hinode + bindex; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++static inline struct dentry *au_pinned_parent(struct au_pin *pin) ++{ ++ if (pin) ++ return pin->parent; ++ return NULL; ++} ++ ++static inline struct inode *au_pinned_h_dir(struct au_pin *pin) ++{ ++ if (pin && pin->hdir) ++ return pin->hdir->hi_inode; ++ return NULL; ++} ++ ++static inline struct au_hinode *au_pinned_hdir(struct au_pin *pin) ++{ ++ if (pin) ++ return pin->hdir; ++ return NULL; ++} ++ ++static inline void au_pin_set_dentry(struct au_pin *pin, struct dentry *dentry) ++{ ++ if (pin) ++ pin->dentry = dentry; ++} ++ ++static inline void au_pin_set_parent_lflag(struct au_pin *pin, ++ unsigned char lflag) ++{ ++ if (pin) { ++ if (lflag) ++ au_fset_pin(pin->flags, DI_LOCKED); ++ else ++ au_fclr_pin(pin->flags, DI_LOCKED); ++ } ++} ++ ++static inline void au_pin_set_parent(struct au_pin *pin, struct dentry *parent) ++{ ++ if (pin) { ++ dput(pin->parent); ++ pin->parent = dget(parent); ++ } ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++struct au_branch; ++#ifdef CONFIG_AUFS_HNOTIFY ++struct au_hnotify_op { ++ void (*ctl)(struct au_hinode *hinode, int do_set); ++ int (*alloc)(struct au_hinode *hinode); ++ void (*free)(struct au_hinode *hinode); ++ ++ void (*fin)(void); ++ int (*init)(void); ++ ++ int (*reset_br)(unsigned int udba, struct au_branch *br, int perm); ++ void (*fin_br)(struct au_branch *br); ++ int (*init_br)(struct au_branch *br, int perm); ++}; ++ ++/* hnotify.c */ ++int au_hn_alloc(struct au_hinode *hinode, struct inode *inode); ++void au_hn_free(struct au_hinode *hinode); ++void au_hn_ctl(struct au_hinode *hinode, int do_set); ++void au_hn_reset(struct inode *inode, unsigned int flags); ++int au_hnotify(struct inode *h_dir, struct au_hnotify *hnotify, u32 mask, ++ struct qstr *h_child_qstr, struct inode *h_child_inode); ++int au_hnotify_reset_br(unsigned int udba, struct au_branch *br, int perm); ++int au_hnotify_init_br(struct au_branch *br, int perm); ++void au_hnotify_fin_br(struct au_branch *br); ++int __init au_hnotify_init(void); ++void au_hnotify_fin(void); ++ ++/* hfsnotify.c */ ++extern const struct au_hnotify_op au_hnotify_op; ++ ++static inline ++void au_hn_init(struct au_hinode *hinode) ++{ ++ hinode->hi_notify = NULL; ++} ++ ++#else ++static inline ++int au_hn_alloc(struct au_hinode *hinode __maybe_unused, ++ struct inode *inode __maybe_unused) ++{ ++ return -EOPNOTSUPP; ++} ++ ++AuStubVoid(au_hn_free, struct au_hinode *hinode __maybe_unused) ++AuStubVoid(au_hn_ctl, struct au_hinode *hinode __maybe_unused, ++ int do_set __maybe_unused) ++AuStubVoid(au_hn_reset, struct inode *inode __maybe_unused, ++ unsigned int flags __maybe_unused) ++AuStubInt0(au_hnotify_reset_br, unsigned int udba __maybe_unused, ++ struct au_branch *br __maybe_unused, ++ int perm __maybe_unused) ++AuStubInt0(au_hnotify_init_br, struct au_branch *br __maybe_unused, ++ int perm __maybe_unused) ++AuStubVoid(au_hnotify_fin_br, struct au_branch *br __maybe_unused) ++AuStubInt0(__init au_hnotify_init, void) ++AuStubVoid(au_hnotify_fin, void) ++AuStubVoid(au_hn_init, struct au_hinode *hinode __maybe_unused) ++#endif /* CONFIG_AUFS_HNOTIFY */ ++ ++static inline void au_hn_suspend(struct au_hinode *hdir) ++{ ++ au_hn_ctl(hdir, /*do_set*/0); ++} ++ ++static inline void au_hn_resume(struct au_hinode *hdir) ++{ ++ au_hn_ctl(hdir, /*do_set*/1); ++} ++ ++static inline void au_hn_imtx_lock(struct au_hinode *hdir) ++{ ++ mutex_lock(&hdir->hi_inode->i_mutex); ++ au_hn_suspend(hdir); ++} ++ ++static inline void au_hn_imtx_lock_nested(struct au_hinode *hdir, ++ unsigned int sc __maybe_unused) ++{ ++ mutex_lock_nested(&hdir->hi_inode->i_mutex, sc); ++ au_hn_suspend(hdir); ++} ++ ++static inline void au_hn_imtx_unlock(struct au_hinode *hdir) ++{ ++ au_hn_resume(hdir); ++ mutex_unlock(&hdir->hi_inode->i_mutex); ++} ++ ++#endif /* __KERNEL__ */ ++#endif /* __AUFS_INODE_H__ */ +diff -urN a/fs/aufs/ioctl.c b/fs/aufs/ioctl.c +--- a/fs/aufs/ioctl.c 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/ioctl.c 2011-03-06 23:28:02.616413258 +0000 +@@ -0,0 +1,158 @@ ++/* ++ * Copyright (C) 2005-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * ioctl ++ * plink-management and readdir in userspace. ++ * assist the pathconf(3) wrapper library. ++ */ ++ ++#include ++#include "aufs.h" ++ ++static int au_wbr_fd(struct path *path) ++{ ++ int err, fd; ++ aufs_bindex_t wbi, bindex, bend; ++ struct file *h_file; ++ struct super_block *sb; ++ struct dentry *root; ++ struct au_branch *wbr; ++ ++ err = get_unused_fd(); ++ if (unlikely(err < 0)) ++ goto out; ++ fd = err; ++ ++ wbi = 0; ++ sb = path->dentry->d_sb; ++ root = sb->s_root; ++ aufs_read_lock(root, AuLock_IR); ++ wbr = au_sbr(sb, wbi); ++ if (!(path->mnt->mnt_flags & MNT_READONLY) ++ && !au_br_writable(wbr->br_perm)) { ++ bend = au_sbend(sb); ++ for (bindex = 1; bindex <= bend; bindex++) { ++ wbr = au_sbr(sb, bindex); ++ if (au_br_writable(wbr->br_perm)) { ++ wbi = bindex; ++ break; ++ } ++ } ++ wbr = au_sbr(sb, wbi); ++ } ++ AuDbg("wbi %d\n", wbi); ++ h_file = au_h_open(root, wbi, O_RDONLY | O_DIRECTORY | O_LARGEFILE, ++ NULL); ++ aufs_read_unlock(root, AuLock_IR); ++ err = PTR_ERR(h_file); ++ if (IS_ERR(h_file)) ++ goto out_fd; ++ ++ atomic_dec(&wbr->br_count); /* cf. au_h_open() */ ++ fd_install(fd, h_file); ++ err = fd; ++ goto out; /* success */ ++ ++out_fd: ++ put_unused_fd(fd); ++out: ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++long aufs_ioctl_dir(struct file *file, unsigned int cmd, unsigned long arg) ++{ ++ long err; ++ ++ switch (cmd) { ++ case AUFS_CTL_RDU: ++ case AUFS_CTL_RDU_INO: ++ err = au_rdu_ioctl(file, cmd, arg); ++ break; ++ ++ case AUFS_CTL_WBR_FD: ++ err = au_wbr_fd(&file->f_path); ++ break; ++ ++ case AUFS_CTL_IBUSY: ++ err = au_ibusy_ioctl(file, arg); ++ break; ++ ++ default: ++ /* do not call the lower */ ++ AuDbg("0x%x\n", cmd); ++ err = -ENOTTY; ++ } ++ ++ AuTraceErr(err); ++ return err; ++} ++ ++long aufs_ioctl_nondir(struct file *file, unsigned int cmd, unsigned long arg) ++{ ++ long err; ++ ++ switch (cmd) { ++ case AUFS_CTL_WBR_FD: ++ err = au_wbr_fd(&file->f_path); ++ break; ++ ++ default: ++ /* do not call the lower */ ++ AuDbg("0x%x\n", cmd); ++ err = -ENOTTY; ++ } ++ ++ AuTraceErr(err); ++ return err; ++} ++ ++#ifdef CONFIG_COMPAT ++long aufs_compat_ioctl_dir(struct file *file, unsigned int cmd, ++ unsigned long arg) ++{ ++ long err; ++ ++ switch (cmd) { ++ case AUFS_CTL_RDU: ++ case AUFS_CTL_RDU_INO: ++ err = au_rdu_compat_ioctl(file, cmd, arg); ++ break; ++ ++ case AUFS_CTL_IBUSY: ++ err = au_ibusy_compat_ioctl(file, arg); ++ break; ++ ++ default: ++ err = aufs_ioctl_dir(file, cmd, arg); ++ } ++ ++ AuTraceErr(err); ++ return err; ++} ++ ++#if 0 /* unused yet */ ++long aufs_compat_ioctl_nondir(struct file *file, unsigned int cmd, ++ unsigned long arg) ++{ ++ return aufs_ioctl_nondir(file, cmd, (unsigned long)compat_ptr(arg)); ++} ++#endif ++#endif +diff -urN a/fs/aufs/i_op_add.c b/fs/aufs/i_op_add.c +--- a/fs/aufs/i_op_add.c 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/i_op_add.c 2011-03-06 23:28:02.620413138 +0000 +@@ -0,0 +1,702 @@ ++/* ++ * Copyright (C) 2005-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * inode operations (add entry) ++ */ ++ ++#include "aufs.h" ++ ++/* ++ * final procedure of adding a new entry, except link(2). ++ * remove whiteout, instantiate, copyup the parent dir's times and size ++ * and update version. ++ * if it failed, re-create the removed whiteout. ++ */ ++static int epilog(struct inode *dir, aufs_bindex_t bindex, ++ struct dentry *wh_dentry, struct dentry *dentry) ++{ ++ int err, rerr; ++ aufs_bindex_t bwh; ++ struct path h_path; ++ struct inode *inode, *h_dir; ++ struct dentry *wh; ++ ++ bwh = -1; ++ if (wh_dentry) { ++ h_dir = wh_dentry->d_parent->d_inode; /* dir inode is locked */ ++ IMustLock(h_dir); ++ AuDebugOn(au_h_iptr(dir, bindex) != h_dir); ++ bwh = au_dbwh(dentry); ++ h_path.dentry = wh_dentry; ++ h_path.mnt = au_sbr_mnt(dir->i_sb, bindex); ++ err = au_wh_unlink_dentry(au_h_iptr(dir, bindex), &h_path, ++ dentry); ++ if (unlikely(err)) ++ goto out; ++ } ++ ++ inode = au_new_inode(dentry, /*must_new*/1); ++ if (!IS_ERR(inode)) { ++ d_instantiate(dentry, inode); ++ dir = dentry->d_parent->d_inode; /* dir inode is locked */ ++ IMustLock(dir); ++ if (au_ibstart(dir) == au_dbstart(dentry)) ++ au_cpup_attr_timesizes(dir); ++ dir->i_version++; ++ return 0; /* success */ ++ } ++ ++ err = PTR_ERR(inode); ++ if (!wh_dentry) ++ goto out; ++ ++ /* revert */ ++ /* dir inode is locked */ ++ wh = au_wh_create(dentry, bwh, wh_dentry->d_parent); ++ rerr = PTR_ERR(wh); ++ if (IS_ERR(wh)) { ++ AuIOErr("%.*s reverting whiteout failed(%d, %d)\n", ++ AuDLNPair(dentry), err, rerr); ++ err = -EIO; ++ } else ++ dput(wh); ++ ++out: ++ return err; ++} ++ ++static int au_d_may_add(struct dentry *dentry) ++{ ++ int err; ++ ++ err = 0; ++ if (unlikely(d_unhashed(dentry))) ++ err = -ENOENT; ++ if (unlikely(dentry->d_inode)) ++ err = -EEXIST; ++ return err; ++} ++ ++/* ++ * simple tests for the adding inode operations. ++ * following the checks in vfs, plus the parent-child relationship. ++ */ ++int au_may_add(struct dentry *dentry, aufs_bindex_t bindex, ++ struct dentry *h_parent, int isdir) ++{ ++ int err; ++ umode_t h_mode; ++ struct dentry *h_dentry; ++ struct inode *h_inode; ++ ++ err = -ENAMETOOLONG; ++ if (unlikely(dentry->d_name.len > AUFS_MAX_NAMELEN)) ++ goto out; ++ ++ h_dentry = au_h_dptr(dentry, bindex); ++ h_inode = h_dentry->d_inode; ++ if (!dentry->d_inode) { ++ err = -EEXIST; ++ if (unlikely(h_inode)) ++ goto out; ++ } else { ++ /* rename(2) case */ ++ err = -EIO; ++ if (unlikely(!h_inode || !h_inode->i_nlink)) ++ goto out; ++ ++ h_mode = h_inode->i_mode; ++ if (!isdir) { ++ err = -EISDIR; ++ if (unlikely(S_ISDIR(h_mode))) ++ goto out; ++ } else if (unlikely(!S_ISDIR(h_mode))) { ++ err = -ENOTDIR; ++ goto out; ++ } ++ } ++ ++ err = 0; ++ /* expected parent dir is locked */ ++ if (unlikely(h_parent != h_dentry->d_parent)) ++ err = -EIO; ++ ++out: ++ AuTraceErr(err); ++ return err; ++} ++ ++/* ++ * initial procedure of adding a new entry. ++ * prepare writable branch and the parent dir, lock it, ++ * and lookup whiteout for the new entry. ++ */ ++static struct dentry* ++lock_hdir_lkup_wh(struct dentry *dentry, struct au_dtime *dt, ++ struct dentry *src_dentry, struct au_pin *pin, ++ struct au_wr_dir_args *wr_dir_args) ++{ ++ struct dentry *wh_dentry, *h_parent; ++ struct super_block *sb; ++ struct au_branch *br; ++ int err; ++ unsigned int udba; ++ aufs_bindex_t bcpup; ++ ++ AuDbg("%.*s\n", AuDLNPair(dentry)); ++ ++ err = au_wr_dir(dentry, src_dentry, wr_dir_args); ++ bcpup = err; ++ wh_dentry = ERR_PTR(err); ++ if (unlikely(err < 0)) ++ goto out; ++ ++ sb = dentry->d_sb; ++ udba = au_opt_udba(sb); ++ err = au_pin(pin, dentry, bcpup, udba, ++ AuPin_DI_LOCKED | AuPin_MNT_WRITE); ++ wh_dentry = ERR_PTR(err); ++ if (unlikely(err)) ++ goto out; ++ ++ h_parent = au_pinned_h_parent(pin); ++ if (udba != AuOpt_UDBA_NONE ++ && au_dbstart(dentry) == bcpup) ++ err = au_may_add(dentry, bcpup, h_parent, ++ au_ftest_wrdir(wr_dir_args->flags, ISDIR)); ++ else if (unlikely(dentry->d_name.len > AUFS_MAX_NAMELEN)) ++ err = -ENAMETOOLONG; ++ wh_dentry = ERR_PTR(err); ++ if (unlikely(err)) ++ goto out_unpin; ++ ++ br = au_sbr(sb, bcpup); ++ if (dt) { ++ struct path tmp = { ++ .dentry = h_parent, ++ .mnt = br->br_mnt ++ }; ++ au_dtime_store(dt, au_pinned_parent(pin), &tmp); ++ } ++ ++ wh_dentry = NULL; ++ if (bcpup != au_dbwh(dentry)) ++ goto out; /* success */ ++ ++ wh_dentry = au_wh_lkup(h_parent, &dentry->d_name, br); ++ ++out_unpin: ++ if (IS_ERR(wh_dentry)) ++ au_unpin(pin); ++out: ++ return wh_dentry; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++enum { Mknod, Symlink, Creat }; ++struct simple_arg { ++ int type; ++ union { ++ struct { ++ int mode; ++ struct nameidata *nd; ++ } c; ++ struct { ++ const char *symname; ++ } s; ++ struct { ++ int mode; ++ dev_t dev; ++ } m; ++ } u; ++}; ++ ++static int add_simple(struct inode *dir, struct dentry *dentry, ++ struct simple_arg *arg) ++{ ++ int err; ++ aufs_bindex_t bstart; ++ unsigned char created; ++ struct au_dtime dt; ++ struct au_pin pin; ++ struct path h_path; ++ struct dentry *wh_dentry, *parent; ++ struct inode *h_dir; ++ struct au_wr_dir_args wr_dir_args = { ++ .force_btgt = -1, ++ .flags = AuWrDir_ADD_ENTRY ++ }; ++ ++ AuDbg("%.*s\n", AuDLNPair(dentry)); ++ IMustLock(dir); ++ ++ parent = dentry->d_parent; /* dir inode is locked */ ++ err = aufs_read_lock(dentry, AuLock_DW | AuLock_GEN); ++ if (unlikely(err)) ++ goto out; ++ err = au_d_may_add(dentry); ++ if (unlikely(err)) ++ goto out_unlock; ++ di_write_lock_parent(parent); ++ wh_dentry = lock_hdir_lkup_wh(dentry, &dt, /*src_dentry*/NULL, &pin, ++ &wr_dir_args); ++ err = PTR_ERR(wh_dentry); ++ if (IS_ERR(wh_dentry)) ++ goto out_parent; ++ ++ bstart = au_dbstart(dentry); ++ h_path.dentry = au_h_dptr(dentry, bstart); ++ h_path.mnt = au_sbr_mnt(dentry->d_sb, bstart); ++ h_dir = au_pinned_h_dir(&pin); ++ switch (arg->type) { ++ case Creat: ++ err = vfsub_create(h_dir, &h_path, arg->u.c.mode); ++ break; ++ case Symlink: ++ err = vfsub_symlink(h_dir, &h_path, arg->u.s.symname); ++ break; ++ case Mknod: ++ err = vfsub_mknod(h_dir, &h_path, arg->u.m.mode, arg->u.m.dev); ++ break; ++ default: ++ BUG(); ++ } ++ created = !err; ++ if (!err) ++ err = epilog(dir, bstart, wh_dentry, dentry); ++ ++ /* revert */ ++ if (unlikely(created && err && h_path.dentry->d_inode)) { ++ int rerr; ++ rerr = vfsub_unlink(h_dir, &h_path, /*force*/0); ++ if (rerr) { ++ AuIOErr("%.*s revert failure(%d, %d)\n", ++ AuDLNPair(dentry), err, rerr); ++ err = -EIO; ++ } ++ au_dtime_revert(&dt); ++ } ++ ++ au_unpin(&pin); ++ dput(wh_dentry); ++ ++out_parent: ++ di_write_unlock(parent); ++out_unlock: ++ if (unlikely(err)) { ++ au_update_dbstart(dentry); ++ d_drop(dentry); ++ } ++ aufs_read_unlock(dentry, AuLock_DW); ++out: ++ return err; ++} ++ ++int aufs_mknod(struct inode *dir, struct dentry *dentry, int mode, dev_t dev) ++{ ++ struct simple_arg arg = { ++ .type = Mknod, ++ .u.m = { ++ .mode = mode, ++ .dev = dev ++ } ++ }; ++ return add_simple(dir, dentry, &arg); ++} ++ ++int aufs_symlink(struct inode *dir, struct dentry *dentry, const char *symname) ++{ ++ struct simple_arg arg = { ++ .type = Symlink, ++ .u.s.symname = symname ++ }; ++ return add_simple(dir, dentry, &arg); ++} ++ ++int aufs_create(struct inode *dir, struct dentry *dentry, int mode, ++ struct nameidata *nd) ++{ ++ struct simple_arg arg = { ++ .type = Creat, ++ .u.c = { ++ .mode = mode, ++ .nd = nd ++ } ++ }; ++ return add_simple(dir, dentry, &arg); ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++struct au_link_args { ++ aufs_bindex_t bdst, bsrc; ++ struct au_pin pin; ++ struct path h_path; ++ struct dentry *src_parent, *parent; ++}; ++ ++static int au_cpup_before_link(struct dentry *src_dentry, ++ struct au_link_args *a) ++{ ++ int err; ++ struct dentry *h_src_dentry; ++ struct mutex *h_mtx; ++ struct file *h_file; ++ ++ di_read_lock_parent(a->src_parent, AuLock_IR); ++ err = au_test_and_cpup_dirs(src_dentry, a->bdst); ++ if (unlikely(err)) ++ goto out; ++ ++ h_src_dentry = au_h_dptr(src_dentry, a->bsrc); ++ h_mtx = &h_src_dentry->d_inode->i_mutex; ++ err = au_pin(&a->pin, src_dentry, a->bdst, ++ au_opt_udba(src_dentry->d_sb), ++ AuPin_DI_LOCKED | AuPin_MNT_WRITE); ++ if (unlikely(err)) ++ goto out; ++ mutex_lock_nested(h_mtx, AuLsc_I_CHILD); ++ h_file = au_h_open_pre(src_dentry, a->bsrc); ++ if (IS_ERR(h_file)) { ++ err = PTR_ERR(h_file); ++ h_file = NULL; ++ } else ++ err = au_sio_cpup_simple(src_dentry, a->bdst, a->bsrc, ++ AuCpup_DTIME /* | AuCpup_KEEPLINO */); ++ mutex_unlock(h_mtx); ++ au_h_open_post(src_dentry, a->bsrc, h_file); ++ au_unpin(&a->pin); ++ ++out: ++ di_read_unlock(a->src_parent, AuLock_IR); ++ return err; ++} ++ ++static int au_cpup_or_link(struct dentry *src_dentry, struct au_link_args *a) ++{ ++ int err; ++ unsigned char plink; ++ struct inode *h_inode, *inode; ++ struct dentry *h_src_dentry; ++ struct super_block *sb; ++ struct file *h_file; ++ ++ plink = 0; ++ h_inode = NULL; ++ sb = src_dentry->d_sb; ++ inode = src_dentry->d_inode; ++ if (au_ibstart(inode) <= a->bdst) ++ h_inode = au_h_iptr(inode, a->bdst); ++ if (!h_inode || !h_inode->i_nlink) { ++ /* copyup src_dentry as the name of dentry. */ ++ au_set_dbstart(src_dentry, a->bdst); ++ au_set_h_dptr(src_dentry, a->bdst, dget(a->h_path.dentry)); ++ h_inode = au_h_dptr(src_dentry, a->bsrc)->d_inode; ++ mutex_lock_nested(&h_inode->i_mutex, AuLsc_I_CHILD); ++ h_file = au_h_open_pre(src_dentry, a->bsrc); ++ if (IS_ERR(h_file)) { ++ err = PTR_ERR(h_file); ++ h_file = NULL; ++ } else ++ err = au_sio_cpup_single(src_dentry, a->bdst, a->bsrc, ++ -1, AuCpup_KEEPLINO, ++ a->parent); ++ mutex_unlock(&h_inode->i_mutex); ++ au_h_open_post(src_dentry, a->bsrc, h_file); ++ au_set_h_dptr(src_dentry, a->bdst, NULL); ++ au_set_dbstart(src_dentry, a->bsrc); ++ } else { ++ /* the inode of src_dentry already exists on a.bdst branch */ ++ h_src_dentry = d_find_alias(h_inode); ++ if (!h_src_dentry && au_plink_test(inode)) { ++ plink = 1; ++ h_src_dentry = au_plink_lkup(inode, a->bdst); ++ err = PTR_ERR(h_src_dentry); ++ if (IS_ERR(h_src_dentry)) ++ goto out; ++ ++ if (unlikely(!h_src_dentry->d_inode)) { ++ dput(h_src_dentry); ++ h_src_dentry = NULL; ++ } ++ ++ } ++ if (h_src_dentry) { ++ err = vfsub_link(h_src_dentry, au_pinned_h_dir(&a->pin), ++ &a->h_path); ++ dput(h_src_dentry); ++ } else { ++ AuIOErr("no dentry found for hi%lu on b%d\n", ++ h_inode->i_ino, a->bdst); ++ err = -EIO; ++ } ++ } ++ ++ if (!err && !plink) ++ au_plink_append(inode, a->bdst, a->h_path.dentry); ++ ++out: ++ return err; ++} ++ ++int aufs_link(struct dentry *src_dentry, struct inode *dir, ++ struct dentry *dentry) ++{ ++ int err, rerr; ++ struct au_dtime dt; ++ struct au_link_args *a; ++ struct dentry *wh_dentry, *h_src_dentry; ++ struct inode *inode; ++ struct super_block *sb; ++ struct au_wr_dir_args wr_dir_args = { ++ /* .force_btgt = -1, */ ++ .flags = AuWrDir_ADD_ENTRY ++ }; ++ ++ IMustLock(dir); ++ inode = src_dentry->d_inode; ++ IMustLock(inode); ++ ++ err = -ENOMEM; ++ a = kzalloc(sizeof(*a), GFP_NOFS); ++ if (unlikely(!a)) ++ goto out; ++ ++ a->parent = dentry->d_parent; /* dir inode is locked */ ++ err = aufs_read_and_write_lock2(dentry, src_dentry, ++ AuLock_NOPLM | AuLock_GEN); ++ if (unlikely(err)) ++ goto out_kfree; ++ err = au_d_hashed_positive(src_dentry); ++ if (unlikely(err)) ++ goto out_unlock; ++ err = au_d_may_add(dentry); ++ if (unlikely(err)) ++ goto out_unlock; ++ ++ a->src_parent = dget_parent(src_dentry); ++ wr_dir_args.force_btgt = au_dbstart(src_dentry); ++ ++ di_write_lock_parent(a->parent); ++ wr_dir_args.force_btgt = au_wbr(dentry, wr_dir_args.force_btgt); ++ wh_dentry = lock_hdir_lkup_wh(dentry, &dt, src_dentry, &a->pin, ++ &wr_dir_args); ++ err = PTR_ERR(wh_dentry); ++ if (IS_ERR(wh_dentry)) ++ goto out_parent; ++ ++ err = 0; ++ sb = dentry->d_sb; ++ a->bdst = au_dbstart(dentry); ++ a->h_path.dentry = au_h_dptr(dentry, a->bdst); ++ a->h_path.mnt = au_sbr_mnt(sb, a->bdst); ++ a->bsrc = au_dbstart(src_dentry); ++ if (au_opt_test(au_mntflags(sb), PLINK)) { ++ if (a->bdst < a->bsrc ++ /* && h_src_dentry->d_sb != a->h_path.dentry->d_sb */) ++ err = au_cpup_or_link(src_dentry, a); ++ else { ++ h_src_dentry = au_h_dptr(src_dentry, a->bdst); ++ err = vfsub_link(h_src_dentry, au_pinned_h_dir(&a->pin), ++ &a->h_path); ++ } ++ } else { ++ /* ++ * copyup src_dentry to the branch we process, ++ * and then link(2) to it. ++ */ ++ if (a->bdst < a->bsrc ++ /* && h_src_dentry->d_sb != a->h_path.dentry->d_sb */) { ++ au_unpin(&a->pin); ++ di_write_unlock(a->parent); ++ err = au_cpup_before_link(src_dentry, a); ++ di_write_lock_parent(a->parent); ++ if (!err) ++ err = au_pin(&a->pin, dentry, a->bdst, ++ au_opt_udba(sb), ++ AuPin_DI_LOCKED | AuPin_MNT_WRITE); ++ if (unlikely(err)) ++ goto out_wh; ++ } ++ if (!err) { ++ h_src_dentry = au_h_dptr(src_dentry, a->bdst); ++ err = -ENOENT; ++ if (h_src_dentry && h_src_dentry->d_inode) ++ err = vfsub_link(h_src_dentry, ++ au_pinned_h_dir(&a->pin), ++ &a->h_path); ++ } ++ } ++ if (unlikely(err)) ++ goto out_unpin; ++ ++ if (wh_dentry) { ++ a->h_path.dentry = wh_dentry; ++ err = au_wh_unlink_dentry(au_pinned_h_dir(&a->pin), &a->h_path, ++ dentry); ++ if (unlikely(err)) ++ goto out_revert; ++ } ++ ++ dir->i_version++; ++ if (au_ibstart(dir) == au_dbstart(dentry)) ++ au_cpup_attr_timesizes(dir); ++ inc_nlink(inode); ++ inode->i_ctime = dir->i_ctime; ++ d_instantiate(dentry, au_igrab(inode)); ++ if (d_unhashed(a->h_path.dentry)) ++ /* some filesystem calls d_drop() */ ++ d_drop(dentry); ++ goto out_unpin; /* success */ ++ ++out_revert: ++ rerr = vfsub_unlink(au_pinned_h_dir(&a->pin), &a->h_path, /*force*/0); ++ if (unlikely(rerr)) { ++ AuIOErr("%.*s reverting failed(%d, %d)\n", ++ AuDLNPair(dentry), err, rerr); ++ err = -EIO; ++ } ++ au_dtime_revert(&dt); ++out_unpin: ++ au_unpin(&a->pin); ++out_wh: ++ dput(wh_dentry); ++out_parent: ++ di_write_unlock(a->parent); ++ dput(a->src_parent); ++out_unlock: ++ if (unlikely(err)) { ++ au_update_dbstart(dentry); ++ d_drop(dentry); ++ } ++ aufs_read_and_write_unlock2(dentry, src_dentry); ++out_kfree: ++ kfree(a); ++out: ++ return err; ++} ++ ++int aufs_mkdir(struct inode *dir, struct dentry *dentry, int mode) ++{ ++ int err, rerr; ++ aufs_bindex_t bindex; ++ unsigned char diropq; ++ struct path h_path; ++ struct dentry *wh_dentry, *parent, *opq_dentry; ++ struct mutex *h_mtx; ++ struct super_block *sb; ++ struct { ++ struct au_pin pin; ++ struct au_dtime dt; ++ } *a; /* reduce the stack usage */ ++ struct au_wr_dir_args wr_dir_args = { ++ .force_btgt = -1, ++ .flags = AuWrDir_ADD_ENTRY | AuWrDir_ISDIR ++ }; ++ ++ IMustLock(dir); ++ ++ err = -ENOMEM; ++ a = kmalloc(sizeof(*a), GFP_NOFS); ++ if (unlikely(!a)) ++ goto out; ++ ++ err = aufs_read_lock(dentry, AuLock_DW | AuLock_GEN); ++ if (unlikely(err)) ++ goto out_free; ++ err = au_d_may_add(dentry); ++ if (unlikely(err)) ++ goto out_unlock; ++ ++ parent = dentry->d_parent; /* dir inode is locked */ ++ di_write_lock_parent(parent); ++ wh_dentry = lock_hdir_lkup_wh(dentry, &a->dt, /*src_dentry*/NULL, ++ &a->pin, &wr_dir_args); ++ err = PTR_ERR(wh_dentry); ++ if (IS_ERR(wh_dentry)) ++ goto out_parent; ++ ++ sb = dentry->d_sb; ++ bindex = au_dbstart(dentry); ++ h_path.dentry = au_h_dptr(dentry, bindex); ++ h_path.mnt = au_sbr_mnt(sb, bindex); ++ err = vfsub_mkdir(au_pinned_h_dir(&a->pin), &h_path, mode); ++ if (unlikely(err)) ++ goto out_unpin; ++ ++ /* make the dir opaque */ ++ diropq = 0; ++ h_mtx = &h_path.dentry->d_inode->i_mutex; ++ if (wh_dentry ++ || au_opt_test(au_mntflags(sb), ALWAYS_DIROPQ)) { ++ mutex_lock_nested(h_mtx, AuLsc_I_CHILD); ++ opq_dentry = au_diropq_create(dentry, bindex); ++ mutex_unlock(h_mtx); ++ err = PTR_ERR(opq_dentry); ++ if (IS_ERR(opq_dentry)) ++ goto out_dir; ++ dput(opq_dentry); ++ diropq = 1; ++ } ++ ++ err = epilog(dir, bindex, wh_dentry, dentry); ++ if (!err) { ++ inc_nlink(dir); ++ goto out_unpin; /* success */ ++ } ++ ++ /* revert */ ++ if (diropq) { ++ AuLabel(revert opq); ++ mutex_lock_nested(h_mtx, AuLsc_I_CHILD); ++ rerr = au_diropq_remove(dentry, bindex); ++ mutex_unlock(h_mtx); ++ if (rerr) { ++ AuIOErr("%.*s reverting diropq failed(%d, %d)\n", ++ AuDLNPair(dentry), err, rerr); ++ err = -EIO; ++ } ++ } ++ ++out_dir: ++ AuLabel(revert dir); ++ rerr = vfsub_rmdir(au_pinned_h_dir(&a->pin), &h_path); ++ if (rerr) { ++ AuIOErr("%.*s reverting dir failed(%d, %d)\n", ++ AuDLNPair(dentry), err, rerr); ++ err = -EIO; ++ } ++ au_dtime_revert(&a->dt); ++out_unpin: ++ au_unpin(&a->pin); ++ dput(wh_dentry); ++out_parent: ++ di_write_unlock(parent); ++out_unlock: ++ if (unlikely(err)) { ++ au_update_dbstart(dentry); ++ d_drop(dentry); ++ } ++ aufs_read_unlock(dentry, AuLock_DW); ++out_free: ++ kfree(a); ++out: ++ return err; ++} +diff -urN a/fs/aufs/i_op.c b/fs/aufs/i_op.c +--- a/fs/aufs/i_op.c 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/i_op.c 2011-03-06 23:28:02.616413258 +0000 +@@ -0,0 +1,976 @@ ++/* ++ * Copyright (C) 2005-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * inode operations (except add/del/rename) ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include "aufs.h" ++ ++static int h_permission(struct inode *h_inode, int mask, unsigned int flags, ++ struct vfsmount *h_mnt, int brperm) ++{ ++ int err; ++ const unsigned char write_mask = !!(mask & (MAY_WRITE | MAY_APPEND)); ++ ++ err = -EACCES; ++ if ((write_mask && IS_IMMUTABLE(h_inode)) ++ || ((mask & MAY_EXEC) ++ && S_ISREG(h_inode->i_mode) ++ && ((h_mnt->mnt_flags & MNT_NOEXEC) ++ || !(h_inode->i_mode & S_IXUGO)))) ++ goto out; ++ ++ /* ++ * - skip the lower fs test in the case of write to ro branch. ++ * - nfs dir permission write check is optimized, but a policy for ++ * link/rename requires a real check. ++ */ ++ if ((write_mask && !au_br_writable(brperm)) ++ || (au_test_nfs(h_inode->i_sb) && S_ISDIR(h_inode->i_mode) ++ && write_mask && !(mask & MAY_READ)) ++ || !h_inode->i_op->permission) { ++ /* AuLabel(generic_permission); */ ++ err = generic_permission(h_inode, mask, flags, ++ h_inode->i_op->check_acl); ++ } else { ++ /* AuLabel(h_inode->permission); */ ++ err = h_inode->i_op->permission(h_inode, mask, flags); ++ AuTraceErr(err); ++ } ++ ++ if (!err) ++ err = devcgroup_inode_permission(h_inode, mask); ++ if (!err) ++ err = security_inode_permission(h_inode, mask); ++ ++#if 0 ++ if (!err) { ++ /* todo: do we need to call ima_path_check()? */ ++ struct path h_path = { ++ .dentry = ++ .mnt = h_mnt ++ }; ++ err = ima_path_check(&h_path, ++ mask & (MAY_READ | MAY_WRITE | MAY_EXEC), ++ IMA_COUNT_LEAVE); ++ } ++#endif ++ ++out: ++ return err; ++} ++ ++static int aufs_permission(struct inode *inode, int mask, unsigned int flags) ++{ ++ int err; ++ aufs_bindex_t bindex, bend; ++ const unsigned char isdir = !!S_ISDIR(inode->i_mode), ++ write_mask = !!(mask & (MAY_WRITE | MAY_APPEND)); ++ struct inode *h_inode; ++ struct super_block *sb; ++ struct au_branch *br; ++ ++ /* todo: support rcu-walk? */ ++ if (flags & IPERM_FLAG_RCU) ++ return -ECHILD; ++ ++ sb = inode->i_sb; ++ si_read_lock(sb, AuLock_FLUSH); ++ ii_read_lock_child(inode); ++#if 0 ++ err = au_iigen_test(inode, au_sigen(sb)); ++ if (unlikely(err)) ++ goto out; ++#endif ++ ++ if (!isdir || write_mask) { ++ err = au_busy_or_stale(); ++ h_inode = au_h_iptr(inode, au_ibstart(inode)); ++ if (unlikely(!h_inode ++ || (h_inode->i_mode & S_IFMT) ++ != (inode->i_mode & S_IFMT))) ++ goto out; ++ ++ err = 0; ++ bindex = au_ibstart(inode); ++ br = au_sbr(sb, bindex); ++ err = h_permission(h_inode, mask, flags, br->br_mnt, ++ br->br_perm); ++ if (write_mask ++ && !err ++ && !special_file(h_inode->i_mode)) { ++ /* test whether the upper writable branch exists */ ++ err = -EROFS; ++ for (; bindex >= 0; bindex--) ++ if (!au_br_rdonly(au_sbr(sb, bindex))) { ++ err = 0; ++ break; ++ } ++ } ++ goto out; ++ } ++ ++ /* non-write to dir */ ++ err = 0; ++ bend = au_ibend(inode); ++ for (bindex = au_ibstart(inode); !err && bindex <= bend; bindex++) { ++ h_inode = au_h_iptr(inode, bindex); ++ if (h_inode) { ++ err = au_busy_or_stale(); ++ if (unlikely(!S_ISDIR(h_inode->i_mode))) ++ break; ++ ++ br = au_sbr(sb, bindex); ++ err = h_permission(h_inode, mask, flags, br->br_mnt, ++ br->br_perm); ++ } ++ } ++ ++out: ++ ii_read_unlock(inode); ++ si_read_unlock(sb); ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++static struct dentry *aufs_lookup(struct inode *dir, struct dentry *dentry, ++ struct nameidata *nd) ++{ ++ struct dentry *ret, *parent; ++ struct inode *inode; ++ struct super_block *sb; ++ int err, npositive; ++ ++ IMustLock(dir); ++ ++ sb = dir->i_sb; ++ err = si_read_lock(sb, AuLock_FLUSH | AuLock_NOPLM); ++ ret = ERR_PTR(err); ++ if (unlikely(err)) ++ goto out; ++ ++ ret = ERR_PTR(-ENAMETOOLONG); ++ if (unlikely(dentry->d_name.len > AUFS_MAX_NAMELEN)) ++ goto out_si; ++ err = au_di_init(dentry); ++ ret = ERR_PTR(err); ++ if (unlikely(err)) ++ goto out_si; ++ ++ npositive = 0; /* suppress a warning */ ++ parent = dentry->d_parent; /* dir inode is locked */ ++ di_read_lock_parent(parent, AuLock_IR); ++ err = au_alive_dir(parent); ++ if (!err) ++ err = au_digen_test(parent, au_sigen(sb)); ++ if (!err) { ++ npositive = au_lkup_dentry(dentry, au_dbstart(parent), ++ /*type*/0, nd); ++ err = npositive; ++ } ++ di_read_unlock(parent, AuLock_IR); ++ ret = ERR_PTR(err); ++ if (unlikely(err < 0)) ++ goto out_unlock; ++ ++ inode = NULL; ++ if (npositive) { ++ inode = au_new_inode(dentry, /*must_new*/0); ++ ret = (void *)inode; ++ } ++ if (IS_ERR(inode)) ++ goto out_unlock; ++ ++ ret = d_splice_alias(inode, dentry); ++ if (unlikely(IS_ERR(ret) && inode)) { ++ ii_write_unlock(inode); ++ iput(inode); ++ } ++ ++out_unlock: ++ di_write_unlock(dentry); ++out_si: ++ si_read_unlock(sb); ++out: ++ return ret; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++static int au_wr_dir_cpup(struct dentry *dentry, struct dentry *parent, ++ const unsigned char add_entry, aufs_bindex_t bcpup, ++ aufs_bindex_t bstart) ++{ ++ int err; ++ struct dentry *h_parent; ++ struct inode *h_dir; ++ ++ if (add_entry) ++ IMustLock(parent->d_inode); ++ else ++ di_write_lock_parent(parent); ++ ++ err = 0; ++ if (!au_h_dptr(parent, bcpup)) { ++ if (bstart < bcpup) ++ err = au_cpdown_dirs(dentry, bcpup); ++ else ++ err = au_cpup_dirs(dentry, bcpup); ++ } ++ if (!err && add_entry) { ++ h_parent = au_h_dptr(parent, bcpup); ++ h_dir = h_parent->d_inode; ++ mutex_lock_nested(&h_dir->i_mutex, AuLsc_I_PARENT); ++ err = au_lkup_neg(dentry, bcpup); ++ /* todo: no unlock here */ ++ mutex_unlock(&h_dir->i_mutex); ++ ++ AuDbg("bcpup %d\n", bcpup); ++ if (!err) { ++ if (!dentry->d_inode) ++ au_set_h_dptr(dentry, bstart, NULL); ++ au_update_dbrange(dentry, /*do_put_zero*/0); ++ } ++ } ++ ++ if (!add_entry) ++ di_write_unlock(parent); ++ if (!err) ++ err = bcpup; /* success */ ++ ++ AuTraceErr(err); ++ return err; ++} ++ ++/* ++ * decide the branch and the parent dir where we will create a new entry. ++ * returns new bindex or an error. ++ * copyup the parent dir if needed. ++ */ ++int au_wr_dir(struct dentry *dentry, struct dentry *src_dentry, ++ struct au_wr_dir_args *args) ++{ ++ int err; ++ aufs_bindex_t bcpup, bstart, src_bstart; ++ const unsigned char add_entry = !!au_ftest_wrdir(args->flags, ++ ADD_ENTRY); ++ struct super_block *sb; ++ struct dentry *parent; ++ struct au_sbinfo *sbinfo; ++ ++ sb = dentry->d_sb; ++ sbinfo = au_sbi(sb); ++ parent = dget_parent(dentry); ++ bstart = au_dbstart(dentry); ++ bcpup = bstart; ++ if (args->force_btgt < 0) { ++ if (src_dentry) { ++ src_bstart = au_dbstart(src_dentry); ++ if (src_bstart < bstart) ++ bcpup = src_bstart; ++ } else if (add_entry) { ++ err = AuWbrCreate(sbinfo, dentry, ++ au_ftest_wrdir(args->flags, ISDIR)); ++ bcpup = err; ++ } ++ ++ if (bcpup < 0 || au_test_ro(sb, bcpup, dentry->d_inode)) { ++ if (add_entry) ++ err = AuWbrCopyup(sbinfo, dentry); ++ else { ++ if (!IS_ROOT(dentry)) { ++ di_read_lock_parent(parent, !AuLock_IR); ++ err = AuWbrCopyup(sbinfo, dentry); ++ di_read_unlock(parent, !AuLock_IR); ++ } else ++ err = AuWbrCopyup(sbinfo, dentry); ++ } ++ bcpup = err; ++ if (unlikely(err < 0)) ++ goto out; ++ } ++ } else { ++ bcpup = args->force_btgt; ++ AuDebugOn(au_test_ro(sb, bcpup, dentry->d_inode)); ++ } ++ ++ AuDbg("bstart %d, bcpup %d\n", bstart, bcpup); ++ err = bcpup; ++ if (bcpup == bstart) ++ goto out; /* success */ ++ ++ /* copyup the new parent into the branch we process */ ++ err = au_wr_dir_cpup(dentry, parent, add_entry, bcpup, bstart); ++ if (err >= 0) { ++ if (!dentry->d_inode) { ++ au_set_h_dptr(dentry, bstart, NULL); ++ au_set_dbstart(dentry, bcpup); ++ au_set_dbend(dentry, bcpup); ++ } ++ AuDebugOn(add_entry && !au_h_dptr(dentry, bcpup)); ++ } ++ ++out: ++ dput(parent); ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++struct dentry *au_pinned_h_parent(struct au_pin *pin) ++{ ++ if (pin && pin->parent) ++ return au_h_dptr(pin->parent, pin->bindex); ++ return NULL; ++} ++ ++void au_unpin(struct au_pin *p) ++{ ++ if (p->h_mnt && au_ftest_pin(p->flags, MNT_WRITE)) ++ mnt_drop_write(p->h_mnt); ++ if (!p->hdir) ++ return; ++ ++ au_hn_imtx_unlock(p->hdir); ++ if (!au_ftest_pin(p->flags, DI_LOCKED)) ++ di_read_unlock(p->parent, AuLock_IR); ++ iput(p->hdir->hi_inode); ++ dput(p->parent); ++ p->parent = NULL; ++ p->hdir = NULL; ++ p->h_mnt = NULL; ++} ++ ++int au_do_pin(struct au_pin *p) ++{ ++ int err; ++ struct super_block *sb; ++ struct dentry *h_dentry, *h_parent; ++ struct au_branch *br; ++ struct inode *h_dir; ++ ++ err = 0; ++ sb = p->dentry->d_sb; ++ br = au_sbr(sb, p->bindex); ++ if (IS_ROOT(p->dentry)) { ++ if (au_ftest_pin(p->flags, MNT_WRITE)) { ++ p->h_mnt = br->br_mnt; ++ err = mnt_want_write(p->h_mnt); ++ if (unlikely(err)) { ++ au_fclr_pin(p->flags, MNT_WRITE); ++ goto out_err; ++ } ++ } ++ goto out; ++ } ++ ++ h_dentry = NULL; ++ if (p->bindex <= au_dbend(p->dentry)) ++ h_dentry = au_h_dptr(p->dentry, p->bindex); ++ ++ p->parent = dget_parent(p->dentry); ++ if (!au_ftest_pin(p->flags, DI_LOCKED)) ++ di_read_lock(p->parent, AuLock_IR, p->lsc_di); ++ ++ h_dir = NULL; ++ h_parent = au_h_dptr(p->parent, p->bindex); ++ p->hdir = au_hi(p->parent->d_inode, p->bindex); ++ if (p->hdir) ++ h_dir = p->hdir->hi_inode; ++ ++ /* ++ * udba case, or ++ * if DI_LOCKED is not set, then p->parent may be different ++ * and h_parent can be NULL. ++ */ ++ if (unlikely(!p->hdir || !h_dir || !h_parent)) { ++ err = -EBUSY; ++ if (!au_ftest_pin(p->flags, DI_LOCKED)) ++ di_read_unlock(p->parent, AuLock_IR); ++ dput(p->parent); ++ p->parent = NULL; ++ goto out_err; ++ } ++ ++ au_igrab(h_dir); ++ au_hn_imtx_lock_nested(p->hdir, p->lsc_hi); ++ ++ if (unlikely(p->hdir->hi_inode != h_parent->d_inode)) { ++ err = -EBUSY; ++ goto out_unpin; ++ } ++ if (h_dentry) { ++ err = au_h_verify(h_dentry, p->udba, h_dir, h_parent, br); ++ if (unlikely(err)) { ++ au_fclr_pin(p->flags, MNT_WRITE); ++ goto out_unpin; ++ } ++ } ++ ++ if (au_ftest_pin(p->flags, MNT_WRITE)) { ++ p->h_mnt = br->br_mnt; ++ err = mnt_want_write(p->h_mnt); ++ if (unlikely(err)) { ++ au_fclr_pin(p->flags, MNT_WRITE); ++ goto out_unpin; ++ } ++ } ++ goto out; /* success */ ++ ++out_unpin: ++ au_unpin(p); ++out_err: ++ pr_err("err %d\n", err); ++ err = au_busy_or_stale(); ++out: ++ return err; ++} ++ ++void au_pin_init(struct au_pin *p, struct dentry *dentry, ++ aufs_bindex_t bindex, int lsc_di, int lsc_hi, ++ unsigned int udba, unsigned char flags) ++{ ++ p->dentry = dentry; ++ p->udba = udba; ++ p->lsc_di = lsc_di; ++ p->lsc_hi = lsc_hi; ++ p->flags = flags; ++ p->bindex = bindex; ++ ++ p->parent = NULL; ++ p->hdir = NULL; ++ p->h_mnt = NULL; ++} ++ ++int au_pin(struct au_pin *pin, struct dentry *dentry, aufs_bindex_t bindex, ++ unsigned int udba, unsigned char flags) ++{ ++ au_pin_init(pin, dentry, bindex, AuLsc_DI_PARENT, AuLsc_I_PARENT2, ++ udba, flags); ++ return au_do_pin(pin); ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* ++ * ->setattr() and ->getattr() are called in various cases. ++ * chmod, stat: dentry is revalidated. ++ * fchmod, fstat: file and dentry are not revalidated, additionally they may be ++ * unhashed. ++ * for ->setattr(), ia->ia_file is passed from ftruncate only. ++ */ ++/* todo: consolidate with do_refresh() and simple_reval_dpath() */ ++static int au_reval_for_attr(struct dentry *dentry, unsigned int sigen) ++{ ++ int err; ++ struct inode *inode; ++ struct dentry *parent; ++ ++ err = 0; ++ inode = dentry->d_inode; ++ if (au_digen_test(dentry, sigen)) { ++ parent = dget_parent(dentry); ++ di_read_lock_parent(parent, AuLock_IR); ++ err = au_refresh_dentry(dentry, parent); ++ di_read_unlock(parent, AuLock_IR); ++ dput(parent); ++ } ++ ++ AuTraceErr(err); ++ return err; ++} ++ ++#define AuIcpup_DID_CPUP 1 ++#define au_ftest_icpup(flags, name) ((flags) & AuIcpup_##name) ++#define au_fset_icpup(flags, name) \ ++ do { (flags) |= AuIcpup_##name; } while (0) ++#define au_fclr_icpup(flags, name) \ ++ do { (flags) &= ~AuIcpup_##name; } while (0) ++ ++struct au_icpup_args { ++ unsigned char flags; ++ unsigned char pin_flags; ++ aufs_bindex_t btgt; ++ unsigned int udba; ++ struct au_pin pin; ++ struct path h_path; ++ struct inode *h_inode; ++}; ++ ++static int au_pin_and_icpup(struct dentry *dentry, struct iattr *ia, ++ struct au_icpup_args *a) ++{ ++ int err; ++ loff_t sz; ++ aufs_bindex_t bstart, ibstart; ++ struct dentry *hi_wh, *parent; ++ struct inode *inode; ++ struct file *h_file; ++ struct au_wr_dir_args wr_dir_args = { ++ .force_btgt = -1, ++ .flags = 0 ++ }; ++ ++ bstart = au_dbstart(dentry); ++ inode = dentry->d_inode; ++ if (S_ISDIR(inode->i_mode)) ++ au_fset_wrdir(wr_dir_args.flags, ISDIR); ++ /* plink or hi_wh() case */ ++ ibstart = au_ibstart(inode); ++ if (bstart != ibstart && !au_test_ro(inode->i_sb, ibstart, inode)) ++ wr_dir_args.force_btgt = ibstart; ++ err = au_wr_dir(dentry, /*src_dentry*/NULL, &wr_dir_args); ++ if (unlikely(err < 0)) ++ goto out; ++ a->btgt = err; ++ if (err != bstart) ++ au_fset_icpup(a->flags, DID_CPUP); ++ ++ err = 0; ++ a->pin_flags = AuPin_MNT_WRITE; ++ parent = NULL; ++ if (!IS_ROOT(dentry)) { ++ au_fset_pin(a->pin_flags, DI_LOCKED); ++ parent = dget_parent(dentry); ++ di_write_lock_parent(parent); ++ } ++ ++ err = au_pin(&a->pin, dentry, a->btgt, a->udba, a->pin_flags); ++ if (unlikely(err)) ++ goto out_parent; ++ ++ a->h_path.dentry = au_h_dptr(dentry, bstart); ++ a->h_inode = a->h_path.dentry->d_inode; ++ mutex_lock_nested(&a->h_inode->i_mutex, AuLsc_I_CHILD); ++ sz = -1; ++ if ((ia->ia_valid & ATTR_SIZE) && ia->ia_size < i_size_read(a->h_inode)) ++ sz = ia->ia_size; ++ ++ h_file = NULL; ++ hi_wh = NULL; ++ if (au_ftest_icpup(a->flags, DID_CPUP) && d_unlinked(dentry)) { ++ hi_wh = au_hi_wh(inode, a->btgt); ++ if (!hi_wh) { ++ err = au_sio_cpup_wh(dentry, a->btgt, sz, /*file*/NULL); ++ if (unlikely(err)) ++ goto out_unlock; ++ hi_wh = au_hi_wh(inode, a->btgt); ++ /* todo: revalidate hi_wh? */ ++ } ++ } ++ ++ if (parent) { ++ au_pin_set_parent_lflag(&a->pin, /*lflag*/0); ++ di_downgrade_lock(parent, AuLock_IR); ++ dput(parent); ++ parent = NULL; ++ } ++ if (!au_ftest_icpup(a->flags, DID_CPUP)) ++ goto out; /* success */ ++ ++ if (!d_unhashed(dentry)) { ++ h_file = au_h_open_pre(dentry, bstart); ++ if (IS_ERR(h_file)) { ++ err = PTR_ERR(h_file); ++ h_file = NULL; ++ } else ++ err = au_sio_cpup_simple(dentry, a->btgt, sz, ++ AuCpup_DTIME); ++ if (!err) ++ a->h_path.dentry = au_h_dptr(dentry, a->btgt); ++ } else if (!hi_wh) ++ a->h_path.dentry = au_h_dptr(dentry, a->btgt); ++ else ++ a->h_path.dentry = hi_wh; /* do not dget here */ ++ ++out_unlock: ++ mutex_unlock(&a->h_inode->i_mutex); ++ au_h_open_post(dentry, bstart, h_file); ++ a->h_inode = a->h_path.dentry->d_inode; ++ if (!err) { ++ mutex_lock_nested(&a->h_inode->i_mutex, AuLsc_I_CHILD); ++ goto out; /* success */ ++ } ++ ++ au_unpin(&a->pin); ++out_parent: ++ if (parent) { ++ di_write_unlock(parent); ++ dput(parent); ++ } ++out: ++ return err; ++} ++ ++static int aufs_setattr(struct dentry *dentry, struct iattr *ia) ++{ ++ int err; ++ struct inode *inode; ++ struct super_block *sb; ++ struct file *file; ++ struct au_icpup_args *a; ++ ++ inode = dentry->d_inode; ++ IMustLock(inode); ++ ++ err = -ENOMEM; ++ a = kzalloc(sizeof(*a), GFP_NOFS); ++ if (unlikely(!a)) ++ goto out; ++ ++ if (ia->ia_valid & (ATTR_KILL_SUID | ATTR_KILL_SGID)) ++ ia->ia_valid &= ~ATTR_MODE; ++ ++ file = NULL; ++ sb = dentry->d_sb; ++ err = si_read_lock(sb, AuLock_FLUSH | AuLock_NOPLM); ++ if (unlikely(err)) ++ goto out_kfree; ++ ++ if (ia->ia_valid & ATTR_FILE) { ++ /* currently ftruncate(2) only */ ++ AuDebugOn(!S_ISREG(inode->i_mode)); ++ file = ia->ia_file; ++ err = au_reval_and_lock_fdi(file, au_reopen_nondir, /*wlock*/1); ++ if (unlikely(err)) ++ goto out_si; ++ ia->ia_file = au_hf_top(file); ++ a->udba = AuOpt_UDBA_NONE; ++ } else { ++ /* fchmod() doesn't pass ia_file */ ++ a->udba = au_opt_udba(sb); ++ di_write_lock_child(dentry); ++ /* no d_unlinked(), to set UDBA_NONE for root */ ++ if (d_unhashed(dentry)) ++ a->udba = AuOpt_UDBA_NONE; ++ if (a->udba != AuOpt_UDBA_NONE) { ++ AuDebugOn(IS_ROOT(dentry)); ++ err = au_reval_for_attr(dentry, au_sigen(sb)); ++ if (unlikely(err)) ++ goto out_dentry; ++ } ++ } ++ ++ err = au_pin_and_icpup(dentry, ia, a); ++ if (unlikely(err < 0)) ++ goto out_dentry; ++ if (au_ftest_icpup(a->flags, DID_CPUP)) { ++ ia->ia_file = NULL; ++ ia->ia_valid &= ~ATTR_FILE; ++ } ++ ++ a->h_path.mnt = au_sbr_mnt(sb, a->btgt); ++ if ((ia->ia_valid & (ATTR_MODE | ATTR_CTIME)) ++ == (ATTR_MODE | ATTR_CTIME)) { ++ err = security_path_chmod(a->h_path.dentry, a->h_path.mnt, ++ ia->ia_mode); ++ if (unlikely(err)) ++ goto out_unlock; ++ } else if ((ia->ia_valid & (ATTR_UID | ATTR_GID)) ++ && (ia->ia_valid & ATTR_CTIME)) { ++ err = security_path_chown(&a->h_path, ia->ia_uid, ia->ia_gid); ++ if (unlikely(err)) ++ goto out_unlock; ++ } ++ ++ if (ia->ia_valid & ATTR_SIZE) { ++ struct file *f; ++ ++ if (ia->ia_size < i_size_read(inode)) ++ /* unmap only */ ++ truncate_setsize(inode, ia->ia_size); ++ ++ f = NULL; ++ if (ia->ia_valid & ATTR_FILE) ++ f = ia->ia_file; ++ mutex_unlock(&a->h_inode->i_mutex); ++ err = vfsub_trunc(&a->h_path, ia->ia_size, ia->ia_valid, f); ++ mutex_lock_nested(&a->h_inode->i_mutex, AuLsc_I_CHILD); ++ } else ++ err = vfsub_notify_change(&a->h_path, ia); ++ if (!err) ++ au_cpup_attr_changeable(inode); ++ ++out_unlock: ++ mutex_unlock(&a->h_inode->i_mutex); ++ au_unpin(&a->pin); ++ if (unlikely(err)) ++ au_update_dbstart(dentry); ++out_dentry: ++ di_write_unlock(dentry); ++ if (file) { ++ fi_write_unlock(file); ++ ia->ia_file = file; ++ ia->ia_valid |= ATTR_FILE; ++ } ++out_si: ++ si_read_unlock(sb); ++out_kfree: ++ kfree(a); ++out: ++ AuTraceErr(err); ++ return err; ++} ++ ++static void au_refresh_iattr(struct inode *inode, struct kstat *st, ++ unsigned int nlink) ++{ ++ inode->i_mode = st->mode; ++ inode->i_uid = st->uid; ++ inode->i_gid = st->gid; ++ inode->i_atime = st->atime; ++ inode->i_mtime = st->mtime; ++ inode->i_ctime = st->ctime; ++ ++ au_cpup_attr_nlink(inode, /*force*/0); ++ if (S_ISDIR(inode->i_mode)) { ++ inode->i_nlink -= nlink; ++ inode->i_nlink += st->nlink; ++ } ++ ++ spin_lock(&inode->i_lock); ++ inode->i_blocks = st->blocks; ++ i_size_write(inode, st->size); ++ spin_unlock(&inode->i_lock); ++} ++ ++static int aufs_getattr(struct vfsmount *mnt __maybe_unused, ++ struct dentry *dentry, struct kstat *st) ++{ ++ int err; ++ unsigned int mnt_flags; ++ aufs_bindex_t bindex; ++ unsigned char udba_none, positive; ++ struct super_block *sb, *h_sb; ++ struct inode *inode; ++ struct vfsmount *h_mnt; ++ struct dentry *h_dentry; ++ ++ sb = dentry->d_sb; ++ inode = dentry->d_inode; ++ err = si_read_lock(sb, AuLock_FLUSH | AuLock_NOPLM); ++ if (unlikely(err)) ++ goto out; ++ mnt_flags = au_mntflags(sb); ++ udba_none = !!au_opt_test(mnt_flags, UDBA_NONE); ++ ++ /* support fstat(2) */ ++ if (!d_unlinked(dentry) && !udba_none) { ++ unsigned int sigen = au_sigen(sb); ++ err = au_digen_test(dentry, sigen); ++ if (!err) { ++ di_read_lock_child(dentry, AuLock_IR); ++ err = au_dbrange_test(dentry); ++ if (unlikely(err)) ++ goto out_unlock; ++ } else { ++ AuDebugOn(IS_ROOT(dentry)); ++ di_write_lock_child(dentry); ++ err = au_dbrange_test(dentry); ++ if (!err) ++ err = au_reval_for_attr(dentry, sigen); ++ di_downgrade_lock(dentry, AuLock_IR); ++ if (unlikely(err)) ++ goto out_unlock; ++ } ++ } else ++ di_read_lock_child(dentry, AuLock_IR); ++ ++ bindex = au_ibstart(inode); ++ h_mnt = au_sbr_mnt(sb, bindex); ++ h_sb = h_mnt->mnt_sb; ++ if (!au_test_fs_bad_iattr(h_sb) && udba_none) ++ goto out_fill; /* success */ ++ ++ h_dentry = NULL; ++ if (au_dbstart(dentry) == bindex) ++ h_dentry = dget(au_h_dptr(dentry, bindex)); ++ else if (au_opt_test(mnt_flags, PLINK) && au_plink_test(inode)) { ++ h_dentry = au_plink_lkup(inode, bindex); ++ if (IS_ERR(h_dentry)) ++ goto out_fill; /* pretending success */ ++ } ++ /* illegally overlapped or something */ ++ if (unlikely(!h_dentry)) ++ goto out_fill; /* pretending success */ ++ ++ positive = !!h_dentry->d_inode; ++ if (positive) ++ err = vfs_getattr(h_mnt, h_dentry, st); ++ dput(h_dentry); ++ if (!err) { ++ if (positive) ++ au_refresh_iattr(inode, st, h_dentry->d_inode->i_nlink); ++ goto out_fill; /* success */ ++ } ++ AuTraceErr(err); ++ goto out_unlock; ++ ++out_fill: ++ generic_fillattr(inode, st); ++out_unlock: ++ di_read_unlock(dentry, AuLock_IR); ++ si_read_unlock(sb); ++out: ++ AuTraceErr(err); ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++static int h_readlink(struct dentry *dentry, int bindex, char __user *buf, ++ int bufsiz) ++{ ++ int err; ++ struct super_block *sb; ++ struct dentry *h_dentry; ++ ++ err = -EINVAL; ++ h_dentry = au_h_dptr(dentry, bindex); ++ if (unlikely(!h_dentry->d_inode->i_op->readlink)) ++ goto out; ++ ++ err = security_inode_readlink(h_dentry); ++ if (unlikely(err)) ++ goto out; ++ ++ sb = dentry->d_sb; ++ if (!au_test_ro(sb, bindex, dentry->d_inode)) { ++ vfsub_touch_atime(au_sbr_mnt(sb, bindex), h_dentry); ++ fsstack_copy_attr_atime(dentry->d_inode, h_dentry->d_inode); ++ } ++ err = h_dentry->d_inode->i_op->readlink(h_dentry, buf, bufsiz); ++ ++out: ++ return err; ++} ++ ++static int aufs_readlink(struct dentry *dentry, char __user *buf, int bufsiz) ++{ ++ int err; ++ ++ err = aufs_read_lock(dentry, AuLock_IR | AuLock_GEN); ++ if (unlikely(err)) ++ goto out; ++ err = au_d_hashed_positive(dentry); ++ if (!err) ++ err = h_readlink(dentry, au_dbstart(dentry), buf, bufsiz); ++ aufs_read_unlock(dentry, AuLock_IR); ++ ++out: ++ return err; ++} ++ ++static void *aufs_follow_link(struct dentry *dentry, struct nameidata *nd) ++{ ++ int err; ++ mm_segment_t old_fs; ++ union { ++ char *k; ++ char __user *u; ++ } buf; ++ ++ err = -ENOMEM; ++ buf.k = __getname_gfp(GFP_NOFS); ++ if (unlikely(!buf.k)) ++ goto out; ++ ++ err = aufs_read_lock(dentry, AuLock_IR | AuLock_GEN); ++ if (unlikely(err)) ++ goto out_name; ++ ++ err = au_d_hashed_positive(dentry); ++ if (!err) { ++ old_fs = get_fs(); ++ set_fs(KERNEL_DS); ++ err = h_readlink(dentry, au_dbstart(dentry), buf.u, PATH_MAX); ++ set_fs(old_fs); ++ } ++ aufs_read_unlock(dentry, AuLock_IR); ++ ++ if (err >= 0) { ++ buf.k[err] = 0; ++ /* will be freed by put_link */ ++ nd_set_link(nd, buf.k); ++ return NULL; /* success */ ++ } ++ ++out_name: ++ __putname(buf.k); ++out: ++ path_put(&nd->path); ++ AuTraceErr(err); ++ return ERR_PTR(err); ++} ++ ++static void aufs_put_link(struct dentry *dentry __maybe_unused, ++ struct nameidata *nd, void *cookie __maybe_unused) ++{ ++ __putname(nd_get_link(nd)); ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++static void aufs_truncate_range(struct inode *inode __maybe_unused, ++ loff_t start __maybe_unused, ++ loff_t end __maybe_unused) ++{ ++ AuUnsupport(); ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++struct inode_operations aufs_symlink_iop = { ++ .permission = aufs_permission, ++ .setattr = aufs_setattr, ++ .getattr = aufs_getattr, ++ .readlink = aufs_readlink, ++ .follow_link = aufs_follow_link, ++ .put_link = aufs_put_link ++}; ++ ++struct inode_operations aufs_dir_iop = { ++ .create = aufs_create, ++ .lookup = aufs_lookup, ++ .link = aufs_link, ++ .unlink = aufs_unlink, ++ .symlink = aufs_symlink, ++ .mkdir = aufs_mkdir, ++ .rmdir = aufs_rmdir, ++ .mknod = aufs_mknod, ++ .rename = aufs_rename, ++ ++ .permission = aufs_permission, ++ .setattr = aufs_setattr, ++ .getattr = aufs_getattr ++}; ++ ++struct inode_operations aufs_iop = { ++ .permission = aufs_permission, ++ .setattr = aufs_setattr, ++ .getattr = aufs_getattr, ++ .truncate_range = aufs_truncate_range ++}; +diff -urN a/fs/aufs/i_op_del.c b/fs/aufs/i_op_del.c +--- a/fs/aufs/i_op_del.c 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/i_op_del.c 2011-03-06 23:28:02.616413258 +0000 +@@ -0,0 +1,481 @@ ++/* ++ * Copyright (C) 2005-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * inode operations (del entry) ++ */ ++ ++#include "aufs.h" ++ ++/* ++ * decide if a new whiteout for @dentry is necessary or not. ++ * when it is necessary, prepare the parent dir for the upper branch whose ++ * branch index is @bcpup for creation. the actual creation of the whiteout will ++ * be done by caller. ++ * return value: ++ * 0: wh is unnecessary ++ * plus: wh is necessary ++ * minus: error ++ */ ++int au_wr_dir_need_wh(struct dentry *dentry, int isdir, aufs_bindex_t *bcpup) ++{ ++ int need_wh, err; ++ aufs_bindex_t bstart; ++ struct super_block *sb; ++ ++ sb = dentry->d_sb; ++ bstart = au_dbstart(dentry); ++ if (*bcpup < 0) { ++ *bcpup = bstart; ++ if (au_test_ro(sb, bstart, dentry->d_inode)) { ++ err = AuWbrCopyup(au_sbi(sb), dentry); ++ *bcpup = err; ++ if (unlikely(err < 0)) ++ goto out; ++ } ++ } else ++ AuDebugOn(bstart < *bcpup ++ || au_test_ro(sb, *bcpup, dentry->d_inode)); ++ AuDbg("bcpup %d, bstart %d\n", *bcpup, bstart); ++ ++ if (*bcpup != bstart) { ++ err = au_cpup_dirs(dentry, *bcpup); ++ if (unlikely(err)) ++ goto out; ++ need_wh = 1; ++ } else { ++ struct au_dinfo *dinfo, *tmp; ++ ++ need_wh = -ENOMEM; ++ dinfo = au_di(dentry); ++ tmp = au_di_alloc(sb, AuLsc_DI_TMP); ++ if (tmp) { ++ au_di_cp(tmp, dinfo); ++ au_di_swap(tmp, dinfo); ++ /* returns the number of positive dentries */ ++ need_wh = au_lkup_dentry(dentry, bstart + 1, /*type*/0, ++ /*nd*/NULL); ++ au_di_swap(tmp, dinfo); ++ au_rw_write_unlock(&tmp->di_rwsem); ++ au_di_free(tmp); ++ } ++ } ++ AuDbg("need_wh %d\n", need_wh); ++ err = need_wh; ++ ++out: ++ return err; ++} ++ ++/* ++ * simple tests for the del-entry operations. ++ * following the checks in vfs, plus the parent-child relationship. ++ */ ++int au_may_del(struct dentry *dentry, aufs_bindex_t bindex, ++ struct dentry *h_parent, int isdir) ++{ ++ int err; ++ umode_t h_mode; ++ struct dentry *h_dentry, *h_latest; ++ struct inode *h_inode; ++ ++ h_dentry = au_h_dptr(dentry, bindex); ++ h_inode = h_dentry->d_inode; ++ if (dentry->d_inode) { ++ err = -ENOENT; ++ if (unlikely(!h_inode || !h_inode->i_nlink)) ++ goto out; ++ ++ h_mode = h_inode->i_mode; ++ if (!isdir) { ++ err = -EISDIR; ++ if (unlikely(S_ISDIR(h_mode))) ++ goto out; ++ } else if (unlikely(!S_ISDIR(h_mode))) { ++ err = -ENOTDIR; ++ goto out; ++ } ++ } else { ++ /* rename(2) case */ ++ err = -EIO; ++ if (unlikely(h_inode)) ++ goto out; ++ } ++ ++ err = -ENOENT; ++ /* expected parent dir is locked */ ++ if (unlikely(h_parent != h_dentry->d_parent)) ++ goto out; ++ err = 0; ++ ++ /* ++ * rmdir a dir may break the consistency on some filesystem. ++ * let's try heavy test. ++ */ ++ err = -EACCES; ++ if (unlikely(au_test_h_perm(h_parent->d_inode, MAY_EXEC | MAY_WRITE))) ++ goto out; ++ ++ h_latest = au_sio_lkup_one(&dentry->d_name, h_parent, ++ au_sbr(dentry->d_sb, bindex)); ++ err = -EIO; ++ if (IS_ERR(h_latest)) ++ goto out; ++ if (h_latest == h_dentry) ++ err = 0; ++ dput(h_latest); ++ ++out: ++ return err; ++} ++ ++/* ++ * decide the branch where we operate for @dentry. the branch index will be set ++ * @rbcpup. after diciding it, 'pin' it and store the timestamps of the parent ++ * dir for reverting. ++ * when a new whiteout is necessary, create it. ++ */ ++static struct dentry* ++lock_hdir_create_wh(struct dentry *dentry, int isdir, aufs_bindex_t *rbcpup, ++ struct au_dtime *dt, struct au_pin *pin) ++{ ++ struct dentry *wh_dentry; ++ struct super_block *sb; ++ struct path h_path; ++ int err, need_wh; ++ unsigned int udba; ++ aufs_bindex_t bcpup; ++ ++ need_wh = au_wr_dir_need_wh(dentry, isdir, rbcpup); ++ wh_dentry = ERR_PTR(need_wh); ++ if (unlikely(need_wh < 0)) ++ goto out; ++ ++ sb = dentry->d_sb; ++ udba = au_opt_udba(sb); ++ bcpup = *rbcpup; ++ err = au_pin(pin, dentry, bcpup, udba, ++ AuPin_DI_LOCKED | AuPin_MNT_WRITE); ++ wh_dentry = ERR_PTR(err); ++ if (unlikely(err)) ++ goto out; ++ ++ h_path.dentry = au_pinned_h_parent(pin); ++ if (udba != AuOpt_UDBA_NONE ++ && au_dbstart(dentry) == bcpup) { ++ err = au_may_del(dentry, bcpup, h_path.dentry, isdir); ++ wh_dentry = ERR_PTR(err); ++ if (unlikely(err)) ++ goto out_unpin; ++ } ++ ++ h_path.mnt = au_sbr_mnt(sb, bcpup); ++ au_dtime_store(dt, au_pinned_parent(pin), &h_path); ++ wh_dentry = NULL; ++ if (!need_wh) ++ goto out; /* success, no need to create whiteout */ ++ ++ wh_dentry = au_wh_create(dentry, bcpup, h_path.dentry); ++ if (IS_ERR(wh_dentry)) ++ goto out_unpin; ++ ++ /* returns with the parent is locked and wh_dentry is dget-ed */ ++ goto out; /* success */ ++ ++out_unpin: ++ au_unpin(pin); ++out: ++ return wh_dentry; ++} ++ ++/* ++ * when removing a dir, rename it to a unique temporary whiteout-ed name first ++ * in order to be revertible and save time for removing many child whiteouts ++ * under the dir. ++ * returns 1 when there are too many child whiteout and caller should remove ++ * them asynchronously. returns 0 when the number of children is enough small to ++ * remove now or the branch fs is a remote fs. ++ * otherwise return an error. ++ */ ++static int renwh_and_rmdir(struct dentry *dentry, aufs_bindex_t bindex, ++ struct au_nhash *whlist, struct inode *dir) ++{ ++ int rmdir_later, err, dirwh; ++ struct dentry *h_dentry; ++ struct super_block *sb; ++ ++ sb = dentry->d_sb; ++ SiMustAnyLock(sb); ++ h_dentry = au_h_dptr(dentry, bindex); ++ err = au_whtmp_ren(h_dentry, au_sbr(sb, bindex)); ++ if (unlikely(err)) ++ goto out; ++ ++ /* stop monitoring */ ++ au_hn_free(au_hi(dentry->d_inode, bindex)); ++ ++ if (!au_test_fs_remote(h_dentry->d_sb)) { ++ dirwh = au_sbi(sb)->si_dirwh; ++ rmdir_later = (dirwh <= 1); ++ if (!rmdir_later) ++ rmdir_later = au_nhash_test_longer_wh(whlist, bindex, ++ dirwh); ++ if (rmdir_later) ++ return rmdir_later; ++ } ++ ++ err = au_whtmp_rmdir(dir, bindex, h_dentry, whlist); ++ if (unlikely(err)) { ++ AuIOErr("rmdir %.*s, b%d failed, %d. ignored\n", ++ AuDLNPair(h_dentry), bindex, err); ++ err = 0; ++ } ++ ++out: ++ AuTraceErr(err); ++ return err; ++} ++ ++/* ++ * final procedure for deleting a entry. ++ * maintain dentry and iattr. ++ */ ++static void epilog(struct inode *dir, struct dentry *dentry, ++ aufs_bindex_t bindex) ++{ ++ struct inode *inode; ++ ++ inode = dentry->d_inode; ++ d_drop(dentry); ++ inode->i_ctime = dir->i_ctime; ++ ++ if (au_ibstart(dir) == bindex) ++ au_cpup_attr_timesizes(dir); ++ dir->i_version++; ++} ++ ++/* ++ * when an error happened, remove the created whiteout and revert everything. ++ */ ++static int do_revert(int err, struct inode *dir, aufs_bindex_t bindex, ++ aufs_bindex_t bwh, struct dentry *wh_dentry, ++ struct dentry *dentry, struct au_dtime *dt) ++{ ++ int rerr; ++ struct path h_path = { ++ .dentry = wh_dentry, ++ .mnt = au_sbr_mnt(dir->i_sb, bindex) ++ }; ++ ++ rerr = au_wh_unlink_dentry(au_h_iptr(dir, bindex), &h_path, dentry); ++ if (!rerr) { ++ au_set_dbwh(dentry, bwh); ++ au_dtime_revert(dt); ++ return 0; ++ } ++ ++ AuIOErr("%.*s reverting whiteout failed(%d, %d)\n", ++ AuDLNPair(dentry), err, rerr); ++ return -EIO; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++int aufs_unlink(struct inode *dir, struct dentry *dentry) ++{ ++ int err; ++ aufs_bindex_t bwh, bindex, bstart; ++ struct au_dtime dt; ++ struct au_pin pin; ++ struct path h_path; ++ struct inode *inode, *h_dir; ++ struct dentry *parent, *wh_dentry; ++ ++ IMustLock(dir); ++ ++ err = aufs_read_lock(dentry, AuLock_DW | AuLock_GEN); ++ if (unlikely(err)) ++ goto out; ++ err = au_d_hashed_positive(dentry); ++ if (unlikely(err)) ++ goto out_unlock; ++ inode = dentry->d_inode; ++ IMustLock(inode); ++ err = -EISDIR; ++ if (unlikely(S_ISDIR(inode->i_mode))) ++ goto out_unlock; /* possible? */ ++ ++ bstart = au_dbstart(dentry); ++ bwh = au_dbwh(dentry); ++ bindex = -1; ++ parent = dentry->d_parent; /* dir inode is locked */ ++ di_write_lock_parent(parent); ++ wh_dentry = lock_hdir_create_wh(dentry, /*isdir*/0, &bindex, &dt, &pin); ++ err = PTR_ERR(wh_dentry); ++ if (IS_ERR(wh_dentry)) ++ goto out_parent; ++ ++ h_path.mnt = au_sbr_mnt(dentry->d_sb, bstart); ++ h_path.dentry = au_h_dptr(dentry, bstart); ++ dget(h_path.dentry); ++ if (bindex == bstart) { ++ h_dir = au_pinned_h_dir(&pin); ++ err = vfsub_unlink(h_dir, &h_path, /*force*/0); ++ } else { ++ /* dir inode is locked */ ++ h_dir = wh_dentry->d_parent->d_inode; ++ IMustLock(h_dir); ++ err = 0; ++ } ++ ++ if (!err) { ++ vfsub_drop_nlink(inode); ++ epilog(dir, dentry, bindex); ++ ++ /* update target timestamps */ ++ if (bindex == bstart) { ++ vfsub_update_h_iattr(&h_path, /*did*/NULL); /*ignore*/ ++ inode->i_ctime = h_path.dentry->d_inode->i_ctime; ++ } else ++ /* todo: this timestamp may be reverted later */ ++ inode->i_ctime = h_dir->i_ctime; ++ goto out_unpin; /* success */ ++ } ++ ++ /* revert */ ++ if (wh_dentry) { ++ int rerr; ++ ++ rerr = do_revert(err, dir, bindex, bwh, wh_dentry, dentry, &dt); ++ if (rerr) ++ err = rerr; ++ } ++ ++out_unpin: ++ au_unpin(&pin); ++ dput(wh_dentry); ++ dput(h_path.dentry); ++out_parent: ++ di_write_unlock(parent); ++out_unlock: ++ aufs_read_unlock(dentry, AuLock_DW); ++out: ++ return err; ++} ++ ++int aufs_rmdir(struct inode *dir, struct dentry *dentry) ++{ ++ int err, rmdir_later; ++ aufs_bindex_t bwh, bindex, bstart; ++ struct au_dtime dt; ++ struct au_pin pin; ++ struct inode *inode; ++ struct dentry *parent, *wh_dentry, *h_dentry; ++ struct au_whtmp_rmdir *args; ++ ++ IMustLock(dir); ++ ++ err = aufs_read_lock(dentry, AuLock_DW | AuLock_FLUSH | AuLock_GEN); ++ if (unlikely(err)) ++ goto out; ++ ++ /* VFS already unhashes it */ ++ inode = dentry->d_inode; ++ err = -ENOENT; ++ if (unlikely(!inode || !inode->i_nlink ++ || IS_DEADDIR(inode))) ++ goto out_unlock; ++ IMustLock(inode); ++ err = -ENOTDIR; ++ if (unlikely(!S_ISDIR(inode->i_mode))) ++ goto out_unlock; /* possible? */ ++ ++ err = -ENOMEM; ++ args = au_whtmp_rmdir_alloc(dir->i_sb, GFP_NOFS); ++ if (unlikely(!args)) ++ goto out_unlock; ++ ++ parent = dentry->d_parent; /* dir inode is locked */ ++ di_write_lock_parent(parent); ++ err = au_test_empty(dentry, &args->whlist); ++ if (unlikely(err)) ++ goto out_parent; ++ ++ bstart = au_dbstart(dentry); ++ bwh = au_dbwh(dentry); ++ bindex = -1; ++ wh_dentry = lock_hdir_create_wh(dentry, /*isdir*/1, &bindex, &dt, &pin); ++ err = PTR_ERR(wh_dentry); ++ if (IS_ERR(wh_dentry)) ++ goto out_parent; ++ ++ h_dentry = au_h_dptr(dentry, bstart); ++ dget(h_dentry); ++ rmdir_later = 0; ++ if (bindex == bstart) { ++ err = renwh_and_rmdir(dentry, bstart, &args->whlist, dir); ++ if (err > 0) { ++ rmdir_later = err; ++ err = 0; ++ } ++ } else { ++ /* stop monitoring */ ++ au_hn_free(au_hi(inode, bstart)); ++ ++ /* dir inode is locked */ ++ IMustLock(wh_dentry->d_parent->d_inode); ++ err = 0; ++ } ++ ++ if (!err) { ++ vfsub_dead_dir(inode); ++ au_set_dbdiropq(dentry, -1); ++ epilog(dir, dentry, bindex); ++ ++ if (rmdir_later) { ++ au_whtmp_kick_rmdir(dir, bstart, h_dentry, args); ++ args = NULL; ++ } ++ ++ goto out_unpin; /* success */ ++ } ++ ++ /* revert */ ++ AuLabel(revert); ++ if (wh_dentry) { ++ int rerr; ++ ++ rerr = do_revert(err, dir, bindex, bwh, wh_dentry, dentry, &dt); ++ if (rerr) ++ err = rerr; ++ } ++ ++out_unpin: ++ au_unpin(&pin); ++ dput(wh_dentry); ++ dput(h_dentry); ++out_parent: ++ di_write_unlock(parent); ++ if (args) ++ au_whtmp_rmdir_free(args); ++out_unlock: ++ aufs_read_unlock(dentry, AuLock_DW); ++out: ++ AuTraceErr(err); ++ return err; ++} +diff -urN a/fs/aufs/i_op_ren.c b/fs/aufs/i_op_ren.c +--- a/fs/aufs/i_op_ren.c 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/i_op_ren.c 2011-03-06 23:28:02.616413258 +0000 +@@ -0,0 +1,1017 @@ ++/* ++ * Copyright (C) 2005-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * inode operation (rename entry) ++ * todo: this is crazy monster ++ */ ++ ++#include "aufs.h" ++ ++enum { AuSRC, AuDST, AuSrcDst }; ++enum { AuPARENT, AuCHILD, AuParentChild }; ++ ++#define AuRen_ISDIR 1 ++#define AuRen_ISSAMEDIR (1 << 1) ++#define AuRen_WHSRC (1 << 2) ++#define AuRen_WHDST (1 << 3) ++#define AuRen_MNT_WRITE (1 << 4) ++#define AuRen_DT_DSTDIR (1 << 5) ++#define AuRen_DIROPQ (1 << 6) ++#define AuRen_CPUP (1 << 7) ++#define au_ftest_ren(flags, name) ((flags) & AuRen_##name) ++#define au_fset_ren(flags, name) \ ++ do { (flags) |= AuRen_##name; } while (0) ++#define au_fclr_ren(flags, name) \ ++ do { (flags) &= ~AuRen_##name; } while (0) ++ ++struct au_ren_args { ++ struct { ++ struct dentry *dentry, *h_dentry, *parent, *h_parent, ++ *wh_dentry; ++ struct inode *dir, *inode; ++ struct au_hinode *hdir; ++ struct au_dtime dt[AuParentChild]; ++ aufs_bindex_t bstart; ++ } sd[AuSrcDst]; ++ ++#define src_dentry sd[AuSRC].dentry ++#define src_dir sd[AuSRC].dir ++#define src_inode sd[AuSRC].inode ++#define src_h_dentry sd[AuSRC].h_dentry ++#define src_parent sd[AuSRC].parent ++#define src_h_parent sd[AuSRC].h_parent ++#define src_wh_dentry sd[AuSRC].wh_dentry ++#define src_hdir sd[AuSRC].hdir ++#define src_h_dir sd[AuSRC].hdir->hi_inode ++#define src_dt sd[AuSRC].dt ++#define src_bstart sd[AuSRC].bstart ++ ++#define dst_dentry sd[AuDST].dentry ++#define dst_dir sd[AuDST].dir ++#define dst_inode sd[AuDST].inode ++#define dst_h_dentry sd[AuDST].h_dentry ++#define dst_parent sd[AuDST].parent ++#define dst_h_parent sd[AuDST].h_parent ++#define dst_wh_dentry sd[AuDST].wh_dentry ++#define dst_hdir sd[AuDST].hdir ++#define dst_h_dir sd[AuDST].hdir->hi_inode ++#define dst_dt sd[AuDST].dt ++#define dst_bstart sd[AuDST].bstart ++ ++ struct dentry *h_trap; ++ struct au_branch *br; ++ struct au_hinode *src_hinode; ++ struct path h_path; ++ struct au_nhash whlist; ++ aufs_bindex_t btgt, src_bwh, src_bdiropq; ++ ++ unsigned int flags; ++ ++ struct au_whtmp_rmdir *thargs; ++ struct dentry *h_dst; ++}; ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* ++ * functions for reverting. ++ * when an error happened in a single rename systemcall, we should revert ++ * everything as if nothing happend. ++ * we don't need to revert the copied-up/down the parent dir since they are ++ * harmless. ++ */ ++ ++#define RevertFailure(fmt, ...) do { \ ++ AuIOErr("revert failure: " fmt " (%d, %d)\n", \ ++ ##__VA_ARGS__, err, rerr); \ ++ err = -EIO; \ ++} while (0) ++ ++static void au_ren_rev_diropq(int err, struct au_ren_args *a) ++{ ++ int rerr; ++ ++ au_hn_imtx_lock_nested(a->src_hinode, AuLsc_I_CHILD); ++ rerr = au_diropq_remove(a->src_dentry, a->btgt); ++ au_hn_imtx_unlock(a->src_hinode); ++ au_set_dbdiropq(a->src_dentry, a->src_bdiropq); ++ if (rerr) ++ RevertFailure("remove diropq %.*s", AuDLNPair(a->src_dentry)); ++} ++ ++static void au_ren_rev_rename(int err, struct au_ren_args *a) ++{ ++ int rerr; ++ ++ a->h_path.dentry = au_lkup_one(&a->src_dentry->d_name, a->src_h_parent, ++ a->br, /*nd*/NULL); ++ rerr = PTR_ERR(a->h_path.dentry); ++ if (IS_ERR(a->h_path.dentry)) { ++ RevertFailure("au_lkup_one %.*s", AuDLNPair(a->src_dentry)); ++ return; ++ } ++ ++ rerr = vfsub_rename(a->dst_h_dir, ++ au_h_dptr(a->src_dentry, a->btgt), ++ a->src_h_dir, &a->h_path); ++ d_drop(a->h_path.dentry); ++ dput(a->h_path.dentry); ++ /* au_set_h_dptr(a->src_dentry, a->btgt, NULL); */ ++ if (rerr) ++ RevertFailure("rename %.*s", AuDLNPair(a->src_dentry)); ++} ++ ++static void au_ren_rev_cpup(int err, struct au_ren_args *a) ++{ ++ int rerr; ++ ++ a->h_path.dentry = a->dst_h_dentry; ++ rerr = vfsub_unlink(a->dst_h_dir, &a->h_path, /*force*/0); ++ au_set_h_dptr(a->src_dentry, a->btgt, NULL); ++ au_set_dbstart(a->src_dentry, a->src_bstart); ++ if (rerr) ++ RevertFailure("unlink %.*s", AuDLNPair(a->dst_h_dentry)); ++} ++ ++static void au_ren_rev_whtmp(int err, struct au_ren_args *a) ++{ ++ int rerr; ++ ++ a->h_path.dentry = au_lkup_one(&a->dst_dentry->d_name, a->dst_h_parent, ++ a->br, /*nd*/NULL); ++ rerr = PTR_ERR(a->h_path.dentry); ++ if (IS_ERR(a->h_path.dentry)) { ++ RevertFailure("lookup %.*s", AuDLNPair(a->dst_dentry)); ++ return; ++ } ++ if (a->h_path.dentry->d_inode) { ++ d_drop(a->h_path.dentry); ++ dput(a->h_path.dentry); ++ return; ++ } ++ ++ rerr = vfsub_rename(a->dst_h_dir, a->h_dst, a->dst_h_dir, &a->h_path); ++ d_drop(a->h_path.dentry); ++ dput(a->h_path.dentry); ++ if (!rerr) ++ au_set_h_dptr(a->dst_dentry, a->btgt, dget(a->h_dst)); ++ else ++ RevertFailure("rename %.*s", AuDLNPair(a->h_dst)); ++} ++ ++static void au_ren_rev_whsrc(int err, struct au_ren_args *a) ++{ ++ int rerr; ++ ++ a->h_path.dentry = a->src_wh_dentry; ++ rerr = au_wh_unlink_dentry(a->src_h_dir, &a->h_path, a->src_dentry); ++ au_set_dbwh(a->src_dentry, a->src_bwh); ++ if (rerr) ++ RevertFailure("unlink %.*s", AuDLNPair(a->src_wh_dentry)); ++} ++#undef RevertFailure ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* ++ * when we have to copyup the renaming entry, do it with the rename-target name ++ * in order to minimize the cost (the later actual rename is unnecessary). ++ * otherwise rename it on the target branch. ++ */ ++static int au_ren_or_cpup(struct au_ren_args *a) ++{ ++ int err; ++ struct dentry *d; ++ ++ d = a->src_dentry; ++ if (au_dbstart(d) == a->btgt) { ++ a->h_path.dentry = a->dst_h_dentry; ++ if (au_ftest_ren(a->flags, DIROPQ) ++ && au_dbdiropq(d) == a->btgt) ++ au_fclr_ren(a->flags, DIROPQ); ++ AuDebugOn(au_dbstart(d) != a->btgt); ++ err = vfsub_rename(a->src_h_dir, au_h_dptr(d, a->btgt), ++ a->dst_h_dir, &a->h_path); ++ } else { ++ struct mutex *h_mtx = &a->src_h_dentry->d_inode->i_mutex; ++ struct file *h_file; ++ ++ au_fset_ren(a->flags, CPUP); ++ mutex_lock_nested(h_mtx, AuLsc_I_CHILD); ++ au_set_dbstart(d, a->btgt); ++ au_set_h_dptr(d, a->btgt, dget(a->dst_h_dentry)); ++ h_file = au_h_open_pre(d, a->src_bstart); ++ if (IS_ERR(h_file)) { ++ err = PTR_ERR(h_file); ++ h_file = NULL; ++ } else ++ err = au_sio_cpup_single(d, a->btgt, a->src_bstart, -1, ++ !AuCpup_DTIME, a->dst_parent); ++ mutex_unlock(h_mtx); ++ au_h_open_post(d, a->src_bstart, h_file); ++ if (!err) { ++ d = a->dst_dentry; ++ au_set_h_dptr(d, a->btgt, NULL); ++ au_update_dbstart(d); ++ } else { ++ au_set_h_dptr(d, a->btgt, NULL); ++ au_set_dbstart(d, a->src_bstart); ++ } ++ } ++ if (!err && a->h_dst) ++ /* it will be set to dinfo later */ ++ dget(a->h_dst); ++ ++ return err; ++} ++ ++/* cf. aufs_rmdir() */ ++static int au_ren_del_whtmp(struct au_ren_args *a) ++{ ++ int err; ++ struct inode *dir; ++ ++ dir = a->dst_dir; ++ SiMustAnyLock(dir->i_sb); ++ if (!au_nhash_test_longer_wh(&a->whlist, a->btgt, ++ au_sbi(dir->i_sb)->si_dirwh) ++ || au_test_fs_remote(a->h_dst->d_sb)) { ++ err = au_whtmp_rmdir(dir, a->btgt, a->h_dst, &a->whlist); ++ if (unlikely(err)) ++ pr_warning("failed removing whtmp dir %.*s (%d), " ++ "ignored.\n", AuDLNPair(a->h_dst), err); ++ } else { ++ au_nhash_wh_free(&a->thargs->whlist); ++ a->thargs->whlist = a->whlist; ++ a->whlist.nh_num = 0; ++ au_whtmp_kick_rmdir(dir, a->btgt, a->h_dst, a->thargs); ++ dput(a->h_dst); ++ a->thargs = NULL; ++ } ++ ++ return 0; ++} ++ ++/* make it 'opaque' dir. */ ++static int au_ren_diropq(struct au_ren_args *a) ++{ ++ int err; ++ struct dentry *diropq; ++ ++ err = 0; ++ a->src_bdiropq = au_dbdiropq(a->src_dentry); ++ a->src_hinode = au_hi(a->src_inode, a->btgt); ++ au_hn_imtx_lock_nested(a->src_hinode, AuLsc_I_CHILD); ++ diropq = au_diropq_create(a->src_dentry, a->btgt); ++ au_hn_imtx_unlock(a->src_hinode); ++ if (IS_ERR(diropq)) ++ err = PTR_ERR(diropq); ++ dput(diropq); ++ ++ return err; ++} ++ ++static int do_rename(struct au_ren_args *a) ++{ ++ int err; ++ struct dentry *d, *h_d; ++ ++ /* prepare workqueue args for asynchronous rmdir */ ++ h_d = a->dst_h_dentry; ++ if (au_ftest_ren(a->flags, ISDIR) && h_d->d_inode) { ++ err = -ENOMEM; ++ a->thargs = au_whtmp_rmdir_alloc(a->src_dentry->d_sb, GFP_NOFS); ++ if (unlikely(!a->thargs)) ++ goto out; ++ a->h_dst = dget(h_d); ++ } ++ ++ /* create whiteout for src_dentry */ ++ if (au_ftest_ren(a->flags, WHSRC)) { ++ a->src_bwh = au_dbwh(a->src_dentry); ++ AuDebugOn(a->src_bwh >= 0); ++ a->src_wh_dentry ++ = au_wh_create(a->src_dentry, a->btgt, a->src_h_parent); ++ err = PTR_ERR(a->src_wh_dentry); ++ if (IS_ERR(a->src_wh_dentry)) ++ goto out_thargs; ++ } ++ ++ /* lookup whiteout for dentry */ ++ if (au_ftest_ren(a->flags, WHDST)) { ++ h_d = au_wh_lkup(a->dst_h_parent, &a->dst_dentry->d_name, ++ a->br); ++ err = PTR_ERR(h_d); ++ if (IS_ERR(h_d)) ++ goto out_whsrc; ++ if (!h_d->d_inode) ++ dput(h_d); ++ else ++ a->dst_wh_dentry = h_d; ++ } ++ ++ /* rename dentry to tmpwh */ ++ if (a->thargs) { ++ err = au_whtmp_ren(a->dst_h_dentry, a->br); ++ if (unlikely(err)) ++ goto out_whdst; ++ ++ d = a->dst_dentry; ++ au_set_h_dptr(d, a->btgt, NULL); ++ err = au_lkup_neg(d, a->btgt); ++ if (unlikely(err)) ++ goto out_whtmp; ++ a->dst_h_dentry = au_h_dptr(d, a->btgt); ++ } ++ ++ /* cpup src */ ++ if (a->dst_h_dentry->d_inode && a->src_bstart != a->btgt) { ++ struct mutex *h_mtx = &a->src_h_dentry->d_inode->i_mutex; ++ struct file *h_file; ++ ++ mutex_lock_nested(h_mtx, AuLsc_I_CHILD); ++ AuDebugOn(au_dbstart(a->src_dentry) != a->src_bstart); ++ h_file = au_h_open_pre(a->src_dentry, a->src_bstart); ++ if (IS_ERR(h_file)) { ++ err = PTR_ERR(h_file); ++ h_file = NULL; ++ } else ++ err = au_sio_cpup_simple(a->src_dentry, a->btgt, -1, ++ !AuCpup_DTIME); ++ mutex_unlock(h_mtx); ++ au_h_open_post(a->src_dentry, a->src_bstart, h_file); ++ if (unlikely(err)) ++ goto out_whtmp; ++ } ++ ++ /* rename by vfs_rename or cpup */ ++ d = a->dst_dentry; ++ if (au_ftest_ren(a->flags, ISDIR) ++ && (a->dst_wh_dentry ++ || au_dbdiropq(d) == a->btgt ++ /* hide the lower to keep xino */ ++ || a->btgt < au_dbend(d) ++ || au_opt_test(au_mntflags(d->d_sb), ALWAYS_DIROPQ))) ++ au_fset_ren(a->flags, DIROPQ); ++ err = au_ren_or_cpup(a); ++ if (unlikely(err)) ++ /* leave the copied-up one */ ++ goto out_whtmp; ++ ++ /* make dir opaque */ ++ if (au_ftest_ren(a->flags, DIROPQ)) { ++ err = au_ren_diropq(a); ++ if (unlikely(err)) ++ goto out_rename; ++ } ++ ++ /* update target timestamps */ ++ AuDebugOn(au_dbstart(a->src_dentry) != a->btgt); ++ a->h_path.dentry = au_h_dptr(a->src_dentry, a->btgt); ++ vfsub_update_h_iattr(&a->h_path, /*did*/NULL); /*ignore*/ ++ a->src_inode->i_ctime = a->h_path.dentry->d_inode->i_ctime; ++ ++ /* remove whiteout for dentry */ ++ if (a->dst_wh_dentry) { ++ a->h_path.dentry = a->dst_wh_dentry; ++ err = au_wh_unlink_dentry(a->dst_h_dir, &a->h_path, ++ a->dst_dentry); ++ if (unlikely(err)) ++ goto out_diropq; ++ } ++ ++ /* remove whtmp */ ++ if (a->thargs) ++ au_ren_del_whtmp(a); /* ignore this error */ ++ ++ err = 0; ++ goto out_success; ++ ++out_diropq: ++ if (au_ftest_ren(a->flags, DIROPQ)) ++ au_ren_rev_diropq(err, a); ++out_rename: ++ if (!au_ftest_ren(a->flags, CPUP)) ++ au_ren_rev_rename(err, a); ++ else ++ au_ren_rev_cpup(err, a); ++ dput(a->h_dst); ++out_whtmp: ++ if (a->thargs) ++ au_ren_rev_whtmp(err, a); ++out_whdst: ++ dput(a->dst_wh_dentry); ++ a->dst_wh_dentry = NULL; ++out_whsrc: ++ if (a->src_wh_dentry) ++ au_ren_rev_whsrc(err, a); ++out_success: ++ dput(a->src_wh_dentry); ++ dput(a->dst_wh_dentry); ++out_thargs: ++ if (a->thargs) { ++ dput(a->h_dst); ++ au_whtmp_rmdir_free(a->thargs); ++ a->thargs = NULL; ++ } ++out: ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* ++ * test if @dentry dir can be rename destination or not. ++ * success means, it is a logically empty dir. ++ */ ++static int may_rename_dstdir(struct dentry *dentry, struct au_nhash *whlist) ++{ ++ return au_test_empty(dentry, whlist); ++} ++ ++/* ++ * test if @dentry dir can be rename source or not. ++ * if it can, return 0 and @children is filled. ++ * success means, ++ * - it is a logically empty dir. ++ * - or, it exists on writable branch and has no children including whiteouts ++ * on the lower branch. ++ */ ++static int may_rename_srcdir(struct dentry *dentry, aufs_bindex_t btgt) ++{ ++ int err; ++ unsigned int rdhash; ++ aufs_bindex_t bstart; ++ ++ bstart = au_dbstart(dentry); ++ if (bstart != btgt) { ++ struct au_nhash whlist; ++ ++ SiMustAnyLock(dentry->d_sb); ++ rdhash = au_sbi(dentry->d_sb)->si_rdhash; ++ if (!rdhash) ++ rdhash = au_rdhash_est(au_dir_size(/*file*/NULL, ++ dentry)); ++ err = au_nhash_alloc(&whlist, rdhash, GFP_NOFS); ++ if (unlikely(err)) ++ goto out; ++ err = au_test_empty(dentry, &whlist); ++ au_nhash_wh_free(&whlist); ++ goto out; ++ } ++ ++ if (bstart == au_dbtaildir(dentry)) ++ return 0; /* success */ ++ ++ err = au_test_empty_lower(dentry); ++ ++out: ++ if (err == -ENOTEMPTY) { ++ AuWarn1("renaming dir who has child(ren) on multiple branches," ++ " is not supported\n"); ++ err = -EXDEV; ++ } ++ return err; ++} ++ ++/* side effect: sets whlist and h_dentry */ ++static int au_ren_may_dir(struct au_ren_args *a) ++{ ++ int err; ++ unsigned int rdhash; ++ struct dentry *d; ++ ++ d = a->dst_dentry; ++ SiMustAnyLock(d->d_sb); ++ ++ err = 0; ++ if (au_ftest_ren(a->flags, ISDIR) && a->dst_inode) { ++ rdhash = au_sbi(d->d_sb)->si_rdhash; ++ if (!rdhash) ++ rdhash = au_rdhash_est(au_dir_size(/*file*/NULL, d)); ++ err = au_nhash_alloc(&a->whlist, rdhash, GFP_NOFS); ++ if (unlikely(err)) ++ goto out; ++ ++ au_set_dbstart(d, a->dst_bstart); ++ err = may_rename_dstdir(d, &a->whlist); ++ au_set_dbstart(d, a->btgt); ++ } ++ a->dst_h_dentry = au_h_dptr(d, au_dbstart(d)); ++ if (unlikely(err)) ++ goto out; ++ ++ d = a->src_dentry; ++ a->src_h_dentry = au_h_dptr(d, au_dbstart(d)); ++ if (au_ftest_ren(a->flags, ISDIR)) { ++ err = may_rename_srcdir(d, a->btgt); ++ if (unlikely(err)) { ++ au_nhash_wh_free(&a->whlist); ++ a->whlist.nh_num = 0; ++ } ++ } ++out: ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* ++ * simple tests for rename. ++ * following the checks in vfs, plus the parent-child relationship. ++ */ ++static int au_may_ren(struct au_ren_args *a) ++{ ++ int err, isdir; ++ struct inode *h_inode; ++ ++ if (a->src_bstart == a->btgt) { ++ err = au_may_del(a->src_dentry, a->btgt, a->src_h_parent, ++ au_ftest_ren(a->flags, ISDIR)); ++ if (unlikely(err)) ++ goto out; ++ err = -EINVAL; ++ if (unlikely(a->src_h_dentry == a->h_trap)) ++ goto out; ++ } ++ ++ err = 0; ++ if (a->dst_bstart != a->btgt) ++ goto out; ++ ++ err = -ENOTEMPTY; ++ if (unlikely(a->dst_h_dentry == a->h_trap)) ++ goto out; ++ ++ err = -EIO; ++ h_inode = a->dst_h_dentry->d_inode; ++ isdir = !!au_ftest_ren(a->flags, ISDIR); ++ if (!a->dst_dentry->d_inode) { ++ if (unlikely(h_inode)) ++ goto out; ++ err = au_may_add(a->dst_dentry, a->btgt, a->dst_h_parent, ++ isdir); ++ } else { ++ if (unlikely(!h_inode || !h_inode->i_nlink)) ++ goto out; ++ err = au_may_del(a->dst_dentry, a->btgt, a->dst_h_parent, ++ isdir); ++ if (unlikely(err)) ++ goto out; ++ } ++ ++out: ++ if (unlikely(err == -ENOENT || err == -EEXIST)) ++ err = -EIO; ++ AuTraceErr(err); ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* ++ * locking order ++ * (VFS) ++ * - src_dir and dir by lock_rename() ++ * - inode if exitsts ++ * (aufs) ++ * - lock all ++ * + src_dentry and dentry by aufs_read_and_write_lock2() which calls, ++ * + si_read_lock ++ * + di_write_lock2_child() ++ * + di_write_lock_child() ++ * + ii_write_lock_child() ++ * + di_write_lock_child2() ++ * + ii_write_lock_child2() ++ * + src_parent and parent ++ * + di_write_lock_parent() ++ * + ii_write_lock_parent() ++ * + di_write_lock_parent2() ++ * + ii_write_lock_parent2() ++ * + lower src_dir and dir by vfsub_lock_rename() ++ * + verify the every relationships between child and parent. if any ++ * of them failed, unlock all and return -EBUSY. ++ */ ++static void au_ren_unlock(struct au_ren_args *a) ++{ ++ struct super_block *sb; ++ ++ sb = a->dst_dentry->d_sb; ++ if (au_ftest_ren(a->flags, MNT_WRITE)) ++ mnt_drop_write(a->br->br_mnt); ++ vfsub_unlock_rename(a->src_h_parent, a->src_hdir, ++ a->dst_h_parent, a->dst_hdir); ++} ++ ++static int au_ren_lock(struct au_ren_args *a) ++{ ++ int err; ++ unsigned int udba; ++ ++ err = 0; ++ a->src_h_parent = au_h_dptr(a->src_parent, a->btgt); ++ a->src_hdir = au_hi(a->src_dir, a->btgt); ++ a->dst_h_parent = au_h_dptr(a->dst_parent, a->btgt); ++ a->dst_hdir = au_hi(a->dst_dir, a->btgt); ++ a->h_trap = vfsub_lock_rename(a->src_h_parent, a->src_hdir, ++ a->dst_h_parent, a->dst_hdir); ++ udba = au_opt_udba(a->src_dentry->d_sb); ++ if (unlikely(a->src_hdir->hi_inode != a->src_h_parent->d_inode ++ || a->dst_hdir->hi_inode != a->dst_h_parent->d_inode)) ++ err = au_busy_or_stale(); ++ if (!err && au_dbstart(a->src_dentry) == a->btgt) ++ err = au_h_verify(a->src_h_dentry, udba, ++ a->src_h_parent->d_inode, a->src_h_parent, ++ a->br); ++ if (!err && au_dbstart(a->dst_dentry) == a->btgt) ++ err = au_h_verify(a->dst_h_dentry, udba, ++ a->dst_h_parent->d_inode, a->dst_h_parent, ++ a->br); ++ if (!err) { ++ err = mnt_want_write(a->br->br_mnt); ++ if (unlikely(err)) ++ goto out_unlock; ++ au_fset_ren(a->flags, MNT_WRITE); ++ goto out; /* success */ ++ } ++ ++ err = au_busy_or_stale(); ++ ++out_unlock: ++ au_ren_unlock(a); ++out: ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++static void au_ren_refresh_dir(struct au_ren_args *a) ++{ ++ struct inode *dir; ++ ++ dir = a->dst_dir; ++ dir->i_version++; ++ if (au_ftest_ren(a->flags, ISDIR)) { ++ /* is this updating defined in POSIX? */ ++ au_cpup_attr_timesizes(a->src_inode); ++ au_cpup_attr_nlink(dir, /*force*/1); ++ } ++ ++ if (au_ibstart(dir) == a->btgt) ++ au_cpup_attr_timesizes(dir); ++ ++ if (au_ftest_ren(a->flags, ISSAMEDIR)) ++ return; ++ ++ dir = a->src_dir; ++ dir->i_version++; ++ if (au_ftest_ren(a->flags, ISDIR)) ++ au_cpup_attr_nlink(dir, /*force*/1); ++ if (au_ibstart(dir) == a->btgt) ++ au_cpup_attr_timesizes(dir); ++} ++ ++static void au_ren_refresh(struct au_ren_args *a) ++{ ++ aufs_bindex_t bend, bindex; ++ struct dentry *d, *h_d; ++ struct inode *i, *h_i; ++ struct super_block *sb; ++ ++ d = a->dst_dentry; ++ d_drop(d); ++ if (a->h_dst) ++ /* already dget-ed by au_ren_or_cpup() */ ++ au_set_h_dptr(d, a->btgt, a->h_dst); ++ ++ i = a->dst_inode; ++ if (i) { ++ if (!au_ftest_ren(a->flags, ISDIR)) ++ vfsub_drop_nlink(i); ++ else { ++ vfsub_dead_dir(i); ++ au_cpup_attr_timesizes(i); ++ } ++ au_update_dbrange(d, /*do_put_zero*/1); ++ } else { ++ bend = a->btgt; ++ for (bindex = au_dbstart(d); bindex < bend; bindex++) ++ au_set_h_dptr(d, bindex, NULL); ++ bend = au_dbend(d); ++ for (bindex = a->btgt + 1; bindex <= bend; bindex++) ++ au_set_h_dptr(d, bindex, NULL); ++ au_update_dbrange(d, /*do_put_zero*/0); ++ } ++ ++ d = a->src_dentry; ++ au_set_dbwh(d, -1); ++ bend = au_dbend(d); ++ for (bindex = a->btgt + 1; bindex <= bend; bindex++) { ++ h_d = au_h_dptr(d, bindex); ++ if (h_d) ++ au_set_h_dptr(d, bindex, NULL); ++ } ++ au_set_dbend(d, a->btgt); ++ ++ sb = d->d_sb; ++ i = a->src_inode; ++ if (au_opt_test(au_mntflags(sb), PLINK) && au_plink_test(i)) ++ return; /* success */ ++ ++ bend = au_ibend(i); ++ for (bindex = a->btgt + 1; bindex <= bend; bindex++) { ++ h_i = au_h_iptr(i, bindex); ++ if (h_i) { ++ au_xino_write(sb, bindex, h_i->i_ino, /*ino*/0); ++ /* ignore this error */ ++ au_set_h_iptr(i, bindex, NULL, 0); ++ } ++ } ++ au_set_ibend(i, a->btgt); ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* mainly for link(2) and rename(2) */ ++int au_wbr(struct dentry *dentry, aufs_bindex_t btgt) ++{ ++ aufs_bindex_t bdiropq, bwh; ++ struct dentry *parent; ++ struct au_branch *br; ++ ++ parent = dentry->d_parent; ++ IMustLock(parent->d_inode); /* dir is locked */ ++ ++ bdiropq = au_dbdiropq(parent); ++ bwh = au_dbwh(dentry); ++ br = au_sbr(dentry->d_sb, btgt); ++ if (au_br_rdonly(br) ++ || (0 <= bdiropq && bdiropq < btgt) ++ || (0 <= bwh && bwh < btgt)) ++ btgt = -1; ++ ++ AuDbg("btgt %d\n", btgt); ++ return btgt; ++} ++ ++/* sets src_bstart, dst_bstart and btgt */ ++static int au_ren_wbr(struct au_ren_args *a) ++{ ++ int err; ++ struct au_wr_dir_args wr_dir_args = { ++ /* .force_btgt = -1, */ ++ .flags = AuWrDir_ADD_ENTRY ++ }; ++ ++ a->src_bstart = au_dbstart(a->src_dentry); ++ a->dst_bstart = au_dbstart(a->dst_dentry); ++ if (au_ftest_ren(a->flags, ISDIR)) ++ au_fset_wrdir(wr_dir_args.flags, ISDIR); ++ wr_dir_args.force_btgt = a->src_bstart; ++ if (a->dst_inode && a->dst_bstart < a->src_bstart) ++ wr_dir_args.force_btgt = a->dst_bstart; ++ wr_dir_args.force_btgt = au_wbr(a->dst_dentry, wr_dir_args.force_btgt); ++ err = au_wr_dir(a->dst_dentry, a->src_dentry, &wr_dir_args); ++ a->btgt = err; ++ ++ return err; ++} ++ ++static void au_ren_dt(struct au_ren_args *a) ++{ ++ a->h_path.dentry = a->src_h_parent; ++ au_dtime_store(a->src_dt + AuPARENT, a->src_parent, &a->h_path); ++ if (!au_ftest_ren(a->flags, ISSAMEDIR)) { ++ a->h_path.dentry = a->dst_h_parent; ++ au_dtime_store(a->dst_dt + AuPARENT, a->dst_parent, &a->h_path); ++ } ++ ++ au_fclr_ren(a->flags, DT_DSTDIR); ++ if (!au_ftest_ren(a->flags, ISDIR)) ++ return; ++ ++ a->h_path.dentry = a->src_h_dentry; ++ au_dtime_store(a->src_dt + AuCHILD, a->src_dentry, &a->h_path); ++ if (a->dst_h_dentry->d_inode) { ++ au_fset_ren(a->flags, DT_DSTDIR); ++ a->h_path.dentry = a->dst_h_dentry; ++ au_dtime_store(a->dst_dt + AuCHILD, a->dst_dentry, &a->h_path); ++ } ++} ++ ++static void au_ren_rev_dt(int err, struct au_ren_args *a) ++{ ++ struct dentry *h_d; ++ struct mutex *h_mtx; ++ ++ au_dtime_revert(a->src_dt + AuPARENT); ++ if (!au_ftest_ren(a->flags, ISSAMEDIR)) ++ au_dtime_revert(a->dst_dt + AuPARENT); ++ ++ if (au_ftest_ren(a->flags, ISDIR) && err != -EIO) { ++ h_d = a->src_dt[AuCHILD].dt_h_path.dentry; ++ h_mtx = &h_d->d_inode->i_mutex; ++ mutex_lock_nested(h_mtx, AuLsc_I_CHILD); ++ au_dtime_revert(a->src_dt + AuCHILD); ++ mutex_unlock(h_mtx); ++ ++ if (au_ftest_ren(a->flags, DT_DSTDIR)) { ++ h_d = a->dst_dt[AuCHILD].dt_h_path.dentry; ++ h_mtx = &h_d->d_inode->i_mutex; ++ mutex_lock_nested(h_mtx, AuLsc_I_CHILD); ++ au_dtime_revert(a->dst_dt + AuCHILD); ++ mutex_unlock(h_mtx); ++ } ++ } ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++int aufs_rename(struct inode *_src_dir, struct dentry *_src_dentry, ++ struct inode *_dst_dir, struct dentry *_dst_dentry) ++{ ++ int err, flags; ++ /* reduce stack space */ ++ struct au_ren_args *a; ++ ++ AuDbg("%.*s, %.*s\n", AuDLNPair(_src_dentry), AuDLNPair(_dst_dentry)); ++ IMustLock(_src_dir); ++ IMustLock(_dst_dir); ++ ++ err = -ENOMEM; ++ BUILD_BUG_ON(sizeof(*a) > PAGE_SIZE); ++ a = kzalloc(sizeof(*a), GFP_NOFS); ++ if (unlikely(!a)) ++ goto out; ++ ++ a->src_dir = _src_dir; ++ a->src_dentry = _src_dentry; ++ a->src_inode = a->src_dentry->d_inode; ++ a->src_parent = a->src_dentry->d_parent; /* dir inode is locked */ ++ a->dst_dir = _dst_dir; ++ a->dst_dentry = _dst_dentry; ++ a->dst_inode = a->dst_dentry->d_inode; ++ a->dst_parent = a->dst_dentry->d_parent; /* dir inode is locked */ ++ if (a->dst_inode) { ++ IMustLock(a->dst_inode); ++ au_igrab(a->dst_inode); ++ } ++ ++ err = -ENOTDIR; ++ flags = AuLock_FLUSH | AuLock_NOPLM | AuLock_GEN; ++ if (S_ISDIR(a->src_inode->i_mode)) { ++ au_fset_ren(a->flags, ISDIR); ++ if (unlikely(a->dst_inode && !S_ISDIR(a->dst_inode->i_mode))) ++ goto out_free; ++ err = aufs_read_and_write_lock2(a->dst_dentry, a->src_dentry, ++ AuLock_DIR | flags); ++ } else ++ err = aufs_read_and_write_lock2(a->dst_dentry, a->src_dentry, ++ flags); ++ if (unlikely(err)) ++ goto out_free; ++ ++ err = au_d_hashed_positive(a->src_dentry); ++ if (unlikely(err)) ++ goto out_unlock; ++ err = -ENOENT; ++ if (a->dst_inode) { ++ /* ++ * If it is a dir, VFS unhash dst_dentry before this ++ * function. It means we cannot rely upon d_unhashed(). ++ */ ++ if (unlikely(!a->dst_inode->i_nlink)) ++ goto out_unlock; ++ if (!S_ISDIR(a->dst_inode->i_mode)) { ++ err = au_d_hashed_positive(a->dst_dentry); ++ if (unlikely(err)) ++ goto out_unlock; ++ } else if (unlikely(IS_DEADDIR(a->dst_inode))) ++ goto out_unlock; ++ } else if (unlikely(d_unhashed(a->dst_dentry))) ++ goto out_unlock; ++ ++ au_fset_ren(a->flags, ISSAMEDIR); /* temporary */ ++ di_write_lock_parent(a->dst_parent); ++ ++ /* which branch we process */ ++ err = au_ren_wbr(a); ++ if (unlikely(err < 0)) ++ goto out_parent; ++ a->br = au_sbr(a->dst_dentry->d_sb, a->btgt); ++ a->h_path.mnt = a->br->br_mnt; ++ ++ /* are they available to be renamed */ ++ err = au_ren_may_dir(a); ++ if (unlikely(err)) ++ goto out_children; ++ ++ /* prepare the writable parent dir on the same branch */ ++ if (a->dst_bstart == a->btgt) { ++ au_fset_ren(a->flags, WHDST); ++ } else { ++ err = au_cpup_dirs(a->dst_dentry, a->btgt); ++ if (unlikely(err)) ++ goto out_children; ++ } ++ ++ if (a->src_dir != a->dst_dir) { ++ /* ++ * this temporary unlock is safe, ++ * because both dir->i_mutex are locked. ++ */ ++ di_write_unlock(a->dst_parent); ++ di_write_lock_parent(a->src_parent); ++ err = au_wr_dir_need_wh(a->src_dentry, ++ au_ftest_ren(a->flags, ISDIR), ++ &a->btgt); ++ di_write_unlock(a->src_parent); ++ di_write_lock2_parent(a->src_parent, a->dst_parent, /*isdir*/1); ++ au_fclr_ren(a->flags, ISSAMEDIR); ++ } else ++ err = au_wr_dir_need_wh(a->src_dentry, ++ au_ftest_ren(a->flags, ISDIR), ++ &a->btgt); ++ if (unlikely(err < 0)) ++ goto out_children; ++ if (err) ++ au_fset_ren(a->flags, WHSRC); ++ ++ /* lock them all */ ++ err = au_ren_lock(a); ++ if (unlikely(err)) ++ goto out_children; ++ ++ if (!au_opt_test(au_mntflags(a->dst_dir->i_sb), UDBA_NONE)) ++ err = au_may_ren(a); ++ else if (unlikely(a->dst_dentry->d_name.len > AUFS_MAX_NAMELEN)) ++ err = -ENAMETOOLONG; ++ if (unlikely(err)) ++ goto out_hdir; ++ ++ /* store timestamps to be revertible */ ++ au_ren_dt(a); ++ ++ /* here we go */ ++ err = do_rename(a); ++ if (unlikely(err)) ++ goto out_dt; ++ ++ /* update dir attributes */ ++ au_ren_refresh_dir(a); ++ ++ /* dput/iput all lower dentries */ ++ au_ren_refresh(a); ++ ++ goto out_hdir; /* success */ ++ ++out_dt: ++ au_ren_rev_dt(err, a); ++out_hdir: ++ au_ren_unlock(a); ++out_children: ++ au_nhash_wh_free(&a->whlist); ++ if (err && a->dst_inode && a->dst_bstart != a->btgt) { ++ AuDbg("bstart %d, btgt %d\n", a->dst_bstart, a->btgt); ++ au_set_h_dptr(a->dst_dentry, a->btgt, NULL); ++ au_set_dbstart(a->dst_dentry, a->dst_bstart); ++ } ++out_parent: ++ if (!err) ++ d_move(a->src_dentry, a->dst_dentry); ++ else { ++ au_update_dbstart(a->dst_dentry); ++ if (!a->dst_inode) ++ d_drop(a->dst_dentry); ++ } ++ if (au_ftest_ren(a->flags, ISSAMEDIR)) ++ di_write_unlock(a->dst_parent); ++ else ++ di_write_unlock2(a->src_parent, a->dst_parent); ++out_unlock: ++ aufs_read_and_write_unlock2(a->dst_dentry, a->src_dentry); ++out_free: ++ iput(a->dst_inode); ++ if (a->thargs) ++ au_whtmp_rmdir_free(a->thargs); ++ kfree(a); ++out: ++ AuTraceErr(err); ++ return err; ++} +diff -urN a/fs/aufs/loop.c b/fs/aufs/loop.c +--- a/fs/aufs/loop.c 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/loop.c 2011-03-06 23:28:02.616413258 +0000 +@@ -0,0 +1,63 @@ ++/* ++ * Copyright (C) 2005-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * support for loopback block device as a branch ++ */ ++ ++#include ++#include "aufs.h" ++ ++/* ++ * test if two lower dentries have overlapping branches. ++ */ ++int au_test_loopback_overlap(struct super_block *sb, struct dentry *h_adding) ++{ ++ struct super_block *h_sb; ++ struct loop_device *l; ++ ++ h_sb = h_adding->d_sb; ++ if (MAJOR(h_sb->s_dev) != LOOP_MAJOR) ++ return 0; ++ ++ l = h_sb->s_bdev->bd_disk->private_data; ++ h_adding = l->lo_backing_file->f_dentry; ++ /* ++ * h_adding can be local NFS. ++ * in this case aufs cannot detect the loop. ++ */ ++ if (unlikely(h_adding->d_sb == sb)) ++ return 1; ++ return !!au_test_subdir(h_adding, sb->s_root); ++} ++ ++/* true if a kernel thread named 'loop[0-9].*' accesses a file */ ++int au_test_loopback_kthread(void) ++{ ++ int ret; ++ struct task_struct *tsk = current; ++ ++ ret = 0; ++ if (tsk->flags & PF_KTHREAD) { ++ const char c = tsk->comm[4]; ++ ret = ('0' <= c && c <= '9' ++ && !strncmp(tsk->comm, "loop", 4)); ++ } ++ ++ return ret; ++} +diff -urN a/fs/aufs/loop.h b/fs/aufs/loop.h +--- a/fs/aufs/loop.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/loop.h 2011-03-06 23:28:02.620413138 +0000 +@@ -0,0 +1,42 @@ ++/* ++ * Copyright (C) 2005-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * support for loopback mount as a branch ++ */ ++ ++#ifndef __AUFS_LOOP_H__ ++#define __AUFS_LOOP_H__ ++ ++#ifdef __KERNEL__ ++ ++struct dentry; ++struct super_block; ++ ++#ifdef CONFIG_AUFS_BDEV_LOOP ++/* loop.c */ ++int au_test_loopback_overlap(struct super_block *sb, struct dentry *h_adding); ++int au_test_loopback_kthread(void); ++#else ++AuStubInt0(au_test_loopback_overlap, struct super_block *sb, ++ struct dentry *h_adding) ++AuStubInt0(au_test_loopback_kthread, void) ++#endif /* BLK_DEV_LOOP */ ++ ++#endif /* __KERNEL__ */ ++#endif /* __AUFS_LOOP_H__ */ +diff -urN a/fs/aufs/magic.mk b/fs/aufs/magic.mk +--- a/fs/aufs/magic.mk 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/magic.mk 2011-03-06 23:28:02.616413258 +0000 +@@ -0,0 +1,54 @@ ++ ++# defined in ${srctree}/fs/fuse/inode.c ++# tristate ++ifdef CONFIG_FUSE_FS ++ccflags-y += -DFUSE_SUPER_MAGIC=0x65735546 ++endif ++ ++# defined in ${srctree}/fs/ocfs2/ocfs2_fs.h ++# tristate ++ifdef CONFIG_OCFS2_FS ++ccflags-y += -DOCFS2_SUPER_MAGIC=0x7461636f ++endif ++ ++# defined in ${srctree}/fs/ocfs2/dlm/userdlm.h ++# tristate ++ifdef CONFIG_OCFS2_FS_O2CB ++ccflags-y += -DDLMFS_MAGIC=0x76a9f425 ++endif ++ ++# defined in ${srctree}/fs/cifs/cifsfs.c ++# tristate ++ifdef CONFIG_CIFS_FS ++ccflags-y += -DCIFS_MAGIC_NUMBER=0xFF534D42 ++endif ++ ++# defined in ${srctree}/fs/xfs/xfs_sb.h ++# tristate ++ifdef CONFIG_XFS_FS ++ccflags-y += -DXFS_SB_MAGIC=0x58465342 ++endif ++ ++# defined in ${srctree}/fs/configfs/mount.c ++# tristate ++ifdef CONFIG_CONFIGFS_FS ++ccflags-y += -DCONFIGFS_MAGIC=0x62656570 ++endif ++ ++# defined in ${srctree}/fs/9p/v9fs.h ++# tristate ++ifdef CONFIG_9P_FS ++ccflags-y += -DV9FS_MAGIC=0x01021997 ++endif ++ ++# defined in ${srctree}/fs/ubifs/ubifs.h ++# tristate ++ifdef CONFIG_UBIFS_FS ++ccflags-y += -DUBIFS_SUPER_MAGIC=0x24051905 ++endif ++ ++# defined in ${srctree}/fs/hfsplus/hfsplus_raw.h ++# tristate ++ifdef CONFIG_HFSPLUS_FS ++ccflags-y += -DHFSPLUS_SUPER_MAGIC=0x482b ++endif +diff -urN a/fs/aufs/module.c b/fs/aufs/module.c +--- a/fs/aufs/module.c 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/module.c 2011-03-06 23:28:02.616413258 +0000 +@@ -0,0 +1,183 @@ ++/* ++ * Copyright (C) 2005-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * module global variables and operations ++ */ ++ ++#include ++#include ++#include "aufs.h" ++ ++void *au_kzrealloc(void *p, unsigned int nused, unsigned int new_sz, gfp_t gfp) ++{ ++ if (new_sz <= nused) ++ return p; ++ ++ p = krealloc(p, new_sz, gfp); ++ if (p) ++ memset(p + nused, 0, new_sz - nused); ++ return p; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* ++ * aufs caches ++ */ ++struct kmem_cache *au_cachep[AuCache_Last]; ++static int __init au_cache_init(void) ++{ ++ au_cachep[AuCache_DINFO] = AuCacheCtor(au_dinfo, au_di_init_once); ++ if (au_cachep[AuCache_DINFO]) ++ /* SLAB_DESTROY_BY_RCU */ ++ au_cachep[AuCache_ICNTNR] = AuCacheCtor(au_icntnr, ++ au_icntnr_init_once); ++ if (au_cachep[AuCache_ICNTNR]) ++ au_cachep[AuCache_FINFO] = AuCacheCtor(au_finfo, ++ au_fi_init_once); ++ if (au_cachep[AuCache_FINFO]) ++ au_cachep[AuCache_VDIR] = AuCache(au_vdir); ++ if (au_cachep[AuCache_VDIR]) ++ au_cachep[AuCache_DEHSTR] = AuCache(au_vdir_dehstr); ++ if (au_cachep[AuCache_DEHSTR]) ++ return 0; ++ ++ return -ENOMEM; ++} ++ ++static void au_cache_fin(void) ++{ ++ int i; ++ ++ /* including AuCache_HNOTIFY */ ++ for (i = 0; i < AuCache_Last; i++) ++ if (au_cachep[i]) { ++ kmem_cache_destroy(au_cachep[i]); ++ au_cachep[i] = NULL; ++ } ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++int au_dir_roflags; ++ ++#ifdef CONFIG_AUFS_SBILIST ++struct au_splhead au_sbilist; ++#endif ++ ++/* ++ * functions for module interface. ++ */ ++MODULE_LICENSE("GPL"); ++/* MODULE_LICENSE("GPL v2"); */ ++MODULE_AUTHOR("Junjiro R. Okajima "); ++MODULE_DESCRIPTION(AUFS_NAME ++ " -- Advanced multi layered unification filesystem"); ++MODULE_VERSION(AUFS_VERSION); ++ ++/* this module parameter has no meaning when SYSFS is disabled */ ++int sysaufs_brs = 1; ++MODULE_PARM_DESC(brs, "use /fs/aufs/si_*/brN"); ++module_param_named(brs, sysaufs_brs, int, S_IRUGO); ++ ++/* ---------------------------------------------------------------------- */ ++ ++static char au_esc_chars[0x20 + 3]; /* 0x01-0x20, backslash, del, and NULL */ ++ ++int au_seq_path(struct seq_file *seq, struct path *path) ++{ ++ return seq_path(seq, path, au_esc_chars); ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++static int __init aufs_init(void) ++{ ++ int err, i; ++ char *p; ++ ++ p = au_esc_chars; ++ for (i = 1; i <= ' '; i++) ++ *p++ = i; ++ *p++ = '\\'; ++ *p++ = '\x7f'; ++ *p = 0; ++ ++ au_dir_roflags = au_file_roflags(O_DIRECTORY | O_LARGEFILE); ++ ++ au_sbilist_init(); ++ sysaufs_brs_init(); ++ au_debug_init(); ++ au_dy_init(); ++ err = sysaufs_init(); ++ if (unlikely(err)) ++ goto out; ++ err = au_procfs_init(); ++ if (unlikely(err)) ++ goto out_sysaufs; ++ err = au_wkq_init(); ++ if (unlikely(err)) ++ goto out_procfs; ++ err = au_hnotify_init(); ++ if (unlikely(err)) ++ goto out_wkq; ++ err = au_sysrq_init(); ++ if (unlikely(err)) ++ goto out_hin; ++ err = au_cache_init(); ++ if (unlikely(err)) ++ goto out_sysrq; ++ err = register_filesystem(&aufs_fs_type); ++ if (unlikely(err)) ++ goto out_cache; ++ /* since we define pr_fmt, call printk directly */ ++ printk(KERN_INFO AUFS_NAME " " AUFS_VERSION "\n"); ++ goto out; /* success */ ++ ++out_cache: ++ au_cache_fin(); ++out_sysrq: ++ au_sysrq_fin(); ++out_hin: ++ au_hnotify_fin(); ++out_wkq: ++ au_wkq_fin(); ++out_procfs: ++ au_procfs_fin(); ++out_sysaufs: ++ sysaufs_fin(); ++ au_dy_fin(); ++out: ++ return err; ++} ++ ++static void __exit aufs_exit(void) ++{ ++ unregister_filesystem(&aufs_fs_type); ++ au_cache_fin(); ++ au_sysrq_fin(); ++ au_hnotify_fin(); ++ au_wkq_fin(); ++ au_procfs_fin(); ++ sysaufs_fin(); ++ au_dy_fin(); ++} ++ ++module_init(aufs_init); ++module_exit(aufs_exit); +diff -urN a/fs/aufs/module.h b/fs/aufs/module.h +--- a/fs/aufs/module.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/module.h 2011-03-06 23:28:02.616413258 +0000 +@@ -0,0 +1,91 @@ ++/* ++ * Copyright (C) 2005-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * module initialization and module-global ++ */ ++ ++#ifndef __AUFS_MODULE_H__ ++#define __AUFS_MODULE_H__ ++ ++#ifdef __KERNEL__ ++ ++#include ++ ++struct path; ++struct seq_file; ++ ++/* module parameters */ ++extern int sysaufs_brs; ++ ++/* ---------------------------------------------------------------------- */ ++ ++extern int au_dir_roflags; ++ ++void *au_kzrealloc(void *p, unsigned int nused, unsigned int new_sz, gfp_t gfp); ++int au_seq_path(struct seq_file *seq, struct path *path); ++ ++#ifdef CONFIG_PROC_FS ++/* procfs.c */ ++int __init au_procfs_init(void); ++void au_procfs_fin(void); ++#else ++AuStubInt0(au_procfs_init, void); ++AuStubVoid(au_procfs_fin, void); ++#endif ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* kmem cache */ ++enum { ++ AuCache_DINFO, ++ AuCache_ICNTNR, ++ AuCache_FINFO, ++ AuCache_VDIR, ++ AuCache_DEHSTR, ++#ifdef CONFIG_AUFS_HNOTIFY ++ AuCache_HNOTIFY, ++#endif ++ AuCache_Last ++}; ++ ++#define AuCacheFlags (SLAB_RECLAIM_ACCOUNT | SLAB_MEM_SPREAD) ++#define AuCache(type) KMEM_CACHE(type, AuCacheFlags) ++#define AuCacheCtor(type, ctor) \ ++ kmem_cache_create(#type, sizeof(struct type), \ ++ __alignof__(struct type), AuCacheFlags, ctor) ++ ++extern struct kmem_cache *au_cachep[]; ++ ++#define AuCacheFuncs(name, index) \ ++static inline struct au_##name *au_cache_alloc_##name(void) \ ++{ return kmem_cache_alloc(au_cachep[AuCache_##index], GFP_NOFS); } \ ++static inline void au_cache_free_##name(struct au_##name *p) \ ++{ kmem_cache_free(au_cachep[AuCache_##index], p); } ++ ++AuCacheFuncs(dinfo, DINFO); ++AuCacheFuncs(icntnr, ICNTNR); ++AuCacheFuncs(finfo, FINFO); ++AuCacheFuncs(vdir, VDIR); ++AuCacheFuncs(vdir_dehstr, DEHSTR); ++#ifdef CONFIG_AUFS_HNOTIFY ++AuCacheFuncs(hnotify, HNOTIFY); ++#endif ++ ++#endif /* __KERNEL__ */ ++#endif /* __AUFS_MODULE_H__ */ +diff -urN a/fs/aufs/mtx.h b/fs/aufs/mtx.h +--- a/fs/aufs/mtx.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/mtx.h 2011-03-06 23:28:02.620413138 +0000 +@@ -0,0 +1,48 @@ ++/* ++ * Copyright (C) 2010-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * very ugly approach for aufs_mmap() ++ * never include this file from other than f_op.c. ++ * see f_op.c in detail. ++ */ ++ ++#ifndef __AUFS_MTX_H__ ++#define __AUFS_MTX_H__ ++ ++#ifdef __KERNEL__ ++ ++/* copied from ../kernel/mutex{,-debug}.h */ ++struct mutex; ++struct thread_info; ++#ifdef CONFIG_DEBUG_MUTEXES ++static inline void mutex_set_owner(struct mutex *lock) ++{ ++ lock->owner = current_thread_info(); ++} ++#else ++static inline void mutex_set_owner(struct mutex *lock) ++{ ++#ifdef CONFIG_SMP ++ lock->owner = current_thread_info(); ++#endif ++} ++#endif ++ ++#endif /* __KERNEL__ */ ++#endif /* __AUFS_MTX_H__ */ +diff -urN a/fs/aufs/opts.c b/fs/aufs/opts.c +--- a/fs/aufs/opts.c 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/opts.c 2011-03-06 23:28:02.620413138 +0000 +@@ -0,0 +1,1595 @@ ++/* ++ * Copyright (C) 2005-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * mount options/flags ++ */ ++ ++#include ++#include ++#include ++#include /* a distribution requires */ ++#include ++#include "aufs.h" ++ ++/* ---------------------------------------------------------------------- */ ++ ++enum { ++ Opt_br, ++ Opt_add, Opt_del, Opt_mod, Opt_reorder, Opt_append, Opt_prepend, ++ Opt_idel, Opt_imod, Opt_ireorder, ++ Opt_dirwh, Opt_rdcache, Opt_rdblk, Opt_rdhash, Opt_rendir, ++ Opt_rdblk_def, Opt_rdhash_def, ++ Opt_xino, Opt_zxino, Opt_noxino, ++ Opt_trunc_xino, Opt_trunc_xino_v, Opt_notrunc_xino, ++ Opt_trunc_xino_path, Opt_itrunc_xino, ++ Opt_trunc_xib, Opt_notrunc_xib, ++ Opt_shwh, Opt_noshwh, ++ Opt_plink, Opt_noplink, Opt_list_plink, ++ Opt_udba, ++ Opt_dio, Opt_nodio, ++ /* Opt_lock, Opt_unlock, */ ++ Opt_cmd, Opt_cmd_args, ++ Opt_diropq_a, Opt_diropq_w, ++ Opt_warn_perm, Opt_nowarn_perm, ++ Opt_wbr_copyup, Opt_wbr_create, ++ Opt_refrof, Opt_norefrof, ++ Opt_verbose, Opt_noverbose, ++ Opt_sum, Opt_nosum, Opt_wsum, ++ Opt_tail, Opt_ignore, Opt_ignore_silent, Opt_err ++}; ++ ++static match_table_t options = { ++ {Opt_br, "br=%s"}, ++ {Opt_br, "br:%s"}, ++ ++ {Opt_add, "add=%d:%s"}, ++ {Opt_add, "add:%d:%s"}, ++ {Opt_add, "ins=%d:%s"}, ++ {Opt_add, "ins:%d:%s"}, ++ {Opt_append, "append=%s"}, ++ {Opt_append, "append:%s"}, ++ {Opt_prepend, "prepend=%s"}, ++ {Opt_prepend, "prepend:%s"}, ++ ++ {Opt_del, "del=%s"}, ++ {Opt_del, "del:%s"}, ++ /* {Opt_idel, "idel:%d"}, */ ++ {Opt_mod, "mod=%s"}, ++ {Opt_mod, "mod:%s"}, ++ /* {Opt_imod, "imod:%d:%s"}, */ ++ ++ {Opt_dirwh, "dirwh=%d"}, ++ ++ {Opt_xino, "xino=%s"}, ++ {Opt_noxino, "noxino"}, ++ {Opt_trunc_xino, "trunc_xino"}, ++ {Opt_trunc_xino_v, "trunc_xino_v=%d:%d"}, ++ {Opt_notrunc_xino, "notrunc_xino"}, ++ {Opt_trunc_xino_path, "trunc_xino=%s"}, ++ {Opt_itrunc_xino, "itrunc_xino=%d"}, ++ /* {Opt_zxino, "zxino=%s"}, */ ++ {Opt_trunc_xib, "trunc_xib"}, ++ {Opt_notrunc_xib, "notrunc_xib"}, ++ ++#ifdef CONFIG_PROC_FS ++ {Opt_plink, "plink"}, ++#else ++ {Opt_ignore_silent, "plink"}, ++#endif ++ ++ {Opt_noplink, "noplink"}, ++ ++#ifdef CONFIG_AUFS_DEBUG ++ {Opt_list_plink, "list_plink"}, ++#endif ++ ++ {Opt_udba, "udba=%s"}, ++ ++ {Opt_dio, "dio"}, ++ {Opt_nodio, "nodio"}, ++ ++ {Opt_diropq_a, "diropq=always"}, ++ {Opt_diropq_a, "diropq=a"}, ++ {Opt_diropq_w, "diropq=whiteouted"}, ++ {Opt_diropq_w, "diropq=w"}, ++ ++ {Opt_warn_perm, "warn_perm"}, ++ {Opt_nowarn_perm, "nowarn_perm"}, ++ ++ /* keep them temporary */ ++ {Opt_ignore_silent, "coo=%s"}, ++ {Opt_ignore_silent, "nodlgt"}, ++ {Opt_ignore_silent, "nodirperm1"}, ++ {Opt_ignore_silent, "clean_plink"}, ++ ++#ifdef CONFIG_AUFS_SHWH ++ {Opt_shwh, "shwh"}, ++#endif ++ {Opt_noshwh, "noshwh"}, ++ ++ {Opt_rendir, "rendir=%d"}, ++ ++ {Opt_refrof, "refrof"}, ++ {Opt_norefrof, "norefrof"}, ++ ++ {Opt_verbose, "verbose"}, ++ {Opt_verbose, "v"}, ++ {Opt_noverbose, "noverbose"}, ++ {Opt_noverbose, "quiet"}, ++ {Opt_noverbose, "q"}, ++ {Opt_noverbose, "silent"}, ++ ++ {Opt_sum, "sum"}, ++ {Opt_nosum, "nosum"}, ++ {Opt_wsum, "wsum"}, ++ ++ {Opt_rdcache, "rdcache=%d"}, ++ {Opt_rdblk, "rdblk=%d"}, ++ {Opt_rdblk_def, "rdblk=def"}, ++ {Opt_rdhash, "rdhash=%d"}, ++ {Opt_rdhash_def, "rdhash=def"}, ++ ++ {Opt_wbr_create, "create=%s"}, ++ {Opt_wbr_create, "create_policy=%s"}, ++ {Opt_wbr_copyup, "cpup=%s"}, ++ {Opt_wbr_copyup, "copyup=%s"}, ++ {Opt_wbr_copyup, "copyup_policy=%s"}, ++ ++ /* internal use for the scripts */ ++ {Opt_ignore_silent, "si=%s"}, ++ ++ {Opt_br, "dirs=%s"}, ++ {Opt_ignore, "debug=%d"}, ++ {Opt_ignore, "delete=whiteout"}, ++ {Opt_ignore, "delete=all"}, ++ {Opt_ignore, "imap=%s"}, ++ ++ /* temporary workaround, due to old mount(8)? */ ++ {Opt_ignore_silent, "relatime"}, ++ ++ {Opt_err, NULL} ++}; ++ ++/* ---------------------------------------------------------------------- */ ++ ++static const char *au_parser_pattern(int val, struct match_token *token) ++{ ++ while (token->pattern) { ++ if (token->token == val) ++ return token->pattern; ++ token++; ++ } ++ BUG(); ++ return "??"; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++static match_table_t brperms = { ++ {AuBrPerm_RO, AUFS_BRPERM_RO}, ++ {AuBrPerm_RR, AUFS_BRPERM_RR}, ++ {AuBrPerm_RW, AUFS_BRPERM_RW}, ++ ++ {AuBrPerm_ROWH, AUFS_BRPERM_ROWH}, ++ {AuBrPerm_RRWH, AUFS_BRPERM_RRWH}, ++ {AuBrPerm_RWNoLinkWH, AUFS_BRPERM_RWNLWH}, ++ ++ {AuBrPerm_ROWH, "nfsro"}, ++ {AuBrPerm_RO, NULL} ++}; ++ ++static int noinline_for_stack br_perm_val(char *perm) ++{ ++ int val; ++ substring_t args[MAX_OPT_ARGS]; ++ ++ val = match_token(perm, brperms, args); ++ return val; ++} ++ ++const char *au_optstr_br_perm(int brperm) ++{ ++ return au_parser_pattern(brperm, (void *)brperms); ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++static match_table_t udbalevel = { ++ {AuOpt_UDBA_REVAL, "reval"}, ++ {AuOpt_UDBA_NONE, "none"}, ++#ifdef CONFIG_AUFS_HNOTIFY ++ {AuOpt_UDBA_HNOTIFY, "notify"}, /* abstraction */ ++#ifdef CONFIG_AUFS_HFSNOTIFY ++ {AuOpt_UDBA_HNOTIFY, "fsnotify"}, ++#endif ++#endif ++ {-1, NULL} ++}; ++ ++static int noinline_for_stack udba_val(char *str) ++{ ++ substring_t args[MAX_OPT_ARGS]; ++ ++ return match_token(str, udbalevel, args); ++} ++ ++const char *au_optstr_udba(int udba) ++{ ++ return au_parser_pattern(udba, (void *)udbalevel); ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++static match_table_t au_wbr_create_policy = { ++ {AuWbrCreate_TDP, "tdp"}, ++ {AuWbrCreate_TDP, "top-down-parent"}, ++ {AuWbrCreate_RR, "rr"}, ++ {AuWbrCreate_RR, "round-robin"}, ++ {AuWbrCreate_MFS, "mfs"}, ++ {AuWbrCreate_MFS, "most-free-space"}, ++ {AuWbrCreate_MFSV, "mfs:%d"}, ++ {AuWbrCreate_MFSV, "most-free-space:%d"}, ++ ++ {AuWbrCreate_MFSRR, "mfsrr:%d"}, ++ {AuWbrCreate_MFSRRV, "mfsrr:%d:%d"}, ++ {AuWbrCreate_PMFS, "pmfs"}, ++ {AuWbrCreate_PMFSV, "pmfs:%d"}, ++ ++ {-1, NULL} ++}; ++ ++/* ++ * cf. linux/lib/parser.c and cmdline.c ++ * gave up calling memparse() since it uses simple_strtoull() instead of ++ * strict_...(). ++ */ ++static int noinline_for_stack ++au_match_ull(substring_t *s, unsigned long long *result) ++{ ++ int err; ++ unsigned int len; ++ char a[32]; ++ ++ err = -ERANGE; ++ len = s->to - s->from; ++ if (len + 1 <= sizeof(a)) { ++ memcpy(a, s->from, len); ++ a[len] = '\0'; ++ err = strict_strtoull(a, 0, result); ++ } ++ return err; ++} ++ ++static int au_wbr_mfs_wmark(substring_t *arg, char *str, ++ struct au_opt_wbr_create *create) ++{ ++ int err; ++ unsigned long long ull; ++ ++ err = 0; ++ if (!au_match_ull(arg, &ull)) ++ create->mfsrr_watermark = ull; ++ else { ++ pr_err("bad integer in %s\n", str); ++ err = -EINVAL; ++ } ++ ++ return err; ++} ++ ++static int au_wbr_mfs_sec(substring_t *arg, char *str, ++ struct au_opt_wbr_create *create) ++{ ++ int n, err; ++ ++ err = 0; ++ if (!match_int(arg, &n) && 0 <= n && n <= AUFS_MFS_MAX_SEC) ++ create->mfs_second = n; ++ else { ++ pr_err("bad integer in %s\n", str); ++ err = -EINVAL; ++ } ++ ++ return err; ++} ++ ++static int noinline_for_stack ++au_wbr_create_val(char *str, struct au_opt_wbr_create *create) ++{ ++ int err, e; ++ substring_t args[MAX_OPT_ARGS]; ++ ++ err = match_token(str, au_wbr_create_policy, args); ++ create->wbr_create = err; ++ switch (err) { ++ case AuWbrCreate_MFSRRV: ++ e = au_wbr_mfs_wmark(&args[0], str, create); ++ if (!e) ++ e = au_wbr_mfs_sec(&args[1], str, create); ++ if (unlikely(e)) ++ err = e; ++ break; ++ case AuWbrCreate_MFSRR: ++ e = au_wbr_mfs_wmark(&args[0], str, create); ++ if (unlikely(e)) { ++ err = e; ++ break; ++ } ++ /*FALLTHROUGH*/ ++ case AuWbrCreate_MFS: ++ case AuWbrCreate_PMFS: ++ create->mfs_second = AUFS_MFS_DEF_SEC; ++ break; ++ case AuWbrCreate_MFSV: ++ case AuWbrCreate_PMFSV: ++ e = au_wbr_mfs_sec(&args[0], str, create); ++ if (unlikely(e)) ++ err = e; ++ break; ++ } ++ ++ return err; ++} ++ ++const char *au_optstr_wbr_create(int wbr_create) ++{ ++ return au_parser_pattern(wbr_create, (void *)au_wbr_create_policy); ++} ++ ++static match_table_t au_wbr_copyup_policy = { ++ {AuWbrCopyup_TDP, "tdp"}, ++ {AuWbrCopyup_TDP, "top-down-parent"}, ++ {AuWbrCopyup_BUP, "bup"}, ++ {AuWbrCopyup_BUP, "bottom-up-parent"}, ++ {AuWbrCopyup_BU, "bu"}, ++ {AuWbrCopyup_BU, "bottom-up"}, ++ {-1, NULL} ++}; ++ ++static int noinline_for_stack au_wbr_copyup_val(char *str) ++{ ++ substring_t args[MAX_OPT_ARGS]; ++ ++ return match_token(str, au_wbr_copyup_policy, args); ++} ++ ++const char *au_optstr_wbr_copyup(int wbr_copyup) ++{ ++ return au_parser_pattern(wbr_copyup, (void *)au_wbr_copyup_policy); ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++static const int lkup_dirflags = LOOKUP_FOLLOW | LOOKUP_DIRECTORY; ++ ++static void dump_opts(struct au_opts *opts) ++{ ++#ifdef CONFIG_AUFS_DEBUG ++ /* reduce stack space */ ++ union { ++ struct au_opt_add *add; ++ struct au_opt_del *del; ++ struct au_opt_mod *mod; ++ struct au_opt_xino *xino; ++ struct au_opt_xino_itrunc *xino_itrunc; ++ struct au_opt_wbr_create *create; ++ } u; ++ struct au_opt *opt; ++ ++ opt = opts->opt; ++ while (opt->type != Opt_tail) { ++ switch (opt->type) { ++ case Opt_add: ++ u.add = &opt->add; ++ AuDbg("add {b%d, %s, 0x%x, %p}\n", ++ u.add->bindex, u.add->pathname, u.add->perm, ++ u.add->path.dentry); ++ break; ++ case Opt_del: ++ case Opt_idel: ++ u.del = &opt->del; ++ AuDbg("del {%s, %p}\n", ++ u.del->pathname, u.del->h_path.dentry); ++ break; ++ case Opt_mod: ++ case Opt_imod: ++ u.mod = &opt->mod; ++ AuDbg("mod {%s, 0x%x, %p}\n", ++ u.mod->path, u.mod->perm, u.mod->h_root); ++ break; ++ case Opt_append: ++ u.add = &opt->add; ++ AuDbg("append {b%d, %s, 0x%x, %p}\n", ++ u.add->bindex, u.add->pathname, u.add->perm, ++ u.add->path.dentry); ++ break; ++ case Opt_prepend: ++ u.add = &opt->add; ++ AuDbg("prepend {b%d, %s, 0x%x, %p}\n", ++ u.add->bindex, u.add->pathname, u.add->perm, ++ u.add->path.dentry); ++ break; ++ case Opt_dirwh: ++ AuDbg("dirwh %d\n", opt->dirwh); ++ break; ++ case Opt_rdcache: ++ AuDbg("rdcache %d\n", opt->rdcache); ++ break; ++ case Opt_rdblk: ++ AuDbg("rdblk %u\n", opt->rdblk); ++ break; ++ case Opt_rdblk_def: ++ AuDbg("rdblk_def\n"); ++ break; ++ case Opt_rdhash: ++ AuDbg("rdhash %u\n", opt->rdhash); ++ break; ++ case Opt_rdhash_def: ++ AuDbg("rdhash_def\n"); ++ break; ++ case Opt_xino: ++ u.xino = &opt->xino; ++ AuDbg("xino {%s %.*s}\n", ++ u.xino->path, ++ AuDLNPair(u.xino->file->f_dentry)); ++ break; ++ case Opt_trunc_xino: ++ AuLabel(trunc_xino); ++ break; ++ case Opt_notrunc_xino: ++ AuLabel(notrunc_xino); ++ break; ++ case Opt_trunc_xino_path: ++ case Opt_itrunc_xino: ++ u.xino_itrunc = &opt->xino_itrunc; ++ AuDbg("trunc_xino %d\n", u.xino_itrunc->bindex); ++ break; ++ ++ case Opt_noxino: ++ AuLabel(noxino); ++ break; ++ case Opt_trunc_xib: ++ AuLabel(trunc_xib); ++ break; ++ case Opt_notrunc_xib: ++ AuLabel(notrunc_xib); ++ break; ++ case Opt_shwh: ++ AuLabel(shwh); ++ break; ++ case Opt_noshwh: ++ AuLabel(noshwh); ++ break; ++ case Opt_plink: ++ AuLabel(plink); ++ break; ++ case Opt_noplink: ++ AuLabel(noplink); ++ break; ++ case Opt_list_plink: ++ AuLabel(list_plink); ++ break; ++ case Opt_udba: ++ AuDbg("udba %d, %s\n", ++ opt->udba, au_optstr_udba(opt->udba)); ++ break; ++ case Opt_dio: ++ AuLabel(dio); ++ break; ++ case Opt_nodio: ++ AuLabel(nodio); ++ break; ++ case Opt_diropq_a: ++ AuLabel(diropq_a); ++ break; ++ case Opt_diropq_w: ++ AuLabel(diropq_w); ++ break; ++ case Opt_warn_perm: ++ AuLabel(warn_perm); ++ break; ++ case Opt_nowarn_perm: ++ AuLabel(nowarn_perm); ++ break; ++ case Opt_refrof: ++ AuLabel(refrof); ++ break; ++ case Opt_norefrof: ++ AuLabel(norefrof); ++ break; ++ case Opt_verbose: ++ AuLabel(verbose); ++ break; ++ case Opt_noverbose: ++ AuLabel(noverbose); ++ break; ++ case Opt_sum: ++ AuLabel(sum); ++ break; ++ case Opt_nosum: ++ AuLabel(nosum); ++ break; ++ case Opt_wsum: ++ AuLabel(wsum); ++ break; ++ case Opt_wbr_create: ++ u.create = &opt->wbr_create; ++ AuDbg("create %d, %s\n", u.create->wbr_create, ++ au_optstr_wbr_create(u.create->wbr_create)); ++ switch (u.create->wbr_create) { ++ case AuWbrCreate_MFSV: ++ case AuWbrCreate_PMFSV: ++ AuDbg("%d sec\n", u.create->mfs_second); ++ break; ++ case AuWbrCreate_MFSRR: ++ AuDbg("%llu watermark\n", ++ u.create->mfsrr_watermark); ++ break; ++ case AuWbrCreate_MFSRRV: ++ AuDbg("%llu watermark, %d sec\n", ++ u.create->mfsrr_watermark, ++ u.create->mfs_second); ++ break; ++ } ++ break; ++ case Opt_wbr_copyup: ++ AuDbg("copyup %d, %s\n", opt->wbr_copyup, ++ au_optstr_wbr_copyup(opt->wbr_copyup)); ++ break; ++ default: ++ BUG(); ++ } ++ opt++; ++ } ++#endif ++} ++ ++void au_opts_free(struct au_opts *opts) ++{ ++ struct au_opt *opt; ++ ++ opt = opts->opt; ++ while (opt->type != Opt_tail) { ++ switch (opt->type) { ++ case Opt_add: ++ case Opt_append: ++ case Opt_prepend: ++ path_put(&opt->add.path); ++ break; ++ case Opt_del: ++ case Opt_idel: ++ path_put(&opt->del.h_path); ++ break; ++ case Opt_mod: ++ case Opt_imod: ++ dput(opt->mod.h_root); ++ break; ++ case Opt_xino: ++ fput(opt->xino.file); ++ break; ++ } ++ opt++; ++ } ++} ++ ++static int opt_add(struct au_opt *opt, char *opt_str, unsigned long sb_flags, ++ aufs_bindex_t bindex) ++{ ++ int err; ++ struct au_opt_add *add = &opt->add; ++ char *p; ++ ++ add->bindex = bindex; ++ add->perm = AuBrPerm_Last; ++ add->pathname = opt_str; ++ p = strchr(opt_str, '='); ++ if (p) { ++ *p++ = 0; ++ if (*p) ++ add->perm = br_perm_val(p); ++ } ++ ++ err = vfsub_kern_path(add->pathname, lkup_dirflags, &add->path); ++ if (!err) { ++ if (!p) { ++ add->perm = AuBrPerm_RO; ++ if (au_test_fs_rr(add->path.dentry->d_sb)) ++ add->perm = AuBrPerm_RR; ++ else if (!bindex && !(sb_flags & MS_RDONLY)) ++ add->perm = AuBrPerm_RW; ++ } ++ opt->type = Opt_add; ++ goto out; ++ } ++ pr_err("lookup failed %s (%d)\n", add->pathname, err); ++ err = -EINVAL; ++ ++out: ++ return err; ++} ++ ++static int au_opts_parse_del(struct au_opt_del *del, substring_t args[]) ++{ ++ int err; ++ ++ del->pathname = args[0].from; ++ AuDbg("del path %s\n", del->pathname); ++ ++ err = vfsub_kern_path(del->pathname, lkup_dirflags, &del->h_path); ++ if (unlikely(err)) ++ pr_err("lookup failed %s (%d)\n", del->pathname, err); ++ ++ return err; ++} ++ ++#if 0 /* reserved for future use */ ++static int au_opts_parse_idel(struct super_block *sb, aufs_bindex_t bindex, ++ struct au_opt_del *del, substring_t args[]) ++{ ++ int err; ++ struct dentry *root; ++ ++ err = -EINVAL; ++ root = sb->s_root; ++ aufs_read_lock(root, AuLock_FLUSH); ++ if (bindex < 0 || au_sbend(sb) < bindex) { ++ pr_err("out of bounds, %d\n", bindex); ++ goto out; ++ } ++ ++ err = 0; ++ del->h_path.dentry = dget(au_h_dptr(root, bindex)); ++ del->h_path.mnt = mntget(au_sbr_mnt(sb, bindex)); ++ ++out: ++ aufs_read_unlock(root, !AuLock_IR); ++ return err; ++} ++#endif ++ ++static int noinline_for_stack ++au_opts_parse_mod(struct au_opt_mod *mod, substring_t args[]) ++{ ++ int err; ++ struct path path; ++ char *p; ++ ++ err = -EINVAL; ++ mod->path = args[0].from; ++ p = strchr(mod->path, '='); ++ if (unlikely(!p)) { ++ pr_err("no permssion %s\n", args[0].from); ++ goto out; ++ } ++ ++ *p++ = 0; ++ err = vfsub_kern_path(mod->path, lkup_dirflags, &path); ++ if (unlikely(err)) { ++ pr_err("lookup failed %s (%d)\n", mod->path, err); ++ goto out; ++ } ++ ++ mod->perm = br_perm_val(p); ++ AuDbg("mod path %s, perm 0x%x, %s\n", mod->path, mod->perm, p); ++ mod->h_root = dget(path.dentry); ++ path_put(&path); ++ ++out: ++ return err; ++} ++ ++#if 0 /* reserved for future use */ ++static int au_opts_parse_imod(struct super_block *sb, aufs_bindex_t bindex, ++ struct au_opt_mod *mod, substring_t args[]) ++{ ++ int err; ++ struct dentry *root; ++ ++ err = -EINVAL; ++ root = sb->s_root; ++ aufs_read_lock(root, AuLock_FLUSH); ++ if (bindex < 0 || au_sbend(sb) < bindex) { ++ pr_err("out of bounds, %d\n", bindex); ++ goto out; ++ } ++ ++ err = 0; ++ mod->perm = br_perm_val(args[1].from); ++ AuDbg("mod path %s, perm 0x%x, %s\n", ++ mod->path, mod->perm, args[1].from); ++ mod->h_root = dget(au_h_dptr(root, bindex)); ++ ++out: ++ aufs_read_unlock(root, !AuLock_IR); ++ return err; ++} ++#endif ++ ++static int au_opts_parse_xino(struct super_block *sb, struct au_opt_xino *xino, ++ substring_t args[]) ++{ ++ int err; ++ struct file *file; ++ ++ file = au_xino_create(sb, args[0].from, /*silent*/0); ++ err = PTR_ERR(file); ++ if (IS_ERR(file)) ++ goto out; ++ ++ err = -EINVAL; ++ if (unlikely(file->f_dentry->d_sb == sb)) { ++ fput(file); ++ pr_err("%s must be outside\n", args[0].from); ++ goto out; ++ } ++ ++ err = 0; ++ xino->file = file; ++ xino->path = args[0].from; ++ ++out: ++ return err; ++} ++ ++static int noinline_for_stack ++au_opts_parse_xino_itrunc_path(struct super_block *sb, ++ struct au_opt_xino_itrunc *xino_itrunc, ++ substring_t args[]) ++{ ++ int err; ++ aufs_bindex_t bend, bindex; ++ struct path path; ++ struct dentry *root; ++ ++ err = vfsub_kern_path(args[0].from, lkup_dirflags, &path); ++ if (unlikely(err)) { ++ pr_err("lookup failed %s (%d)\n", args[0].from, err); ++ goto out; ++ } ++ ++ xino_itrunc->bindex = -1; ++ root = sb->s_root; ++ aufs_read_lock(root, AuLock_FLUSH); ++ bend = au_sbend(sb); ++ for (bindex = 0; bindex <= bend; bindex++) { ++ if (au_h_dptr(root, bindex) == path.dentry) { ++ xino_itrunc->bindex = bindex; ++ break; ++ } ++ } ++ aufs_read_unlock(root, !AuLock_IR); ++ path_put(&path); ++ ++ if (unlikely(xino_itrunc->bindex < 0)) { ++ pr_err("no such branch %s\n", args[0].from); ++ err = -EINVAL; ++ } ++ ++out: ++ return err; ++} ++ ++/* called without aufs lock */ ++int au_opts_parse(struct super_block *sb, char *str, struct au_opts *opts) ++{ ++ int err, n, token; ++ aufs_bindex_t bindex; ++ unsigned char skipped; ++ struct dentry *root; ++ struct au_opt *opt, *opt_tail; ++ char *opt_str; ++ /* reduce the stack space */ ++ union { ++ struct au_opt_xino_itrunc *xino_itrunc; ++ struct au_opt_wbr_create *create; ++ } u; ++ struct { ++ substring_t args[MAX_OPT_ARGS]; ++ } *a; ++ ++ err = -ENOMEM; ++ a = kmalloc(sizeof(*a), GFP_NOFS); ++ if (unlikely(!a)) ++ goto out; ++ ++ root = sb->s_root; ++ err = 0; ++ bindex = 0; ++ opt = opts->opt; ++ opt_tail = opt + opts->max_opt - 1; ++ opt->type = Opt_tail; ++ while (!err && (opt_str = strsep(&str, ",")) && *opt_str) { ++ err = -EINVAL; ++ skipped = 0; ++ token = match_token(opt_str, options, a->args); ++ switch (token) { ++ case Opt_br: ++ err = 0; ++ while (!err && (opt_str = strsep(&a->args[0].from, ":")) ++ && *opt_str) { ++ err = opt_add(opt, opt_str, opts->sb_flags, ++ bindex++); ++ if (unlikely(!err && ++opt > opt_tail)) { ++ err = -E2BIG; ++ break; ++ } ++ opt->type = Opt_tail; ++ skipped = 1; ++ } ++ break; ++ case Opt_add: ++ if (unlikely(match_int(&a->args[0], &n))) { ++ pr_err("bad integer in %s\n", opt_str); ++ break; ++ } ++ bindex = n; ++ err = opt_add(opt, a->args[1].from, opts->sb_flags, ++ bindex); ++ if (!err) ++ opt->type = token; ++ break; ++ case Opt_append: ++ err = opt_add(opt, a->args[0].from, opts->sb_flags, ++ /*dummy bindex*/1); ++ if (!err) ++ opt->type = token; ++ break; ++ case Opt_prepend: ++ err = opt_add(opt, a->args[0].from, opts->sb_flags, ++ /*bindex*/0); ++ if (!err) ++ opt->type = token; ++ break; ++ case Opt_del: ++ err = au_opts_parse_del(&opt->del, a->args); ++ if (!err) ++ opt->type = token; ++ break; ++#if 0 /* reserved for future use */ ++ case Opt_idel: ++ del->pathname = "(indexed)"; ++ if (unlikely(match_int(&args[0], &n))) { ++ pr_err("bad integer in %s\n", opt_str); ++ break; ++ } ++ err = au_opts_parse_idel(sb, n, &opt->del, a->args); ++ if (!err) ++ opt->type = token; ++ break; ++#endif ++ case Opt_mod: ++ err = au_opts_parse_mod(&opt->mod, a->args); ++ if (!err) ++ opt->type = token; ++ break; ++#ifdef IMOD /* reserved for future use */ ++ case Opt_imod: ++ u.mod->path = "(indexed)"; ++ if (unlikely(match_int(&a->args[0], &n))) { ++ pr_err("bad integer in %s\n", opt_str); ++ break; ++ } ++ err = au_opts_parse_imod(sb, n, &opt->mod, a->args); ++ if (!err) ++ opt->type = token; ++ break; ++#endif ++ case Opt_xino: ++ err = au_opts_parse_xino(sb, &opt->xino, a->args); ++ if (!err) ++ opt->type = token; ++ break; ++ ++ case Opt_trunc_xino_path: ++ err = au_opts_parse_xino_itrunc_path ++ (sb, &opt->xino_itrunc, a->args); ++ if (!err) ++ opt->type = token; ++ break; ++ ++ case Opt_itrunc_xino: ++ u.xino_itrunc = &opt->xino_itrunc; ++ if (unlikely(match_int(&a->args[0], &n))) { ++ pr_err("bad integer in %s\n", opt_str); ++ break; ++ } ++ u.xino_itrunc->bindex = n; ++ aufs_read_lock(root, AuLock_FLUSH); ++ if (n < 0 || au_sbend(sb) < n) { ++ pr_err("out of bounds, %d\n", n); ++ aufs_read_unlock(root, !AuLock_IR); ++ break; ++ } ++ aufs_read_unlock(root, !AuLock_IR); ++ err = 0; ++ opt->type = token; ++ break; ++ ++ case Opt_dirwh: ++ if (unlikely(match_int(&a->args[0], &opt->dirwh))) ++ break; ++ err = 0; ++ opt->type = token; ++ break; ++ ++ case Opt_rdcache: ++ if (unlikely(match_int(&a->args[0], &n))) { ++ pr_err("bad integer in %s\n", opt_str); ++ break; ++ } ++ if (unlikely(n > AUFS_RDCACHE_MAX)) { ++ pr_err("rdcache must be smaller than %d\n", ++ AUFS_RDCACHE_MAX); ++ break; ++ } ++ opt->rdcache = n; ++ err = 0; ++ opt->type = token; ++ break; ++ case Opt_rdblk: ++ if (unlikely(match_int(&a->args[0], &n) ++ || n < 0 ++ || n > KMALLOC_MAX_SIZE)) { ++ pr_err("bad integer in %s\n", opt_str); ++ break; ++ } ++ if (unlikely(n && n < NAME_MAX)) { ++ pr_err("rdblk must be larger than %d\n", ++ NAME_MAX); ++ break; ++ } ++ opt->rdblk = n; ++ err = 0; ++ opt->type = token; ++ break; ++ case Opt_rdhash: ++ if (unlikely(match_int(&a->args[0], &n) ++ || n < 0 ++ || n * sizeof(struct hlist_head) ++ > KMALLOC_MAX_SIZE)) { ++ pr_err("bad integer in %s\n", opt_str); ++ break; ++ } ++ opt->rdhash = n; ++ err = 0; ++ opt->type = token; ++ break; ++ ++ case Opt_trunc_xino: ++ case Opt_notrunc_xino: ++ case Opt_noxino: ++ case Opt_trunc_xib: ++ case Opt_notrunc_xib: ++ case Opt_shwh: ++ case Opt_noshwh: ++ case Opt_plink: ++ case Opt_noplink: ++ case Opt_list_plink: ++ case Opt_dio: ++ case Opt_nodio: ++ case Opt_diropq_a: ++ case Opt_diropq_w: ++ case Opt_warn_perm: ++ case Opt_nowarn_perm: ++ case Opt_refrof: ++ case Opt_norefrof: ++ case Opt_verbose: ++ case Opt_noverbose: ++ case Opt_sum: ++ case Opt_nosum: ++ case Opt_wsum: ++ case Opt_rdblk_def: ++ case Opt_rdhash_def: ++ err = 0; ++ opt->type = token; ++ break; ++ ++ case Opt_udba: ++ opt->udba = udba_val(a->args[0].from); ++ if (opt->udba >= 0) { ++ err = 0; ++ opt->type = token; ++ } else ++ pr_err("wrong value, %s\n", opt_str); ++ break; ++ ++ case Opt_wbr_create: ++ u.create = &opt->wbr_create; ++ u.create->wbr_create ++ = au_wbr_create_val(a->args[0].from, u.create); ++ if (u.create->wbr_create >= 0) { ++ err = 0; ++ opt->type = token; ++ } else ++ pr_err("wrong value, %s\n", opt_str); ++ break; ++ case Opt_wbr_copyup: ++ opt->wbr_copyup = au_wbr_copyup_val(a->args[0].from); ++ if (opt->wbr_copyup >= 0) { ++ err = 0; ++ opt->type = token; ++ } else ++ pr_err("wrong value, %s\n", opt_str); ++ break; ++ ++ case Opt_ignore: ++ pr_warning("ignored %s\n", opt_str); ++ /*FALLTHROUGH*/ ++ case Opt_ignore_silent: ++ skipped = 1; ++ err = 0; ++ break; ++ case Opt_err: ++ pr_err("unknown option %s\n", opt_str); ++ break; ++ } ++ ++ if (!err && !skipped) { ++ if (unlikely(++opt > opt_tail)) { ++ err = -E2BIG; ++ opt--; ++ opt->type = Opt_tail; ++ break; ++ } ++ opt->type = Opt_tail; ++ } ++ } ++ ++ kfree(a); ++ dump_opts(opts); ++ if (unlikely(err)) ++ au_opts_free(opts); ++ ++out: ++ return err; ++} ++ ++static int au_opt_wbr_create(struct super_block *sb, ++ struct au_opt_wbr_create *create) ++{ ++ int err; ++ struct au_sbinfo *sbinfo; ++ ++ SiMustWriteLock(sb); ++ ++ err = 1; /* handled */ ++ sbinfo = au_sbi(sb); ++ if (sbinfo->si_wbr_create_ops->fin) { ++ err = sbinfo->si_wbr_create_ops->fin(sb); ++ if (!err) ++ err = 1; ++ } ++ ++ sbinfo->si_wbr_create = create->wbr_create; ++ sbinfo->si_wbr_create_ops = au_wbr_create_ops + create->wbr_create; ++ switch (create->wbr_create) { ++ case AuWbrCreate_MFSRRV: ++ case AuWbrCreate_MFSRR: ++ sbinfo->si_wbr_mfs.mfsrr_watermark = create->mfsrr_watermark; ++ /*FALLTHROUGH*/ ++ case AuWbrCreate_MFS: ++ case AuWbrCreate_MFSV: ++ case AuWbrCreate_PMFS: ++ case AuWbrCreate_PMFSV: ++ sbinfo->si_wbr_mfs.mfs_expire ++ = msecs_to_jiffies(create->mfs_second * MSEC_PER_SEC); ++ break; ++ } ++ ++ if (sbinfo->si_wbr_create_ops->init) ++ sbinfo->si_wbr_create_ops->init(sb); /* ignore */ ++ ++ return err; ++} ++ ++/* ++ * returns, ++ * plus: processed without an error ++ * zero: unprocessed ++ */ ++static int au_opt_simple(struct super_block *sb, struct au_opt *opt, ++ struct au_opts *opts) ++{ ++ int err; ++ struct au_sbinfo *sbinfo; ++ ++ SiMustWriteLock(sb); ++ ++ err = 1; /* handled */ ++ sbinfo = au_sbi(sb); ++ switch (opt->type) { ++ case Opt_udba: ++ sbinfo->si_mntflags &= ~AuOptMask_UDBA; ++ sbinfo->si_mntflags |= opt->udba; ++ opts->given_udba |= opt->udba; ++ break; ++ ++ case Opt_plink: ++ au_opt_set(sbinfo->si_mntflags, PLINK); ++ break; ++ case Opt_noplink: ++ if (au_opt_test(sbinfo->si_mntflags, PLINK)) ++ au_plink_put(sb, /*verbose*/1); ++ au_opt_clr(sbinfo->si_mntflags, PLINK); ++ break; ++ case Opt_list_plink: ++ if (au_opt_test(sbinfo->si_mntflags, PLINK)) ++ au_plink_list(sb); ++ break; ++ ++ case Opt_dio: ++ au_opt_set(sbinfo->si_mntflags, DIO); ++ au_fset_opts(opts->flags, REFRESH_DYAOP); ++ break; ++ case Opt_nodio: ++ au_opt_clr(sbinfo->si_mntflags, DIO); ++ au_fset_opts(opts->flags, REFRESH_DYAOP); ++ break; ++ ++ case Opt_diropq_a: ++ au_opt_set(sbinfo->si_mntflags, ALWAYS_DIROPQ); ++ break; ++ case Opt_diropq_w: ++ au_opt_clr(sbinfo->si_mntflags, ALWAYS_DIROPQ); ++ break; ++ ++ case Opt_warn_perm: ++ au_opt_set(sbinfo->si_mntflags, WARN_PERM); ++ break; ++ case Opt_nowarn_perm: ++ au_opt_clr(sbinfo->si_mntflags, WARN_PERM); ++ break; ++ ++ case Opt_refrof: ++ au_opt_set(sbinfo->si_mntflags, REFROF); ++ break; ++ case Opt_norefrof: ++ au_opt_clr(sbinfo->si_mntflags, REFROF); ++ break; ++ ++ case Opt_verbose: ++ au_opt_set(sbinfo->si_mntflags, VERBOSE); ++ break; ++ case Opt_noverbose: ++ au_opt_clr(sbinfo->si_mntflags, VERBOSE); ++ break; ++ ++ case Opt_sum: ++ au_opt_set(sbinfo->si_mntflags, SUM); ++ break; ++ case Opt_wsum: ++ au_opt_clr(sbinfo->si_mntflags, SUM); ++ au_opt_set(sbinfo->si_mntflags, SUM_W); ++ case Opt_nosum: ++ au_opt_clr(sbinfo->si_mntflags, SUM); ++ au_opt_clr(sbinfo->si_mntflags, SUM_W); ++ break; ++ ++ case Opt_wbr_create: ++ err = au_opt_wbr_create(sb, &opt->wbr_create); ++ break; ++ case Opt_wbr_copyup: ++ sbinfo->si_wbr_copyup = opt->wbr_copyup; ++ sbinfo->si_wbr_copyup_ops = au_wbr_copyup_ops + opt->wbr_copyup; ++ break; ++ ++ case Opt_dirwh: ++ sbinfo->si_dirwh = opt->dirwh; ++ break; ++ ++ case Opt_rdcache: ++ sbinfo->si_rdcache ++ = msecs_to_jiffies(opt->rdcache * MSEC_PER_SEC); ++ break; ++ case Opt_rdblk: ++ sbinfo->si_rdblk = opt->rdblk; ++ break; ++ case Opt_rdblk_def: ++ sbinfo->si_rdblk = AUFS_RDBLK_DEF; ++ break; ++ case Opt_rdhash: ++ sbinfo->si_rdhash = opt->rdhash; ++ break; ++ case Opt_rdhash_def: ++ sbinfo->si_rdhash = AUFS_RDHASH_DEF; ++ break; ++ ++ case Opt_shwh: ++ au_opt_set(sbinfo->si_mntflags, SHWH); ++ break; ++ case Opt_noshwh: ++ au_opt_clr(sbinfo->si_mntflags, SHWH); ++ break; ++ ++ case Opt_trunc_xino: ++ au_opt_set(sbinfo->si_mntflags, TRUNC_XINO); ++ break; ++ case Opt_notrunc_xino: ++ au_opt_clr(sbinfo->si_mntflags, TRUNC_XINO); ++ break; ++ ++ case Opt_trunc_xino_path: ++ case Opt_itrunc_xino: ++ err = au_xino_trunc(sb, opt->xino_itrunc.bindex); ++ if (!err) ++ err = 1; ++ break; ++ ++ case Opt_trunc_xib: ++ au_fset_opts(opts->flags, TRUNC_XIB); ++ break; ++ case Opt_notrunc_xib: ++ au_fclr_opts(opts->flags, TRUNC_XIB); ++ break; ++ ++ default: ++ err = 0; ++ break; ++ } ++ ++ return err; ++} ++ ++/* ++ * returns tri-state. ++ * plus: processed without an error ++ * zero: unprocessed ++ * minus: error ++ */ ++static int au_opt_br(struct super_block *sb, struct au_opt *opt, ++ struct au_opts *opts) ++{ ++ int err, do_refresh; ++ ++ err = 0; ++ switch (opt->type) { ++ case Opt_append: ++ opt->add.bindex = au_sbend(sb) + 1; ++ if (opt->add.bindex < 0) ++ opt->add.bindex = 0; ++ goto add; ++ case Opt_prepend: ++ opt->add.bindex = 0; ++ add: ++ case Opt_add: ++ err = au_br_add(sb, &opt->add, ++ au_ftest_opts(opts->flags, REMOUNT)); ++ if (!err) { ++ err = 1; ++ au_fset_opts(opts->flags, REFRESH); ++ } ++ break; ++ ++ case Opt_del: ++ case Opt_idel: ++ err = au_br_del(sb, &opt->del, ++ au_ftest_opts(opts->flags, REMOUNT)); ++ if (!err) { ++ err = 1; ++ au_fset_opts(opts->flags, TRUNC_XIB); ++ au_fset_opts(opts->flags, REFRESH); ++ } ++ break; ++ ++ case Opt_mod: ++ case Opt_imod: ++ err = au_br_mod(sb, &opt->mod, ++ au_ftest_opts(opts->flags, REMOUNT), ++ &do_refresh); ++ if (!err) { ++ err = 1; ++ if (do_refresh) ++ au_fset_opts(opts->flags, REFRESH); ++ } ++ break; ++ } ++ ++ return err; ++} ++ ++static int au_opt_xino(struct super_block *sb, struct au_opt *opt, ++ struct au_opt_xino **opt_xino, ++ struct au_opts *opts) ++{ ++ int err; ++ aufs_bindex_t bend, bindex; ++ struct dentry *root, *parent, *h_root; ++ ++ err = 0; ++ switch (opt->type) { ++ case Opt_xino: ++ err = au_xino_set(sb, &opt->xino, ++ !!au_ftest_opts(opts->flags, REMOUNT)); ++ if (unlikely(err)) ++ break; ++ ++ *opt_xino = &opt->xino; ++ au_xino_brid_set(sb, -1); ++ ++ /* safe d_parent access */ ++ parent = opt->xino.file->f_dentry->d_parent; ++ root = sb->s_root; ++ bend = au_sbend(sb); ++ for (bindex = 0; bindex <= bend; bindex++) { ++ h_root = au_h_dptr(root, bindex); ++ if (h_root == parent) { ++ au_xino_brid_set(sb, au_sbr_id(sb, bindex)); ++ break; ++ } ++ } ++ break; ++ ++ case Opt_noxino: ++ au_xino_clr(sb); ++ au_xino_brid_set(sb, -1); ++ *opt_xino = (void *)-1; ++ break; ++ } ++ ++ return err; ++} ++ ++int au_opts_verify(struct super_block *sb, unsigned long sb_flags, ++ unsigned int pending) ++{ ++ int err; ++ aufs_bindex_t bindex, bend; ++ unsigned char do_plink, skip, do_free; ++ struct au_branch *br; ++ struct au_wbr *wbr; ++ struct dentry *root; ++ struct inode *dir, *h_dir; ++ struct au_sbinfo *sbinfo; ++ struct au_hinode *hdir; ++ ++ SiMustAnyLock(sb); ++ ++ sbinfo = au_sbi(sb); ++ AuDebugOn(!(sbinfo->si_mntflags & AuOptMask_UDBA)); ++ ++ if (!(sb_flags & MS_RDONLY)) { ++ if (unlikely(!au_br_writable(au_sbr_perm(sb, 0)))) ++ pr_warning("first branch should be rw\n"); ++ if (unlikely(au_opt_test(sbinfo->si_mntflags, SHWH))) ++ pr_warning("shwh should be used with ro\n"); ++ } ++ ++ if (au_opt_test((sbinfo->si_mntflags | pending), UDBA_HNOTIFY) ++ && !au_opt_test(sbinfo->si_mntflags, XINO)) ++ pr_warning("udba=*notify requires xino\n"); ++ ++ err = 0; ++ root = sb->s_root; ++ dir = root->d_inode; ++ do_plink = !!au_opt_test(sbinfo->si_mntflags, PLINK); ++ bend = au_sbend(sb); ++ for (bindex = 0; !err && bindex <= bend; bindex++) { ++ skip = 0; ++ h_dir = au_h_iptr(dir, bindex); ++ br = au_sbr(sb, bindex); ++ do_free = 0; ++ ++ wbr = br->br_wbr; ++ if (wbr) ++ wbr_wh_read_lock(wbr); ++ ++ switch (br->br_perm) { ++ case AuBrPerm_RO: ++ case AuBrPerm_ROWH: ++ case AuBrPerm_RR: ++ case AuBrPerm_RRWH: ++ do_free = !!wbr; ++ skip = (!wbr ++ || (!wbr->wbr_whbase ++ && !wbr->wbr_plink ++ && !wbr->wbr_orph)); ++ break; ++ ++ case AuBrPerm_RWNoLinkWH: ++ /* skip = (!br->br_whbase && !br->br_orph); */ ++ skip = (!wbr || !wbr->wbr_whbase); ++ if (skip && wbr) { ++ if (do_plink) ++ skip = !!wbr->wbr_plink; ++ else ++ skip = !wbr->wbr_plink; ++ } ++ break; ++ ++ case AuBrPerm_RW: ++ /* skip = (br->br_whbase && br->br_ohph); */ ++ skip = (wbr && wbr->wbr_whbase); ++ if (skip) { ++ if (do_plink) ++ skip = !!wbr->wbr_plink; ++ else ++ skip = !wbr->wbr_plink; ++ } ++ break; ++ ++ default: ++ BUG(); ++ } ++ if (wbr) ++ wbr_wh_read_unlock(wbr); ++ ++ if (skip) ++ continue; ++ ++ hdir = au_hi(dir, bindex); ++ au_hn_imtx_lock_nested(hdir, AuLsc_I_PARENT); ++ if (wbr) ++ wbr_wh_write_lock(wbr); ++ err = au_wh_init(au_h_dptr(root, bindex), br, sb); ++ if (wbr) ++ wbr_wh_write_unlock(wbr); ++ au_hn_imtx_unlock(hdir); ++ ++ if (!err && do_free) { ++ kfree(wbr); ++ br->br_wbr = NULL; ++ } ++ } ++ ++ return err; ++} ++ ++int au_opts_mount(struct super_block *sb, struct au_opts *opts) ++{ ++ int err; ++ unsigned int tmp; ++ aufs_bindex_t bindex, bend; ++ struct au_opt *opt; ++ struct au_opt_xino *opt_xino, xino; ++ struct au_sbinfo *sbinfo; ++ struct au_branch *br; ++ ++ SiMustWriteLock(sb); ++ ++ err = 0; ++ opt_xino = NULL; ++ opt = opts->opt; ++ while (err >= 0 && opt->type != Opt_tail) ++ err = au_opt_simple(sb, opt++, opts); ++ if (err > 0) ++ err = 0; ++ else if (unlikely(err < 0)) ++ goto out; ++ ++ /* disable xino and udba temporary */ ++ sbinfo = au_sbi(sb); ++ tmp = sbinfo->si_mntflags; ++ au_opt_clr(sbinfo->si_mntflags, XINO); ++ au_opt_set_udba(sbinfo->si_mntflags, UDBA_REVAL); ++ ++ opt = opts->opt; ++ while (err >= 0 && opt->type != Opt_tail) ++ err = au_opt_br(sb, opt++, opts); ++ if (err > 0) ++ err = 0; ++ else if (unlikely(err < 0)) ++ goto out; ++ ++ bend = au_sbend(sb); ++ if (unlikely(bend < 0)) { ++ err = -EINVAL; ++ pr_err("no branches\n"); ++ goto out; ++ } ++ ++ if (au_opt_test(tmp, XINO)) ++ au_opt_set(sbinfo->si_mntflags, XINO); ++ opt = opts->opt; ++ while (!err && opt->type != Opt_tail) ++ err = au_opt_xino(sb, opt++, &opt_xino, opts); ++ if (unlikely(err)) ++ goto out; ++ ++ err = au_opts_verify(sb, sb->s_flags, tmp); ++ if (unlikely(err)) ++ goto out; ++ ++ /* restore xino */ ++ if (au_opt_test(tmp, XINO) && !opt_xino) { ++ xino.file = au_xino_def(sb); ++ err = PTR_ERR(xino.file); ++ if (IS_ERR(xino.file)) ++ goto out; ++ ++ err = au_xino_set(sb, &xino, /*remount*/0); ++ fput(xino.file); ++ if (unlikely(err)) ++ goto out; ++ } ++ ++ /* restore udba */ ++ tmp &= AuOptMask_UDBA; ++ sbinfo->si_mntflags &= ~AuOptMask_UDBA; ++ sbinfo->si_mntflags |= tmp; ++ bend = au_sbend(sb); ++ for (bindex = 0; bindex <= bend; bindex++) { ++ br = au_sbr(sb, bindex); ++ err = au_hnotify_reset_br(tmp, br, br->br_perm); ++ if (unlikely(err)) ++ AuIOErr("hnotify failed on br %d, %d, ignored\n", ++ bindex, err); ++ /* go on even if err */ ++ } ++ if (au_opt_test(tmp, UDBA_HNOTIFY)) { ++ struct inode *dir = sb->s_root->d_inode; ++ au_hn_reset(dir, au_hi_flags(dir, /*isdir*/1) & ~AuHi_XINO); ++ } ++ ++out: ++ return err; ++} ++ ++int au_opts_remount(struct super_block *sb, struct au_opts *opts) ++{ ++ int err, rerr; ++ struct inode *dir; ++ struct au_opt_xino *opt_xino; ++ struct au_opt *opt; ++ struct au_sbinfo *sbinfo; ++ ++ SiMustWriteLock(sb); ++ ++ dir = sb->s_root->d_inode; ++ sbinfo = au_sbi(sb); ++ err = 0; ++ opt_xino = NULL; ++ opt = opts->opt; ++ while (err >= 0 && opt->type != Opt_tail) { ++ err = au_opt_simple(sb, opt, opts); ++ if (!err) ++ err = au_opt_br(sb, opt, opts); ++ if (!err) ++ err = au_opt_xino(sb, opt, &opt_xino, opts); ++ opt++; ++ } ++ if (err > 0) ++ err = 0; ++ AuTraceErr(err); ++ /* go on even err */ ++ ++ rerr = au_opts_verify(sb, opts->sb_flags, /*pending*/0); ++ if (unlikely(rerr && !err)) ++ err = rerr; ++ ++ if (au_ftest_opts(opts->flags, TRUNC_XIB)) { ++ rerr = au_xib_trunc(sb); ++ if (unlikely(rerr && !err)) ++ err = rerr; ++ } ++ ++ /* will be handled by the caller */ ++ if (!au_ftest_opts(opts->flags, REFRESH) ++ && (opts->given_udba || au_opt_test(sbinfo->si_mntflags, XINO))) ++ au_fset_opts(opts->flags, REFRESH); ++ ++ AuDbg("status 0x%x\n", opts->flags); ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++unsigned int au_opt_udba(struct super_block *sb) ++{ ++ return au_mntflags(sb) & AuOptMask_UDBA; ++} +diff -urN a/fs/aufs/opts.h b/fs/aufs/opts.h +--- a/fs/aufs/opts.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/opts.h 2011-03-06 23:28:02.620413138 +0000 +@@ -0,0 +1,210 @@ ++/* ++ * Copyright (C) 2005-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * mount options/flags ++ */ ++ ++#ifndef __AUFS_OPTS_H__ ++#define __AUFS_OPTS_H__ ++ ++#ifdef __KERNEL__ ++ ++#include ++#include ++ ++struct file; ++struct super_block; ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* mount flags */ ++#define AuOpt_XINO 1 /* external inode number bitmap ++ and translation table */ ++#define AuOpt_TRUNC_XINO (1 << 1) /* truncate xino files */ ++#define AuOpt_UDBA_NONE (1 << 2) /* users direct branch access */ ++#define AuOpt_UDBA_REVAL (1 << 3) ++#define AuOpt_UDBA_HNOTIFY (1 << 4) ++#define AuOpt_SHWH (1 << 5) /* show whiteout */ ++#define AuOpt_PLINK (1 << 6) /* pseudo-link */ ++#define AuOpt_DIRPERM1 (1 << 7) /* unimplemented */ ++#define AuOpt_REFROF (1 << 8) /* unimplemented */ ++#define AuOpt_ALWAYS_DIROPQ (1 << 9) /* policy to creating diropq */ ++#define AuOpt_SUM (1 << 10) /* summation for statfs(2) */ ++#define AuOpt_SUM_W (1 << 11) /* unimplemented */ ++#define AuOpt_WARN_PERM (1 << 12) /* warn when add-branch */ ++#define AuOpt_VERBOSE (1 << 13) /* busy inode when del-branch */ ++#define AuOpt_DIO (1 << 14) /* direct io */ ++ ++#ifndef CONFIG_AUFS_HNOTIFY ++#undef AuOpt_UDBA_HNOTIFY ++#define AuOpt_UDBA_HNOTIFY 0 ++#endif ++#ifndef CONFIG_AUFS_SHWH ++#undef AuOpt_SHWH ++#define AuOpt_SHWH 0 ++#endif ++ ++#define AuOpt_Def (AuOpt_XINO \ ++ | AuOpt_UDBA_REVAL \ ++ | AuOpt_PLINK \ ++ /* | AuOpt_DIRPERM1 */ \ ++ | AuOpt_WARN_PERM) ++#define AuOptMask_UDBA (AuOpt_UDBA_NONE \ ++ | AuOpt_UDBA_REVAL \ ++ | AuOpt_UDBA_HNOTIFY) ++ ++#define au_opt_test(flags, name) (flags & AuOpt_##name) ++#define au_opt_set(flags, name) do { \ ++ BUILD_BUG_ON(AuOpt_##name & AuOptMask_UDBA); \ ++ ((flags) |= AuOpt_##name); \ ++} while (0) ++#define au_opt_set_udba(flags, name) do { \ ++ (flags) &= ~AuOptMask_UDBA; \ ++ ((flags) |= AuOpt_##name); \ ++} while (0) ++#define au_opt_clr(flags, name) do { \ ++ ((flags) &= ~AuOpt_##name); \ ++} while (0) ++ ++static inline unsigned int au_opts_plink(unsigned int mntflags) ++{ ++#ifdef CONFIG_PROC_FS ++ return mntflags; ++#else ++ return mntflags & ~AuOpt_PLINK; ++#endif ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* policies to select one among multiple writable branches */ ++enum { ++ AuWbrCreate_TDP, /* top down parent */ ++ AuWbrCreate_RR, /* round robin */ ++ AuWbrCreate_MFS, /* most free space */ ++ AuWbrCreate_MFSV, /* mfs with seconds */ ++ AuWbrCreate_MFSRR, /* mfs then rr */ ++ AuWbrCreate_MFSRRV, /* mfs then rr with seconds */ ++ AuWbrCreate_PMFS, /* parent and mfs */ ++ AuWbrCreate_PMFSV, /* parent and mfs with seconds */ ++ ++ AuWbrCreate_Def = AuWbrCreate_TDP ++}; ++ ++enum { ++ AuWbrCopyup_TDP, /* top down parent */ ++ AuWbrCopyup_BUP, /* bottom up parent */ ++ AuWbrCopyup_BU, /* bottom up */ ++ ++ AuWbrCopyup_Def = AuWbrCopyup_TDP ++}; ++ ++/* ---------------------------------------------------------------------- */ ++ ++struct au_opt_add { ++ aufs_bindex_t bindex; ++ char *pathname; ++ int perm; ++ struct path path; ++}; ++ ++struct au_opt_del { ++ char *pathname; ++ struct path h_path; ++}; ++ ++struct au_opt_mod { ++ char *path; ++ int perm; ++ struct dentry *h_root; ++}; ++ ++struct au_opt_xino { ++ char *path; ++ struct file *file; ++}; ++ ++struct au_opt_xino_itrunc { ++ aufs_bindex_t bindex; ++}; ++ ++struct au_opt_wbr_create { ++ int wbr_create; ++ int mfs_second; ++ unsigned long long mfsrr_watermark; ++}; ++ ++struct au_opt { ++ int type; ++ union { ++ struct au_opt_xino xino; ++ struct au_opt_xino_itrunc xino_itrunc; ++ struct au_opt_add add; ++ struct au_opt_del del; ++ struct au_opt_mod mod; ++ int dirwh; ++ int rdcache; ++ unsigned int rdblk; ++ unsigned int rdhash; ++ int udba; ++ struct au_opt_wbr_create wbr_create; ++ int wbr_copyup; ++ }; ++}; ++ ++/* opts flags */ ++#define AuOpts_REMOUNT 1 ++#define AuOpts_REFRESH (1 << 1) ++#define AuOpts_TRUNC_XIB (1 << 2) ++#define AuOpts_REFRESH_DYAOP (1 << 3) ++#define au_ftest_opts(flags, name) ((flags) & AuOpts_##name) ++#define au_fset_opts(flags, name) \ ++ do { (flags) |= AuOpts_##name; } while (0) ++#define au_fclr_opts(flags, name) \ ++ do { (flags) &= ~AuOpts_##name; } while (0) ++ ++struct au_opts { ++ struct au_opt *opt; ++ int max_opt; ++ ++ unsigned int given_udba; ++ unsigned int flags; ++ unsigned long sb_flags; ++}; ++ ++/* ---------------------------------------------------------------------- */ ++ ++const char *au_optstr_br_perm(int brperm); ++const char *au_optstr_udba(int udba); ++const char *au_optstr_wbr_copyup(int wbr_copyup); ++const char *au_optstr_wbr_create(int wbr_create); ++ ++void au_opts_free(struct au_opts *opts); ++int au_opts_parse(struct super_block *sb, char *str, struct au_opts *opts); ++int au_opts_verify(struct super_block *sb, unsigned long sb_flags, ++ unsigned int pending); ++int au_opts_mount(struct super_block *sb, struct au_opts *opts); ++int au_opts_remount(struct super_block *sb, struct au_opts *opts); ++ ++unsigned int au_opt_udba(struct super_block *sb); ++ ++/* ---------------------------------------------------------------------- */ ++ ++#endif /* __KERNEL__ */ ++#endif /* __AUFS_OPTS_H__ */ +diff -urN a/fs/aufs/plink.c b/fs/aufs/plink.c +--- a/fs/aufs/plink.c 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/plink.c 2011-03-06 23:28:02.616413258 +0000 +@@ -0,0 +1,515 @@ ++/* ++ * Copyright (C) 2005-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * pseudo-link ++ */ ++ ++#include "aufs.h" ++ ++/* ++ * the pseudo-link maintenance mode. ++ * during a user process maintains the pseudo-links, ++ * prohibit adding a new plink and branch manipulation. ++ * ++ * Flags ++ * NOPLM: ++ * For entry functions which will handle plink, and i_mutex is already held ++ * in VFS. ++ * They cannot wait and should return an error at once. ++ * Callers has to check the error. ++ * NOPLMW: ++ * For entry functions which will handle plink, but i_mutex is not held ++ * in VFS. ++ * They can wait the plink maintenance mode to finish. ++ * ++ * They behave like F_SETLK and F_SETLKW. ++ * If the caller never handle plink, then both flags are unnecessary. ++ */ ++ ++int au_plink_maint(struct super_block *sb, int flags) ++{ ++ int err; ++ pid_t pid, ppid; ++ struct au_sbinfo *sbi; ++ ++ SiMustAnyLock(sb); ++ ++ err = 0; ++ if (!au_opt_test(au_mntflags(sb), PLINK)) ++ goto out; ++ ++ sbi = au_sbi(sb); ++ pid = sbi->si_plink_maint_pid; ++ if (!pid || pid == current->pid) ++ goto out; ++ ++ /* todo: it highly depends upon /sbin/mount.aufs */ ++ rcu_read_lock(); ++ ppid = task_pid_vnr(rcu_dereference(current->real_parent)); ++ rcu_read_unlock(); ++ if (pid == ppid) ++ goto out; ++ ++ if (au_ftest_lock(flags, NOPLMW)) { ++ /* if there is no i_mutex lock in VFS, we don't need to wait */ ++ /* AuDebugOn(!lockdep_depth(current)); */ ++ while (sbi->si_plink_maint_pid) { ++ si_read_unlock(sb); ++ /* gave up wake_up_bit() */ ++ wait_event(sbi->si_plink_wq, !sbi->si_plink_maint_pid); ++ ++ if (au_ftest_lock(flags, FLUSH)) ++ au_nwt_flush(&sbi->si_nowait); ++ si_noflush_read_lock(sb); ++ } ++ } else if (au_ftest_lock(flags, NOPLM)) { ++ AuDbg("ppid %d, pid %d\n", ppid, pid); ++ err = -EAGAIN; ++ } ++ ++out: ++ return err; ++} ++ ++void au_plink_maint_leave(struct au_sbinfo *sbinfo) ++{ ++ spin_lock(&sbinfo->si_plink_maint_lock); ++ sbinfo->si_plink_maint_pid = 0; ++ spin_unlock(&sbinfo->si_plink_maint_lock); ++ wake_up_all(&sbinfo->si_plink_wq); ++} ++ ++int au_plink_maint_enter(struct super_block *sb) ++{ ++ int err; ++ struct au_sbinfo *sbinfo; ++ ++ err = 0; ++ sbinfo = au_sbi(sb); ++ /* make sure i am the only one in this fs */ ++ si_write_lock(sb, AuLock_FLUSH); ++ if (au_opt_test(au_mntflags(sb), PLINK)) { ++ spin_lock(&sbinfo->si_plink_maint_lock); ++ if (!sbinfo->si_plink_maint_pid) ++ sbinfo->si_plink_maint_pid = current->pid; ++ else ++ err = -EBUSY; ++ spin_unlock(&sbinfo->si_plink_maint_lock); ++ } ++ si_write_unlock(sb); ++ ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++struct pseudo_link { ++ union { ++ struct list_head list; ++ struct rcu_head rcu; ++ }; ++ struct inode *inode; ++}; ++ ++#ifdef CONFIG_AUFS_DEBUG ++void au_plink_list(struct super_block *sb) ++{ ++ struct au_sbinfo *sbinfo; ++ struct list_head *plink_list; ++ struct pseudo_link *plink; ++ ++ SiMustAnyLock(sb); ++ ++ sbinfo = au_sbi(sb); ++ AuDebugOn(!au_opt_test(au_mntflags(sb), PLINK)); ++ AuDebugOn(au_plink_maint(sb, AuLock_NOPLM)); ++ ++ plink_list = &sbinfo->si_plink.head; ++ rcu_read_lock(); ++ list_for_each_entry_rcu(plink, plink_list, list) ++ AuDbg("%lu\n", plink->inode->i_ino); ++ rcu_read_unlock(); ++} ++#endif ++ ++/* is the inode pseudo-linked? */ ++int au_plink_test(struct inode *inode) ++{ ++ int found; ++ struct au_sbinfo *sbinfo; ++ struct list_head *plink_list; ++ struct pseudo_link *plink; ++ ++ sbinfo = au_sbi(inode->i_sb); ++ AuRwMustAnyLock(&sbinfo->si_rwsem); ++ AuDebugOn(!au_opt_test(au_mntflags(inode->i_sb), PLINK)); ++ AuDebugOn(au_plink_maint(inode->i_sb, AuLock_NOPLM)); ++ ++ found = 0; ++ plink_list = &sbinfo->si_plink.head; ++ rcu_read_lock(); ++ list_for_each_entry_rcu(plink, plink_list, list) ++ if (plink->inode == inode) { ++ found = 1; ++ break; ++ } ++ rcu_read_unlock(); ++ return found; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* ++ * generate a name for plink. ++ * the file will be stored under AUFS_WH_PLINKDIR. ++ */ ++/* 20 is max digits length of ulong 64 */ ++#define PLINK_NAME_LEN ((20 + 1) * 2) ++ ++static int plink_name(char *name, int len, struct inode *inode, ++ aufs_bindex_t bindex) ++{ ++ int rlen; ++ struct inode *h_inode; ++ ++ h_inode = au_h_iptr(inode, bindex); ++ rlen = snprintf(name, len, "%lu.%lu", inode->i_ino, h_inode->i_ino); ++ return rlen; ++} ++ ++struct au_do_plink_lkup_args { ++ struct dentry **errp; ++ struct qstr *tgtname; ++ struct dentry *h_parent; ++ struct au_branch *br; ++}; ++ ++static struct dentry *au_do_plink_lkup(struct qstr *tgtname, ++ struct dentry *h_parent, ++ struct au_branch *br) ++{ ++ struct dentry *h_dentry; ++ struct mutex *h_mtx; ++ ++ h_mtx = &h_parent->d_inode->i_mutex; ++ mutex_lock_nested(h_mtx, AuLsc_I_CHILD2); ++ h_dentry = au_lkup_one(tgtname, h_parent, br, /*nd*/NULL); ++ mutex_unlock(h_mtx); ++ return h_dentry; ++} ++ ++static void au_call_do_plink_lkup(void *args) ++{ ++ struct au_do_plink_lkup_args *a = args; ++ *a->errp = au_do_plink_lkup(a->tgtname, a->h_parent, a->br); ++} ++ ++/* lookup the plink-ed @inode under the branch at @bindex */ ++struct dentry *au_plink_lkup(struct inode *inode, aufs_bindex_t bindex) ++{ ++ struct dentry *h_dentry, *h_parent; ++ struct au_branch *br; ++ struct inode *h_dir; ++ int wkq_err; ++ char a[PLINK_NAME_LEN]; ++ struct qstr tgtname = { ++ .name = a ++ }; ++ ++ AuDebugOn(au_plink_maint(inode->i_sb, AuLock_NOPLM)); ++ ++ br = au_sbr(inode->i_sb, bindex); ++ h_parent = br->br_wbr->wbr_plink; ++ h_dir = h_parent->d_inode; ++ tgtname.len = plink_name(a, sizeof(a), inode, bindex); ++ ++ if (current_fsuid()) { ++ struct au_do_plink_lkup_args args = { ++ .errp = &h_dentry, ++ .tgtname = &tgtname, ++ .h_parent = h_parent, ++ .br = br ++ }; ++ ++ wkq_err = au_wkq_wait(au_call_do_plink_lkup, &args); ++ if (unlikely(wkq_err)) ++ h_dentry = ERR_PTR(wkq_err); ++ } else ++ h_dentry = au_do_plink_lkup(&tgtname, h_parent, br); ++ ++ return h_dentry; ++} ++ ++/* create a pseudo-link */ ++static int do_whplink(struct qstr *tgt, struct dentry *h_parent, ++ struct dentry *h_dentry, struct au_branch *br) ++{ ++ int err; ++ struct path h_path = { ++ .mnt = br->br_mnt ++ }; ++ struct inode *h_dir; ++ ++ h_dir = h_parent->d_inode; ++ mutex_lock_nested(&h_dir->i_mutex, AuLsc_I_CHILD2); ++again: ++ h_path.dentry = au_lkup_one(tgt, h_parent, br, /*nd*/NULL); ++ err = PTR_ERR(h_path.dentry); ++ if (IS_ERR(h_path.dentry)) ++ goto out; ++ ++ err = 0; ++ /* wh.plink dir is not monitored */ ++ /* todo: is it really safe? */ ++ if (h_path.dentry->d_inode ++ && h_path.dentry->d_inode != h_dentry->d_inode) { ++ err = vfsub_unlink(h_dir, &h_path, /*force*/0); ++ dput(h_path.dentry); ++ h_path.dentry = NULL; ++ if (!err) ++ goto again; ++ } ++ if (!err && !h_path.dentry->d_inode) ++ err = vfsub_link(h_dentry, h_dir, &h_path); ++ dput(h_path.dentry); ++ ++out: ++ mutex_unlock(&h_dir->i_mutex); ++ return err; ++} ++ ++struct do_whplink_args { ++ int *errp; ++ struct qstr *tgt; ++ struct dentry *h_parent; ++ struct dentry *h_dentry; ++ struct au_branch *br; ++}; ++ ++static void call_do_whplink(void *args) ++{ ++ struct do_whplink_args *a = args; ++ *a->errp = do_whplink(a->tgt, a->h_parent, a->h_dentry, a->br); ++} ++ ++static int whplink(struct dentry *h_dentry, struct inode *inode, ++ aufs_bindex_t bindex, struct au_branch *br) ++{ ++ int err, wkq_err; ++ struct au_wbr *wbr; ++ struct dentry *h_parent; ++ struct inode *h_dir; ++ char a[PLINK_NAME_LEN]; ++ struct qstr tgtname = { ++ .name = a ++ }; ++ ++ wbr = au_sbr(inode->i_sb, bindex)->br_wbr; ++ h_parent = wbr->wbr_plink; ++ h_dir = h_parent->d_inode; ++ tgtname.len = plink_name(a, sizeof(a), inode, bindex); ++ ++ /* always superio. */ ++ if (current_fsuid()) { ++ struct do_whplink_args args = { ++ .errp = &err, ++ .tgt = &tgtname, ++ .h_parent = h_parent, ++ .h_dentry = h_dentry, ++ .br = br ++ }; ++ wkq_err = au_wkq_wait(call_do_whplink, &args); ++ if (unlikely(wkq_err)) ++ err = wkq_err; ++ } else ++ err = do_whplink(&tgtname, h_parent, h_dentry, br); ++ ++ return err; ++} ++ ++/* free a single plink */ ++static void do_put_plink(struct pseudo_link *plink, int do_del) ++{ ++ if (do_del) ++ list_del(&plink->list); ++ iput(plink->inode); ++ kfree(plink); ++} ++ ++static void do_put_plink_rcu(struct rcu_head *rcu) ++{ ++ struct pseudo_link *plink; ++ ++ plink = container_of(rcu, struct pseudo_link, rcu); ++ iput(plink->inode); ++ kfree(plink); ++} ++ ++/* ++ * create a new pseudo-link for @h_dentry on @bindex. ++ * the linked inode is held in aufs @inode. ++ */ ++void au_plink_append(struct inode *inode, aufs_bindex_t bindex, ++ struct dentry *h_dentry) ++{ ++ struct super_block *sb; ++ struct au_sbinfo *sbinfo; ++ struct list_head *plink_list; ++ struct pseudo_link *plink, *tmp; ++ int found, err, cnt; ++ ++ sb = inode->i_sb; ++ sbinfo = au_sbi(sb); ++ AuDebugOn(!au_opt_test(au_mntflags(sb), PLINK)); ++ AuDebugOn(au_plink_maint(sb, AuLock_NOPLM)); ++ ++ cnt = 0; ++ found = 0; ++ plink_list = &sbinfo->si_plink.head; ++ rcu_read_lock(); ++ list_for_each_entry_rcu(plink, plink_list, list) { ++ cnt++; ++ if (plink->inode == inode) { ++ found = 1; ++ break; ++ } ++ } ++ rcu_read_unlock(); ++ if (found) ++ return; ++ ++ tmp = kmalloc(sizeof(*plink), GFP_NOFS); ++ if (tmp) ++ tmp->inode = au_igrab(inode); ++ else { ++ err = -ENOMEM; ++ goto out; ++ } ++ ++ spin_lock(&sbinfo->si_plink.spin); ++ list_for_each_entry(plink, plink_list, list) { ++ if (plink->inode == inode) { ++ found = 1; ++ break; ++ } ++ } ++ if (!found) ++ list_add_rcu(&tmp->list, plink_list); ++ spin_unlock(&sbinfo->si_plink.spin); ++ if (!found) { ++ cnt++; ++ WARN_ONCE(cnt > AUFS_PLINK_WARN, ++ "unexpectedly many pseudo links, %d\n", cnt); ++ err = whplink(h_dentry, inode, bindex, au_sbr(sb, bindex)); ++ } else { ++ do_put_plink(tmp, 0); ++ return; ++ } ++ ++out: ++ if (unlikely(err)) { ++ pr_warning("err %d, damaged pseudo link.\n", err); ++ if (tmp) { ++ au_spl_del_rcu(&tmp->list, &sbinfo->si_plink); ++ call_rcu(&tmp->rcu, do_put_plink_rcu); ++ } ++ } ++} ++ ++/* free all plinks */ ++void au_plink_put(struct super_block *sb, int verbose) ++{ ++ struct au_sbinfo *sbinfo; ++ struct list_head *plink_list; ++ struct pseudo_link *plink, *tmp; ++ ++ SiMustWriteLock(sb); ++ ++ sbinfo = au_sbi(sb); ++ AuDebugOn(!au_opt_test(au_mntflags(sb), PLINK)); ++ AuDebugOn(au_plink_maint(sb, AuLock_NOPLM)); ++ ++ plink_list = &sbinfo->si_plink.head; ++ /* no spin_lock since sbinfo is write-locked */ ++ WARN(verbose && !list_empty(plink_list), "pseudo-link is not flushed"); ++ list_for_each_entry_safe(plink, tmp, plink_list, list) ++ do_put_plink(plink, 0); ++ INIT_LIST_HEAD(plink_list); ++} ++ ++void au_plink_clean(struct super_block *sb, int verbose) ++{ ++ struct dentry *root; ++ ++ root = sb->s_root; ++ aufs_write_lock(root); ++ if (au_opt_test(au_mntflags(sb), PLINK)) ++ au_plink_put(sb, verbose); ++ aufs_write_unlock(root); ++} ++ ++/* free the plinks on a branch specified by @br_id */ ++void au_plink_half_refresh(struct super_block *sb, aufs_bindex_t br_id) ++{ ++ struct au_sbinfo *sbinfo; ++ struct list_head *plink_list; ++ struct pseudo_link *plink, *tmp; ++ struct inode *inode; ++ aufs_bindex_t bstart, bend, bindex; ++ unsigned char do_put; ++ ++ SiMustWriteLock(sb); ++ ++ sbinfo = au_sbi(sb); ++ AuDebugOn(!au_opt_test(au_mntflags(sb), PLINK)); ++ AuDebugOn(au_plink_maint(sb, AuLock_NOPLM)); ++ ++ plink_list = &sbinfo->si_plink.head; ++ /* no spin_lock since sbinfo is write-locked */ ++ list_for_each_entry_safe(plink, tmp, plink_list, list) { ++ do_put = 0; ++ inode = au_igrab(plink->inode); ++ ii_write_lock_child(inode); ++ bstart = au_ibstart(inode); ++ bend = au_ibend(inode); ++ if (bstart >= 0) { ++ for (bindex = bstart; bindex <= bend; bindex++) { ++ if (!au_h_iptr(inode, bindex) ++ || au_ii_br_id(inode, bindex) != br_id) ++ continue; ++ au_set_h_iptr(inode, bindex, NULL, 0); ++ do_put = 1; ++ break; ++ } ++ } else ++ do_put_plink(plink, 1); ++ ++ if (do_put) { ++ for (bindex = bstart; bindex <= bend; bindex++) ++ if (au_h_iptr(inode, bindex)) { ++ do_put = 0; ++ break; ++ } ++ if (do_put) ++ do_put_plink(plink, 1); ++ } ++ ii_write_unlock(inode); ++ iput(inode); ++ } ++} +diff -urN a/fs/aufs/poll.c b/fs/aufs/poll.c +--- a/fs/aufs/poll.c 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/poll.c 2011-03-06 23:28:02.616413258 +0000 +@@ -0,0 +1,56 @@ ++/* ++ * Copyright (C) 2005-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * poll operation ++ * There is only one filesystem which implements ->poll operation, currently. ++ */ ++ ++#include "aufs.h" ++ ++unsigned int aufs_poll(struct file *file, poll_table *wait) ++{ ++ unsigned int mask; ++ int err; ++ struct file *h_file; ++ struct dentry *dentry; ++ struct super_block *sb; ++ ++ /* We should pretend an error happened. */ ++ mask = POLLERR /* | POLLIN | POLLOUT */; ++ dentry = file->f_dentry; ++ sb = dentry->d_sb; ++ si_read_lock(sb, AuLock_FLUSH | AuLock_NOPLMW); ++ err = au_reval_and_lock_fdi(file, au_reopen_nondir, /*wlock*/0); ++ if (unlikely(err)) ++ goto out; ++ ++ /* it is not an error if h_file has no operation */ ++ mask = DEFAULT_POLLMASK; ++ h_file = au_hf_top(file); ++ if (h_file->f_op && h_file->f_op->poll) ++ mask = h_file->f_op->poll(h_file, wait); ++ ++ di_read_unlock(dentry, AuLock_IR); ++ fi_read_unlock(file); ++ ++out: ++ si_read_unlock(sb); ++ AuTraceErr((int)mask); ++ return mask; ++} +diff -urN a/fs/aufs/procfs.c b/fs/aufs/procfs.c +--- a/fs/aufs/procfs.c 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/procfs.c 2011-03-06 23:28:02.620413138 +0000 +@@ -0,0 +1,169 @@ ++/* ++ * Copyright (C) 2010-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * procfs interfaces ++ */ ++ ++#include ++#include "aufs.h" ++ ++static int au_procfs_plm_release(struct inode *inode, struct file *file) ++{ ++ struct au_sbinfo *sbinfo; ++ ++ sbinfo = file->private_data; ++ if (sbinfo) { ++ au_plink_maint_leave(sbinfo); ++ kobject_put(&sbinfo->si_kobj); ++ } ++ ++ return 0; ++} ++ ++static void au_procfs_plm_write_clean(struct file *file) ++{ ++ struct au_sbinfo *sbinfo; ++ ++ sbinfo = file->private_data; ++ if (sbinfo) ++ au_plink_clean(sbinfo->si_sb, /*verbose*/0); ++} ++ ++static int au_procfs_plm_write_si(struct file *file, unsigned long id) ++{ ++ int err; ++ struct super_block *sb; ++ struct au_sbinfo *sbinfo; ++ ++ err = -EBUSY; ++ if (unlikely(file->private_data)) ++ goto out; ++ ++ sb = NULL; ++ spin_lock(&au_sbilist.spin); ++ list_for_each_entry(sbinfo, &au_sbilist.head, si_list) ++ if (id == sysaufs_si_id(sbinfo)) { ++ kobject_get(&sbinfo->si_kobj); ++ sb = sbinfo->si_sb; ++ break; ++ } ++ spin_unlock(&au_sbilist.spin); ++ ++ err = -EINVAL; ++ if (unlikely(!sb)) ++ goto out; ++ ++ err = au_plink_maint_enter(sb); ++ if (!err) ++ /* keep kobject_get() */ ++ file->private_data = sbinfo; ++ else ++ kobject_put(&sbinfo->si_kobj); ++out: ++ return err; ++} ++ ++/* ++ * Accept a valid "si=xxxx" only. ++ * Once it is accepted successfully, accept "clean" too. ++ */ ++static ssize_t au_procfs_plm_write(struct file *file, const char __user *ubuf, ++ size_t count, loff_t *ppos) ++{ ++ ssize_t err; ++ unsigned long id; ++ /* last newline is allowed */ ++ char buf[3 + sizeof(unsigned long) * 2 + 1]; ++ ++ err = -EACCES; ++ if (unlikely(!capable(CAP_SYS_ADMIN))) ++ goto out; ++ ++ err = -EINVAL; ++ if (unlikely(count > sizeof(buf))) ++ goto out; ++ ++ err = copy_from_user(buf, ubuf, count); ++ if (unlikely(err)) { ++ err = -EFAULT; ++ goto out; ++ } ++ buf[count] = 0; ++ ++ err = -EINVAL; ++ if (!strcmp("clean", buf)) { ++ au_procfs_plm_write_clean(file); ++ goto out_success; ++ } else if (unlikely(strncmp("si=", buf, 3))) ++ goto out; ++ ++ err = strict_strtoul(buf + 3, 16, &id); ++ if (unlikely(err)) ++ goto out; ++ ++ err = au_procfs_plm_write_si(file, id); ++ if (unlikely(err)) ++ goto out; ++ ++out_success: ++ err = count; /* success */ ++out: ++ return err; ++} ++ ++static const struct file_operations au_procfs_plm_fop = { ++ .write = au_procfs_plm_write, ++ .release = au_procfs_plm_release, ++ .owner = THIS_MODULE ++}; ++ ++/* ---------------------------------------------------------------------- */ ++ ++static struct proc_dir_entry *au_procfs_dir; ++ ++void au_procfs_fin(void) ++{ ++ remove_proc_entry(AUFS_PLINK_MAINT_NAME, au_procfs_dir); ++ remove_proc_entry(AUFS_PLINK_MAINT_DIR, NULL); ++} ++ ++int __init au_procfs_init(void) ++{ ++ int err; ++ struct proc_dir_entry *entry; ++ ++ err = -ENOMEM; ++ au_procfs_dir = proc_mkdir(AUFS_PLINK_MAINT_DIR, NULL); ++ if (unlikely(!au_procfs_dir)) ++ goto out; ++ ++ entry = proc_create(AUFS_PLINK_MAINT_NAME, S_IFREG | S_IWUSR, ++ au_procfs_dir, &au_procfs_plm_fop); ++ if (unlikely(!entry)) ++ goto out_dir; ++ ++ err = 0; ++ goto out; /* success */ ++ ++ ++out_dir: ++ remove_proc_entry(AUFS_PLINK_MAINT_DIR, NULL); ++out: ++ return err; ++} +diff -urN a/fs/aufs/rdu.c b/fs/aufs/rdu.c +--- a/fs/aufs/rdu.c 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/rdu.c 2011-03-06 23:28:02.620413138 +0000 +@@ -0,0 +1,383 @@ ++/* ++ * Copyright (C) 2005-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * readdir in userspace. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include "aufs.h" ++ ++/* bits for struct aufs_rdu.flags */ ++#define AuRdu_CALLED 1 ++#define AuRdu_CONT (1 << 1) ++#define AuRdu_FULL (1 << 2) ++#define au_ftest_rdu(flags, name) ((flags) & AuRdu_##name) ++#define au_fset_rdu(flags, name) \ ++ do { (flags) |= AuRdu_##name; } while (0) ++#define au_fclr_rdu(flags, name) \ ++ do { (flags) &= ~AuRdu_##name; } while (0) ++ ++struct au_rdu_arg { ++ struct aufs_rdu *rdu; ++ union au_rdu_ent_ul ent; ++ unsigned long end; ++ ++ struct super_block *sb; ++ int err; ++}; ++ ++static int au_rdu_fill(void *__arg, const char *name, int nlen, ++ loff_t offset, u64 h_ino, unsigned int d_type) ++{ ++ int err, len; ++ struct au_rdu_arg *arg = __arg; ++ struct aufs_rdu *rdu = arg->rdu; ++ struct au_rdu_ent ent; ++ ++ err = 0; ++ arg->err = 0; ++ au_fset_rdu(rdu->cookie.flags, CALLED); ++ len = au_rdu_len(nlen); ++ if (arg->ent.ul + len < arg->end) { ++ ent.ino = h_ino; ++ ent.bindex = rdu->cookie.bindex; ++ ent.type = d_type; ++ ent.nlen = nlen; ++ if (unlikely(nlen > AUFS_MAX_NAMELEN)) ++ ent.type = DT_UNKNOWN; ++ ++ err = -EFAULT; ++ if (copy_to_user(arg->ent.e, &ent, sizeof(ent))) ++ goto out; ++ if (copy_to_user(arg->ent.e->name, name, nlen)) ++ goto out; ++ /* the terminating NULL */ ++ if (__put_user(0, arg->ent.e->name + nlen)) ++ goto out; ++ err = 0; ++ /* AuDbg("%p, %.*s\n", arg->ent.p, nlen, name); */ ++ arg->ent.ul += len; ++ rdu->rent++; ++ } else { ++ err = -EFAULT; ++ au_fset_rdu(rdu->cookie.flags, FULL); ++ rdu->full = 1; ++ rdu->tail = arg->ent; ++ } ++ ++out: ++ /* AuTraceErr(err); */ ++ return err; ++} ++ ++static int au_rdu_do(struct file *h_file, struct au_rdu_arg *arg) ++{ ++ int err; ++ loff_t offset; ++ struct au_rdu_cookie *cookie = &arg->rdu->cookie; ++ ++ offset = vfsub_llseek(h_file, cookie->h_pos, SEEK_SET); ++ err = offset; ++ if (unlikely(offset != cookie->h_pos)) ++ goto out; ++ ++ err = 0; ++ do { ++ arg->err = 0; ++ au_fclr_rdu(cookie->flags, CALLED); ++ /* smp_mb(); */ ++ err = vfsub_readdir(h_file, au_rdu_fill, arg); ++ if (err >= 0) ++ err = arg->err; ++ } while (!err ++ && au_ftest_rdu(cookie->flags, CALLED) ++ && !au_ftest_rdu(cookie->flags, FULL)); ++ cookie->h_pos = h_file->f_pos; ++ ++out: ++ AuTraceErr(err); ++ return err; ++} ++ ++static int au_rdu(struct file *file, struct aufs_rdu *rdu) ++{ ++ int err; ++ aufs_bindex_t bend; ++ struct au_rdu_arg arg; ++ struct dentry *dentry; ++ struct inode *inode; ++ struct file *h_file; ++ struct au_rdu_cookie *cookie = &rdu->cookie; ++ ++ err = !access_ok(VERIFY_WRITE, rdu->ent.e, rdu->sz); ++ if (unlikely(err)) { ++ err = -EFAULT; ++ AuTraceErr(err); ++ goto out; ++ } ++ rdu->rent = 0; ++ rdu->tail = rdu->ent; ++ rdu->full = 0; ++ arg.rdu = rdu; ++ arg.ent = rdu->ent; ++ arg.end = arg.ent.ul; ++ arg.end += rdu->sz; ++ ++ err = -ENOTDIR; ++ if (unlikely(!file->f_op || !file->f_op->readdir)) ++ goto out; ++ ++ err = security_file_permission(file, MAY_READ); ++ AuTraceErr(err); ++ if (unlikely(err)) ++ goto out; ++ ++ dentry = file->f_dentry; ++ inode = dentry->d_inode; ++#if 1 ++ mutex_lock(&inode->i_mutex); ++#else ++ err = mutex_lock_killable(&inode->i_mutex); ++ AuTraceErr(err); ++ if (unlikely(err)) ++ goto out; ++#endif ++ ++ arg.sb = inode->i_sb; ++ err = si_read_lock(arg.sb, AuLock_FLUSH | AuLock_NOPLM); ++ if (unlikely(err)) ++ goto out_mtx; ++ err = au_alive_dir(dentry); ++ if (unlikely(err)) ++ goto out_si; ++ /* todo: reval? */ ++ fi_read_lock(file); ++ ++ err = -EAGAIN; ++ if (unlikely(au_ftest_rdu(cookie->flags, CONT) ++ && cookie->generation != au_figen(file))) ++ goto out_unlock; ++ ++ err = 0; ++ if (!rdu->blk) { ++ rdu->blk = au_sbi(arg.sb)->si_rdblk; ++ if (!rdu->blk) ++ rdu->blk = au_dir_size(file, /*dentry*/NULL); ++ } ++ bend = au_fbstart(file); ++ if (cookie->bindex < bend) ++ cookie->bindex = bend; ++ bend = au_fbend_dir(file); ++ /* AuDbg("b%d, b%d\n", cookie->bindex, bend); */ ++ for (; !err && cookie->bindex <= bend; ++ cookie->bindex++, cookie->h_pos = 0) { ++ h_file = au_hf_dir(file, cookie->bindex); ++ if (!h_file) ++ continue; ++ ++ au_fclr_rdu(cookie->flags, FULL); ++ err = au_rdu_do(h_file, &arg); ++ AuTraceErr(err); ++ if (unlikely(au_ftest_rdu(cookie->flags, FULL) || err)) ++ break; ++ } ++ AuDbg("rent %llu\n", rdu->rent); ++ ++ if (!err && !au_ftest_rdu(cookie->flags, CONT)) { ++ rdu->shwh = !!au_opt_test(au_sbi(arg.sb)->si_mntflags, SHWH); ++ au_fset_rdu(cookie->flags, CONT); ++ cookie->generation = au_figen(file); ++ } ++ ++ ii_read_lock_child(inode); ++ fsstack_copy_attr_atime(inode, au_h_iptr(inode, au_ibstart(inode))); ++ ii_read_unlock(inode); ++ ++out_unlock: ++ fi_read_unlock(file); ++out_si: ++ si_read_unlock(arg.sb); ++out_mtx: ++ mutex_unlock(&inode->i_mutex); ++out: ++ AuTraceErr(err); ++ return err; ++} ++ ++static int au_rdu_ino(struct file *file, struct aufs_rdu *rdu) ++{ ++ int err; ++ ino_t ino; ++ unsigned long long nent; ++ union au_rdu_ent_ul *u; ++ struct au_rdu_ent ent; ++ struct super_block *sb; ++ ++ err = 0; ++ nent = rdu->nent; ++ u = &rdu->ent; ++ sb = file->f_dentry->d_sb; ++ si_read_lock(sb, AuLock_FLUSH); ++ while (nent-- > 0) { ++ err = copy_from_user(&ent, u->e, sizeof(ent)); ++ if (!err) ++ err = !access_ok(VERIFY_WRITE, &u->e->ino, sizeof(ino)); ++ if (unlikely(err)) { ++ err = -EFAULT; ++ AuTraceErr(err); ++ break; ++ } ++ ++ /* AuDbg("b%d, i%llu\n", ent.bindex, ent.ino); */ ++ if (!ent.wh) ++ err = au_ino(sb, ent.bindex, ent.ino, ent.type, &ino); ++ else ++ err = au_wh_ino(sb, ent.bindex, ent.ino, ent.type, ++ &ino); ++ if (unlikely(err)) { ++ AuTraceErr(err); ++ break; ++ } ++ ++ err = __put_user(ino, &u->e->ino); ++ if (unlikely(err)) { ++ err = -EFAULT; ++ AuTraceErr(err); ++ break; ++ } ++ u->ul += au_rdu_len(ent.nlen); ++ } ++ si_read_unlock(sb); ++ ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++static int au_rdu_verify(struct aufs_rdu *rdu) ++{ ++ AuDbg("rdu{%llu, %p, %u | %u | %llu, %u, %u | " ++ "%llu, b%d, 0x%x, g%u}\n", ++ rdu->sz, rdu->ent.e, rdu->verify[AufsCtlRduV_SZ], ++ rdu->blk, ++ rdu->rent, rdu->shwh, rdu->full, ++ rdu->cookie.h_pos, rdu->cookie.bindex, rdu->cookie.flags, ++ rdu->cookie.generation); ++ ++ if (rdu->verify[AufsCtlRduV_SZ] == sizeof(*rdu)) ++ return 0; ++ ++ AuDbg("%u:%u\n", ++ rdu->verify[AufsCtlRduV_SZ], (unsigned int)sizeof(*rdu)); ++ return -EINVAL; ++} ++ ++long au_rdu_ioctl(struct file *file, unsigned int cmd, unsigned long arg) ++{ ++ long err, e; ++ struct aufs_rdu rdu; ++ void __user *p = (void __user *)arg; ++ ++ err = copy_from_user(&rdu, p, sizeof(rdu)); ++ if (unlikely(err)) { ++ err = -EFAULT; ++ AuTraceErr(err); ++ goto out; ++ } ++ err = au_rdu_verify(&rdu); ++ if (unlikely(err)) ++ goto out; ++ ++ switch (cmd) { ++ case AUFS_CTL_RDU: ++ err = au_rdu(file, &rdu); ++ if (unlikely(err)) ++ break; ++ ++ e = copy_to_user(p, &rdu, sizeof(rdu)); ++ if (unlikely(e)) { ++ err = -EFAULT; ++ AuTraceErr(err); ++ } ++ break; ++ case AUFS_CTL_RDU_INO: ++ err = au_rdu_ino(file, &rdu); ++ break; ++ ++ default: ++ /* err = -ENOTTY; */ ++ err = -EINVAL; ++ } ++ ++out: ++ AuTraceErr(err); ++ return err; ++} ++ ++#ifdef CONFIG_COMPAT ++long au_rdu_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg) ++{ ++ long err, e; ++ struct aufs_rdu rdu; ++ void __user *p = compat_ptr(arg); ++ ++ /* todo: get_user()? */ ++ err = copy_from_user(&rdu, p, sizeof(rdu)); ++ if (unlikely(err)) { ++ err = -EFAULT; ++ AuTraceErr(err); ++ goto out; ++ } ++ rdu.ent.e = compat_ptr(rdu.ent.ul); ++ err = au_rdu_verify(&rdu); ++ if (unlikely(err)) ++ goto out; ++ ++ switch (cmd) { ++ case AUFS_CTL_RDU: ++ err = au_rdu(file, &rdu); ++ if (unlikely(err)) ++ break; ++ ++ rdu.ent.ul = ptr_to_compat(rdu.ent.e); ++ rdu.tail.ul = ptr_to_compat(rdu.tail.e); ++ e = copy_to_user(p, &rdu, sizeof(rdu)); ++ if (unlikely(e)) { ++ err = -EFAULT; ++ AuTraceErr(err); ++ } ++ break; ++ case AUFS_CTL_RDU_INO: ++ err = au_rdu_ino(file, &rdu); ++ break; ++ ++ default: ++ /* err = -ENOTTY; */ ++ err = -EINVAL; ++ } ++ ++out: ++ AuTraceErr(err); ++ return err; ++} ++#endif +diff -urN a/fs/aufs/rwsem.h b/fs/aufs/rwsem.h +--- a/fs/aufs/rwsem.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/rwsem.h 2011-03-06 23:28:02.616413258 +0000 +@@ -0,0 +1,189 @@ ++/* ++ * Copyright (C) 2005-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * simple read-write semaphore wrappers ++ */ ++ ++#ifndef __AUFS_RWSEM_H__ ++#define __AUFS_RWSEM_H__ ++ ++#ifdef __KERNEL__ ++ ++#include ++#include "debug.h" ++ ++struct au_rwsem { ++ struct rw_semaphore rwsem; ++#ifdef CONFIG_AUFS_DEBUG ++ /* just for debugging, not almighty counter */ ++ atomic_t rcnt, wcnt; ++#endif ++}; ++ ++#ifdef CONFIG_AUFS_DEBUG ++#define AuDbgCntInit(rw) do { \ ++ atomic_set(&(rw)->rcnt, 0); \ ++ atomic_set(&(rw)->wcnt, 0); \ ++ smp_mb(); /* atomic set */ \ ++} while (0) ++ ++#define AuDbgRcntInc(rw) atomic_inc(&(rw)->rcnt) ++#define AuDbgRcntDec(rw) WARN_ON(atomic_dec_return(&(rw)->rcnt) < 0) ++#define AuDbgWcntInc(rw) atomic_inc(&(rw)->wcnt) ++#define AuDbgWcntDec(rw) WARN_ON(atomic_dec_return(&(rw)->wcnt) < 0) ++#else ++#define AuDbgCntInit(rw) do {} while (0) ++#define AuDbgRcntInc(rw) do {} while (0) ++#define AuDbgRcntDec(rw) do {} while (0) ++#define AuDbgWcntInc(rw) do {} while (0) ++#define AuDbgWcntDec(rw) do {} while (0) ++#endif /* CONFIG_AUFS_DEBUG */ ++ ++/* to debug easier, do not make them inlined functions */ ++#define AuRwMustNoWaiters(rw) AuDebugOn(!list_empty(&(rw)->rwsem.wait_list)) ++/* rwsem_is_locked() is unusable */ ++#define AuRwMustReadLock(rw) AuDebugOn(atomic_read(&(rw)->rcnt) <= 0) ++#define AuRwMustWriteLock(rw) AuDebugOn(atomic_read(&(rw)->wcnt) <= 0) ++#define AuRwMustAnyLock(rw) AuDebugOn(atomic_read(&(rw)->rcnt) <= 0 \ ++ && atomic_read(&(rw)->wcnt) <= 0) ++#define AuRwDestroy(rw) AuDebugOn(atomic_read(&(rw)->rcnt) \ ++ || atomic_read(&(rw)->wcnt)) ++ ++#define au_rw_class(rw, key) lockdep_set_class(&(rw)->rwsem, key) ++ ++static inline void au_rw_init(struct au_rwsem *rw) ++{ ++ AuDbgCntInit(rw); ++ init_rwsem(&rw->rwsem); ++} ++ ++static inline void au_rw_init_wlock(struct au_rwsem *rw) ++{ ++ au_rw_init(rw); ++ down_write(&rw->rwsem); ++ AuDbgWcntInc(rw); ++} ++ ++static inline void au_rw_init_wlock_nested(struct au_rwsem *rw, ++ unsigned int lsc) ++{ ++ au_rw_init(rw); ++ down_write_nested(&rw->rwsem, lsc); ++ AuDbgWcntInc(rw); ++} ++ ++static inline void au_rw_read_lock(struct au_rwsem *rw) ++{ ++ down_read(&rw->rwsem); ++ AuDbgRcntInc(rw); ++} ++ ++static inline void au_rw_read_lock_nested(struct au_rwsem *rw, unsigned int lsc) ++{ ++ down_read_nested(&rw->rwsem, lsc); ++ AuDbgRcntInc(rw); ++} ++ ++static inline void au_rw_read_unlock(struct au_rwsem *rw) ++{ ++ AuRwMustReadLock(rw); ++ AuDbgRcntDec(rw); ++ up_read(&rw->rwsem); ++} ++ ++static inline void au_rw_dgrade_lock(struct au_rwsem *rw) ++{ ++ AuRwMustWriteLock(rw); ++ AuDbgRcntInc(rw); ++ AuDbgWcntDec(rw); ++ downgrade_write(&rw->rwsem); ++} ++ ++static inline void au_rw_write_lock(struct au_rwsem *rw) ++{ ++ down_write(&rw->rwsem); ++ AuDbgWcntInc(rw); ++} ++ ++static inline void au_rw_write_lock_nested(struct au_rwsem *rw, ++ unsigned int lsc) ++{ ++ down_write_nested(&rw->rwsem, lsc); ++ AuDbgWcntInc(rw); ++} ++ ++static inline void au_rw_write_unlock(struct au_rwsem *rw) ++{ ++ AuRwMustWriteLock(rw); ++ AuDbgWcntDec(rw); ++ up_write(&rw->rwsem); ++} ++ ++/* why is not _nested version defined */ ++static inline int au_rw_read_trylock(struct au_rwsem *rw) ++{ ++ int ret = down_read_trylock(&rw->rwsem); ++ if (ret) ++ AuDbgRcntInc(rw); ++ return ret; ++} ++ ++static inline int au_rw_write_trylock(struct au_rwsem *rw) ++{ ++ int ret = down_write_trylock(&rw->rwsem); ++ if (ret) ++ AuDbgWcntInc(rw); ++ return ret; ++} ++ ++#undef AuDbgCntInit ++#undef AuDbgRcntInc ++#undef AuDbgRcntDec ++#undef AuDbgWcntInc ++#undef AuDbgWcntDec ++ ++#define AuSimpleLockRwsemFuncs(prefix, param, rwsem) \ ++static inline void prefix##_read_lock(param) \ ++{ au_rw_read_lock(rwsem); } \ ++static inline void prefix##_write_lock(param) \ ++{ au_rw_write_lock(rwsem); } \ ++static inline int prefix##_read_trylock(param) \ ++{ return au_rw_read_trylock(rwsem); } \ ++static inline int prefix##_write_trylock(param) \ ++{ return au_rw_write_trylock(rwsem); } ++/* why is not _nested version defined */ ++/* static inline void prefix##_read_trylock_nested(param, lsc) ++{ au_rw_read_trylock_nested(rwsem, lsc)); } ++static inline void prefix##_write_trylock_nestd(param, lsc) ++{ au_rw_write_trylock_nested(rwsem, lsc); } */ ++ ++#define AuSimpleUnlockRwsemFuncs(prefix, param, rwsem) \ ++static inline void prefix##_read_unlock(param) \ ++{ au_rw_read_unlock(rwsem); } \ ++static inline void prefix##_write_unlock(param) \ ++{ au_rw_write_unlock(rwsem); } \ ++static inline void prefix##_downgrade_lock(param) \ ++{ au_rw_dgrade_lock(rwsem); } ++ ++#define AuSimpleRwsemFuncs(prefix, param, rwsem) \ ++ AuSimpleLockRwsemFuncs(prefix, param, rwsem) \ ++ AuSimpleUnlockRwsemFuncs(prefix, param, rwsem) ++ ++#endif /* __KERNEL__ */ ++#endif /* __AUFS_RWSEM_H__ */ +diff -urN a/fs/aufs/sbinfo.c b/fs/aufs/sbinfo.c +--- a/fs/aufs/sbinfo.c 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/sbinfo.c 2011-03-06 23:28:02.616413258 +0000 +@@ -0,0 +1,344 @@ ++/* ++ * Copyright (C) 2005-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * superblock private data ++ */ ++ ++#include ++#include "aufs.h" ++ ++/* ++ * they are necessary regardless sysfs is disabled. ++ */ ++void au_si_free(struct kobject *kobj) ++{ ++ struct au_sbinfo *sbinfo; ++ char *locked __maybe_unused; /* debug only */ ++ ++ sbinfo = container_of(kobj, struct au_sbinfo, si_kobj); ++ AuDebugOn(!list_empty(&sbinfo->si_plink.head)); ++ AuDebugOn(atomic_read(&sbinfo->si_nowait.nw_len)); ++ ++ au_rw_write_lock(&sbinfo->si_rwsem); ++ au_br_free(sbinfo); ++ au_rw_write_unlock(&sbinfo->si_rwsem); ++ ++ AuDebugOn(radix_tree_gang_lookup ++ (&sbinfo->au_si_pid.tree, (void **)&locked, ++ /*first_index*/PID_MAX_DEFAULT - 1, ++ /*max_items*/sizeof(locked)/sizeof(*locked))); ++ ++ kfree(sbinfo->si_branch); ++ kfree(sbinfo->au_si_pid.bitmap); ++ mutex_destroy(&sbinfo->si_xib_mtx); ++ AuRwDestroy(&sbinfo->si_rwsem); ++ ++ kfree(sbinfo); ++} ++ ++int au_si_alloc(struct super_block *sb) ++{ ++ int err; ++ struct au_sbinfo *sbinfo; ++ static struct lock_class_key aufs_si; ++ ++ err = -ENOMEM; ++ sbinfo = kzalloc(sizeof(*sbinfo), GFP_NOFS); ++ if (unlikely(!sbinfo)) ++ goto out; ++ ++ BUILD_BUG_ON(sizeof(unsigned long) != ++ sizeof(*sbinfo->au_si_pid.bitmap)); ++ sbinfo->au_si_pid.bitmap = kcalloc(BITS_TO_LONGS(PID_MAX_DEFAULT), ++ sizeof(*sbinfo->au_si_pid.bitmap), ++ GFP_NOFS); ++ if (unlikely(!sbinfo->au_si_pid.bitmap)) ++ goto out_sbinfo; ++ ++ /* will be reallocated separately */ ++ sbinfo->si_branch = kzalloc(sizeof(*sbinfo->si_branch), GFP_NOFS); ++ if (unlikely(!sbinfo->si_branch)) ++ goto out_pidmap; ++ ++ err = sysaufs_si_init(sbinfo); ++ if (unlikely(err)) ++ goto out_br; ++ ++ au_nwt_init(&sbinfo->si_nowait); ++ au_rw_init_wlock(&sbinfo->si_rwsem); ++ au_rw_class(&sbinfo->si_rwsem, &aufs_si); ++ spin_lock_init(&sbinfo->au_si_pid.tree_lock); ++ INIT_RADIX_TREE(&sbinfo->au_si_pid.tree, GFP_ATOMIC | __GFP_NOFAIL); ++ ++ atomic_long_set(&sbinfo->si_ninodes, 0); ++ atomic_long_set(&sbinfo->si_nfiles, 0); ++ ++ sbinfo->si_bend = -1; ++ ++ sbinfo->si_wbr_copyup = AuWbrCopyup_Def; ++ sbinfo->si_wbr_create = AuWbrCreate_Def; ++ sbinfo->si_wbr_copyup_ops = au_wbr_copyup_ops + sbinfo->si_wbr_copyup; ++ sbinfo->si_wbr_create_ops = au_wbr_create_ops + sbinfo->si_wbr_create; ++ ++ sbinfo->si_mntflags = au_opts_plink(AuOpt_Def); ++ ++ mutex_init(&sbinfo->si_xib_mtx); ++ sbinfo->si_xino_brid = -1; ++ /* leave si_xib_last_pindex and si_xib_next_bit */ ++ ++ sbinfo->si_rdcache = msecs_to_jiffies(AUFS_RDCACHE_DEF * MSEC_PER_SEC); ++ sbinfo->si_rdblk = AUFS_RDBLK_DEF; ++ sbinfo->si_rdhash = AUFS_RDHASH_DEF; ++ sbinfo->si_dirwh = AUFS_DIRWH_DEF; ++ ++ au_spl_init(&sbinfo->si_plink); ++ init_waitqueue_head(&sbinfo->si_plink_wq); ++ spin_lock_init(&sbinfo->si_plink_maint_lock); ++ ++ /* leave other members for sysaufs and si_mnt. */ ++ sbinfo->si_sb = sb; ++ sb->s_fs_info = sbinfo; ++ si_pid_set(sb); ++ au_debug_sbinfo_init(sbinfo); ++ return 0; /* success */ ++ ++out_br: ++ kfree(sbinfo->si_branch); ++out_pidmap: ++ kfree(sbinfo->au_si_pid.bitmap); ++out_sbinfo: ++ kfree(sbinfo); ++out: ++ return err; ++} ++ ++int au_sbr_realloc(struct au_sbinfo *sbinfo, int nbr) ++{ ++ int err, sz; ++ struct au_branch **brp; ++ ++ AuRwMustWriteLock(&sbinfo->si_rwsem); ++ ++ err = -ENOMEM; ++ sz = sizeof(*brp) * (sbinfo->si_bend + 1); ++ if (unlikely(!sz)) ++ sz = sizeof(*brp); ++ brp = au_kzrealloc(sbinfo->si_branch, sz, sizeof(*brp) * nbr, GFP_NOFS); ++ if (brp) { ++ sbinfo->si_branch = brp; ++ err = 0; ++ } ++ ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++unsigned int au_sigen_inc(struct super_block *sb) ++{ ++ unsigned int gen; ++ ++ SiMustWriteLock(sb); ++ ++ gen = ++au_sbi(sb)->si_generation; ++ au_update_digen(sb->s_root); ++ au_update_iigen(sb->s_root->d_inode); ++ sb->s_root->d_inode->i_version++; ++ return gen; ++} ++ ++aufs_bindex_t au_new_br_id(struct super_block *sb) ++{ ++ aufs_bindex_t br_id; ++ int i; ++ struct au_sbinfo *sbinfo; ++ ++ SiMustWriteLock(sb); ++ ++ sbinfo = au_sbi(sb); ++ for (i = 0; i <= AUFS_BRANCH_MAX; i++) { ++ br_id = ++sbinfo->si_last_br_id; ++ AuDebugOn(br_id < 0); ++ if (br_id && au_br_index(sb, br_id) < 0) ++ return br_id; ++ } ++ ++ return -1; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* it is ok that new 'nwt' tasks are appended while we are sleeping */ ++int si_read_lock(struct super_block *sb, int flags) ++{ ++ int err; ++ ++ err = 0; ++ if (au_ftest_lock(flags, FLUSH)) ++ au_nwt_flush(&au_sbi(sb)->si_nowait); ++ ++ si_noflush_read_lock(sb); ++ err = au_plink_maint(sb, flags); ++ if (unlikely(err)) ++ si_read_unlock(sb); ++ ++ return err; ++} ++ ++int si_write_lock(struct super_block *sb, int flags) ++{ ++ int err; ++ ++ if (au_ftest_lock(flags, FLUSH)) ++ au_nwt_flush(&au_sbi(sb)->si_nowait); ++ ++ si_noflush_write_lock(sb); ++ err = au_plink_maint(sb, flags); ++ if (unlikely(err)) ++ si_write_unlock(sb); ++ ++ return err; ++} ++ ++/* dentry and super_block lock. call at entry point */ ++int aufs_read_lock(struct dentry *dentry, int flags) ++{ ++ int err; ++ struct super_block *sb; ++ ++ sb = dentry->d_sb; ++ err = si_read_lock(sb, flags); ++ if (unlikely(err)) ++ goto out; ++ ++ if (au_ftest_lock(flags, DW)) ++ di_write_lock_child(dentry); ++ else ++ di_read_lock_child(dentry, flags); ++ ++ if (au_ftest_lock(flags, GEN)) { ++ err = au_digen_test(dentry, au_sigen(sb)); ++ AuDebugOn(!err && au_dbrange_test(dentry)); ++ if (unlikely(err)) ++ aufs_read_unlock(dentry, flags); ++ } ++ ++out: ++ return err; ++} ++ ++void aufs_read_unlock(struct dentry *dentry, int flags) ++{ ++ if (au_ftest_lock(flags, DW)) ++ di_write_unlock(dentry); ++ else ++ di_read_unlock(dentry, flags); ++ si_read_unlock(dentry->d_sb); ++} ++ ++void aufs_write_lock(struct dentry *dentry) ++{ ++ si_write_lock(dentry->d_sb, AuLock_FLUSH | AuLock_NOPLMW); ++ di_write_lock_child(dentry); ++} ++ ++void aufs_write_unlock(struct dentry *dentry) ++{ ++ di_write_unlock(dentry); ++ si_write_unlock(dentry->d_sb); ++} ++ ++int aufs_read_and_write_lock2(struct dentry *d1, struct dentry *d2, int flags) ++{ ++ int err; ++ unsigned int sigen; ++ struct super_block *sb; ++ ++ sb = d1->d_sb; ++ err = si_read_lock(sb, flags); ++ if (unlikely(err)) ++ goto out; ++ ++ di_write_lock2_child(d1, d2, au_ftest_lock(flags, DIR)); ++ ++ if (au_ftest_lock(flags, GEN)) { ++ sigen = au_sigen(sb); ++ err = au_digen_test(d1, sigen); ++ AuDebugOn(!err && au_dbrange_test(d1)); ++ if (!err) { ++ err = au_digen_test(d2, sigen); ++ AuDebugOn(!err && au_dbrange_test(d2)); ++ } ++ if (unlikely(err)) ++ aufs_read_and_write_unlock2(d1, d2); ++ } ++ ++out: ++ return err; ++} ++ ++void aufs_read_and_write_unlock2(struct dentry *d1, struct dentry *d2) ++{ ++ di_write_unlock2(d1, d2); ++ si_read_unlock(d1->d_sb); ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++int si_pid_test_slow(struct super_block *sb) ++{ ++ void *p; ++ ++ rcu_read_lock(); ++ p = radix_tree_lookup(&au_sbi(sb)->au_si_pid.tree, current->pid); ++ rcu_read_unlock(); ++ ++ return (long)!!p; ++} ++ ++void si_pid_set_slow(struct super_block *sb) ++{ ++ int err; ++ struct au_sbinfo *sbinfo; ++ ++ AuDebugOn(si_pid_test_slow(sb)); ++ ++ sbinfo = au_sbi(sb); ++ err = radix_tree_preload(GFP_NOFS | __GFP_NOFAIL); ++ AuDebugOn(err); ++ spin_lock(&sbinfo->au_si_pid.tree_lock); ++ err = radix_tree_insert(&sbinfo->au_si_pid.tree, current->pid, ++ /*any valid ptr*/sb); ++ spin_unlock(&sbinfo->au_si_pid.tree_lock); ++ AuDebugOn(err); ++ radix_tree_preload_end(); ++} ++ ++void si_pid_clr_slow(struct super_block *sb) ++{ ++ void *p; ++ struct au_sbinfo *sbinfo; ++ ++ AuDebugOn(!si_pid_test_slow(sb)); ++ ++ sbinfo = au_sbi(sb); ++ spin_lock(&sbinfo->au_si_pid.tree_lock); ++ p = radix_tree_delete(&sbinfo->au_si_pid.tree, current->pid); ++ spin_unlock(&sbinfo->au_si_pid.tree_lock); ++} +diff -urN a/fs/aufs/spl.h b/fs/aufs/spl.h +--- a/fs/aufs/spl.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/spl.h 2011-03-06 23:28:02.616413258 +0000 +@@ -0,0 +1,66 @@ ++/* ++ * Copyright (C) 2005-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * simple list protected by a spinlock ++ */ ++ ++#ifndef __AUFS_SPL_H__ ++#define __AUFS_SPL_H__ ++ ++#ifdef __KERNEL__ ++ ++#include ++#include ++#include ++ ++struct au_splhead { ++ spinlock_t spin; ++ struct list_head head; ++}; ++ ++static inline void au_spl_init(struct au_splhead *spl) ++{ ++ spin_lock_init(&spl->spin); ++ INIT_LIST_HEAD(&spl->head); ++} ++ ++static inline void au_spl_add(struct list_head *list, struct au_splhead *spl) ++{ ++ spin_lock(&spl->spin); ++ list_add(list, &spl->head); ++ spin_unlock(&spl->spin); ++} ++ ++static inline void au_spl_del(struct list_head *list, struct au_splhead *spl) ++{ ++ spin_lock(&spl->spin); ++ list_del(list); ++ spin_unlock(&spl->spin); ++} ++ ++static inline void au_spl_del_rcu(struct list_head *list, ++ struct au_splhead *spl) ++{ ++ spin_lock(&spl->spin); ++ list_del_rcu(list); ++ spin_unlock(&spl->spin); ++} ++ ++#endif /* __KERNEL__ */ ++#endif /* __AUFS_SPL_H__ */ +diff -urN a/fs/aufs/super.c b/fs/aufs/super.c +--- a/fs/aufs/super.c 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/super.c 2011-03-06 23:28:02.620413138 +0000 +@@ -0,0 +1,925 @@ ++/* ++ * Copyright (C) 2005-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * mount and super_block operations ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include "aufs.h" ++ ++/* ++ * super_operations ++ */ ++static struct inode *aufs_alloc_inode(struct super_block *sb __maybe_unused) ++{ ++ struct au_icntnr *c; ++ ++ c = au_cache_alloc_icntnr(); ++ if (c) { ++ au_icntnr_init(c); ++ c->vfs_inode.i_version = 1; /* sigen(sb); */ ++ c->iinfo.ii_hinode = NULL; ++ return &c->vfs_inode; ++ } ++ return NULL; ++} ++ ++static void aufs_destroy_inode_cb(struct rcu_head *head) ++{ ++ struct inode *inode = container_of(head, struct inode, i_rcu); ++ ++ INIT_LIST_HEAD(&inode->i_dentry); ++ au_cache_free_icntnr(container_of(inode, struct au_icntnr, vfs_inode)); ++} ++ ++static void aufs_destroy_inode(struct inode *inode) ++{ ++ au_iinfo_fin(inode); ++ call_rcu(&inode->i_rcu, aufs_destroy_inode_cb); ++} ++ ++struct inode *au_iget_locked(struct super_block *sb, ino_t ino) ++{ ++ struct inode *inode; ++ int err; ++ ++ inode = iget_locked(sb, ino); ++ if (unlikely(!inode)) { ++ inode = ERR_PTR(-ENOMEM); ++ goto out; ++ } ++ if (!(inode->i_state & I_NEW)) ++ goto out; ++ ++ err = au_xigen_new(inode); ++ if (!err) ++ err = au_iinfo_init(inode); ++ if (!err) ++ inode->i_version++; ++ else { ++ iget_failed(inode); ++ inode = ERR_PTR(err); ++ } ++ ++out: ++ /* never return NULL */ ++ AuDebugOn(!inode); ++ AuTraceErrPtr(inode); ++ return inode; ++} ++ ++/* lock free root dinfo */ ++static int au_show_brs(struct seq_file *seq, struct super_block *sb) ++{ ++ int err; ++ aufs_bindex_t bindex, bend; ++ struct path path; ++ struct au_hdentry *hdp; ++ struct au_branch *br; ++ ++ err = 0; ++ bend = au_sbend(sb); ++ hdp = au_di(sb->s_root)->di_hdentry; ++ for (bindex = 0; !err && bindex <= bend; bindex++) { ++ br = au_sbr(sb, bindex); ++ path.mnt = br->br_mnt; ++ path.dentry = hdp[bindex].hd_dentry; ++ err = au_seq_path(seq, &path); ++ if (err > 0) ++ err = seq_printf(seq, "=%s", ++ au_optstr_br_perm(br->br_perm)); ++ if (!err && bindex != bend) ++ err = seq_putc(seq, ':'); ++ } ++ ++ return err; ++} ++ ++static void au_show_wbr_create(struct seq_file *m, int v, ++ struct au_sbinfo *sbinfo) ++{ ++ const char *pat; ++ ++ AuRwMustAnyLock(&sbinfo->si_rwsem); ++ ++ seq_printf(m, ",create="); ++ pat = au_optstr_wbr_create(v); ++ switch (v) { ++ case AuWbrCreate_TDP: ++ case AuWbrCreate_RR: ++ case AuWbrCreate_MFS: ++ case AuWbrCreate_PMFS: ++ seq_printf(m, pat); ++ break; ++ case AuWbrCreate_MFSV: ++ seq_printf(m, /*pat*/"mfs:%lu", ++ jiffies_to_msecs(sbinfo->si_wbr_mfs.mfs_expire) ++ / MSEC_PER_SEC); ++ break; ++ case AuWbrCreate_PMFSV: ++ seq_printf(m, /*pat*/"pmfs:%lu", ++ jiffies_to_msecs(sbinfo->si_wbr_mfs.mfs_expire) ++ / MSEC_PER_SEC); ++ break; ++ case AuWbrCreate_MFSRR: ++ seq_printf(m, /*pat*/"mfsrr:%llu", ++ sbinfo->si_wbr_mfs.mfsrr_watermark); ++ break; ++ case AuWbrCreate_MFSRRV: ++ seq_printf(m, /*pat*/"mfsrr:%llu:%lu", ++ sbinfo->si_wbr_mfs.mfsrr_watermark, ++ jiffies_to_msecs(sbinfo->si_wbr_mfs.mfs_expire) ++ / MSEC_PER_SEC); ++ break; ++ } ++} ++ ++static int au_show_xino(struct seq_file *seq, struct vfsmount *mnt) ++{ ++#ifdef CONFIG_SYSFS ++ return 0; ++#else ++ int err; ++ const int len = sizeof(AUFS_XINO_FNAME) - 1; ++ aufs_bindex_t bindex, brid; ++ struct super_block *sb; ++ struct qstr *name; ++ struct file *f; ++ struct dentry *d, *h_root; ++ struct au_hdentry *hdp; ++ ++ AuRwMustAnyLock(&sbinfo->si_rwsem); ++ ++ err = 0; ++ sb = mnt->mnt_sb; ++ f = au_sbi(sb)->si_xib; ++ if (!f) ++ goto out; ++ ++ /* stop printing the default xino path on the first writable branch */ ++ h_root = NULL; ++ brid = au_xino_brid(sb); ++ if (brid >= 0) { ++ bindex = au_br_index(sb, brid); ++ hdp = au_di(sb->s_root)->di_hdentry; ++ h_root = hdp[0 + bindex].hd_dentry; ++ } ++ d = f->f_dentry; ++ name = &d->d_name; ++ /* safe ->d_parent because the file is unlinked */ ++ if (d->d_parent == h_root ++ && name->len == len ++ && !memcmp(name->name, AUFS_XINO_FNAME, len)) ++ goto out; ++ ++ seq_puts(seq, ",xino="); ++ err = au_xino_path(seq, f); ++ ++out: ++ return err; ++#endif ++} ++ ++/* seq_file will re-call me in case of too long string */ ++static int aufs_show_options(struct seq_file *m, struct vfsmount *mnt) ++{ ++ int err; ++ unsigned int mnt_flags, v; ++ struct super_block *sb; ++ struct au_sbinfo *sbinfo; ++ ++#define AuBool(name, str) do { \ ++ v = au_opt_test(mnt_flags, name); \ ++ if (v != au_opt_test(AuOpt_Def, name)) \ ++ seq_printf(m, ",%s" #str, v ? "" : "no"); \ ++} while (0) ++ ++#define AuStr(name, str) do { \ ++ v = mnt_flags & AuOptMask_##name; \ ++ if (v != (AuOpt_Def & AuOptMask_##name)) \ ++ seq_printf(m, "," #str "=%s", au_optstr_##str(v)); \ ++} while (0) ++ ++#define AuUInt(name, str, val) do { \ ++ if (val != AUFS_##name##_DEF) \ ++ seq_printf(m, "," #str "=%u", val); \ ++} while (0) ++ ++ /* lock free root dinfo */ ++ sb = mnt->mnt_sb; ++ si_noflush_read_lock(sb); ++ sbinfo = au_sbi(sb); ++ seq_printf(m, ",si=%lx", sysaufs_si_id(sbinfo)); ++ ++ mnt_flags = au_mntflags(sb); ++ if (au_opt_test(mnt_flags, XINO)) { ++ err = au_show_xino(m, mnt); ++ if (unlikely(err)) ++ goto out; ++ } else ++ seq_puts(m, ",noxino"); ++ ++ AuBool(TRUNC_XINO, trunc_xino); ++ AuStr(UDBA, udba); ++ AuBool(SHWH, shwh); ++ AuBool(PLINK, plink); ++ AuBool(DIO, dio); ++ /* AuBool(DIRPERM1, dirperm1); */ ++ /* AuBool(REFROF, refrof); */ ++ ++ v = sbinfo->si_wbr_create; ++ if (v != AuWbrCreate_Def) ++ au_show_wbr_create(m, v, sbinfo); ++ ++ v = sbinfo->si_wbr_copyup; ++ if (v != AuWbrCopyup_Def) ++ seq_printf(m, ",cpup=%s", au_optstr_wbr_copyup(v)); ++ ++ v = au_opt_test(mnt_flags, ALWAYS_DIROPQ); ++ if (v != au_opt_test(AuOpt_Def, ALWAYS_DIROPQ)) ++ seq_printf(m, ",diropq=%c", v ? 'a' : 'w'); ++ ++ AuUInt(DIRWH, dirwh, sbinfo->si_dirwh); ++ ++ v = jiffies_to_msecs(sbinfo->si_rdcache) / MSEC_PER_SEC; ++ AuUInt(RDCACHE, rdcache, v); ++ ++ AuUInt(RDBLK, rdblk, sbinfo->si_rdblk); ++ AuUInt(RDHASH, rdhash, sbinfo->si_rdhash); ++ ++ AuBool(SUM, sum); ++ /* AuBool(SUM_W, wsum); */ ++ AuBool(WARN_PERM, warn_perm); ++ AuBool(VERBOSE, verbose); ++ ++out: ++ /* be sure to print "br:" last */ ++ if (!sysaufs_brs) { ++ seq_puts(m, ",br:"); ++ au_show_brs(m, sb); ++ } ++ si_read_unlock(sb); ++ return 0; ++ ++#undef AuBool ++#undef AuStr ++#undef AuUInt ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* sum mode which returns the summation for statfs(2) */ ++ ++static u64 au_add_till_max(u64 a, u64 b) ++{ ++ u64 old; ++ ++ old = a; ++ a += b; ++ if (old < a) ++ return a; ++ return ULLONG_MAX; ++} ++ ++static int au_statfs_sum(struct super_block *sb, struct kstatfs *buf) ++{ ++ int err; ++ u64 blocks, bfree, bavail, files, ffree; ++ aufs_bindex_t bend, bindex, i; ++ unsigned char shared; ++ struct path h_path; ++ struct super_block *h_sb; ++ ++ blocks = 0; ++ bfree = 0; ++ bavail = 0; ++ files = 0; ++ ffree = 0; ++ ++ err = 0; ++ bend = au_sbend(sb); ++ for (bindex = bend; bindex >= 0; bindex--) { ++ h_path.mnt = au_sbr_mnt(sb, bindex); ++ h_sb = h_path.mnt->mnt_sb; ++ shared = 0; ++ for (i = bindex + 1; !shared && i <= bend; i++) ++ shared = (au_sbr_sb(sb, i) == h_sb); ++ if (shared) ++ continue; ++ ++ /* sb->s_root for NFS is unreliable */ ++ h_path.dentry = h_path.mnt->mnt_root; ++ err = vfs_statfs(&h_path, buf); ++ if (unlikely(err)) ++ goto out; ++ ++ blocks = au_add_till_max(blocks, buf->f_blocks); ++ bfree = au_add_till_max(bfree, buf->f_bfree); ++ bavail = au_add_till_max(bavail, buf->f_bavail); ++ files = au_add_till_max(files, buf->f_files); ++ ffree = au_add_till_max(ffree, buf->f_ffree); ++ } ++ ++ buf->f_blocks = blocks; ++ buf->f_bfree = bfree; ++ buf->f_bavail = bavail; ++ buf->f_files = files; ++ buf->f_ffree = ffree; ++ ++out: ++ return err; ++} ++ ++static int aufs_statfs(struct dentry *dentry, struct kstatfs *buf) ++{ ++ int err; ++ struct path h_path; ++ struct super_block *sb; ++ ++ /* lock free root dinfo */ ++ sb = dentry->d_sb; ++ si_noflush_read_lock(sb); ++ if (!au_opt_test(au_mntflags(sb), SUM)) { ++ /* sb->s_root for NFS is unreliable */ ++ h_path.mnt = au_sbr_mnt(sb, 0); ++ h_path.dentry = h_path.mnt->mnt_root; ++ err = vfs_statfs(&h_path, buf); ++ } else ++ err = au_statfs_sum(sb, buf); ++ si_read_unlock(sb); ++ ++ if (!err) { ++ buf->f_type = AUFS_SUPER_MAGIC; ++ buf->f_namelen = AUFS_MAX_NAMELEN; ++ memset(&buf->f_fsid, 0, sizeof(buf->f_fsid)); ++ } ++ /* buf->f_bsize = buf->f_blocks = buf->f_bfree = buf->f_bavail = -1; */ ++ ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* final actions when unmounting a file system */ ++static void aufs_put_super(struct super_block *sb) ++{ ++ struct au_sbinfo *sbinfo; ++ ++ sbinfo = au_sbi(sb); ++ if (!sbinfo) ++ return; ++ ++ dbgaufs_si_fin(sbinfo); ++ kobject_put(&sbinfo->si_kobj); ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++void au_array_free(void *array) ++{ ++ if (array) { ++ if (!is_vmalloc_addr(array)) ++ kfree(array); ++ else ++ vfree(array); ++ } ++} ++ ++void *au_array_alloc(unsigned long long *hint, au_arraycb_t cb, void *arg) ++{ ++ void *array; ++ unsigned long long n; ++ ++ array = NULL; ++ n = 0; ++ if (!*hint) ++ goto out; ++ ++ if (*hint > ULLONG_MAX / sizeof(array)) { ++ array = ERR_PTR(-EMFILE); ++ pr_err("hint %llu\n", *hint); ++ goto out; ++ } ++ ++ array = kmalloc(sizeof(array) * *hint, GFP_NOFS); ++ if (unlikely(!array)) ++ array = vmalloc(sizeof(array) * *hint); ++ if (unlikely(!array)) { ++ array = ERR_PTR(-ENOMEM); ++ goto out; ++ } ++ ++ n = cb(array, *hint, arg); ++ AuDebugOn(n > *hint); ++ ++out: ++ *hint = n; ++ return array; ++} ++ ++static unsigned long long au_iarray_cb(void *a, ++ unsigned long long max __maybe_unused, ++ void *arg) ++{ ++ unsigned long long n; ++ struct inode **p, *inode; ++ struct list_head *head; ++ ++ n = 0; ++ p = a; ++ head = arg; ++ spin_lock(&inode_lock); ++ list_for_each_entry(inode, head, i_sb_list) { ++ if (!is_bad_inode(inode) ++ && au_ii(inode)->ii_bstart >= 0) { ++ au_igrab(inode); ++ *p++ = inode; ++ n++; ++ AuDebugOn(n > max); ++ } ++ } ++ spin_unlock(&inode_lock); ++ ++ return n; ++} ++ ++struct inode **au_iarray_alloc(struct super_block *sb, unsigned long long *max) ++{ ++ *max = atomic_long_read(&au_sbi(sb)->si_ninodes); ++ return au_array_alloc(max, au_iarray_cb, &sb->s_inodes); ++} ++ ++void au_iarray_free(struct inode **a, unsigned long long max) ++{ ++ unsigned long long ull; ++ ++ for (ull = 0; ull < max; ull++) ++ iput(a[ull]); ++ au_array_free(a); ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* ++ * refresh dentry and inode at remount time. ++ */ ++/* todo: consolidate with simple_reval_dpath() and au_reval_for_attr() */ ++static int au_do_refresh(struct dentry *dentry, unsigned int dir_flags, ++ struct dentry *parent) ++{ ++ int err; ++ ++ di_write_lock_child(dentry); ++ di_read_lock_parent(parent, AuLock_IR); ++ err = au_refresh_dentry(dentry, parent); ++ if (!err && dir_flags) ++ au_hn_reset(dentry->d_inode, dir_flags); ++ di_read_unlock(parent, AuLock_IR); ++ di_write_unlock(dentry); ++ ++ return err; ++} ++ ++static int au_do_refresh_d(struct dentry *dentry, unsigned int sigen, ++ struct au_sbinfo *sbinfo, ++ const unsigned int dir_flags) ++{ ++ int err; ++ struct dentry *parent; ++ struct inode *inode; ++ ++ err = 0; ++ parent = dget_parent(dentry); ++ if (!au_digen_test(parent, sigen) && au_digen_test(dentry, sigen)) { ++ inode = dentry->d_inode; ++ if (inode) { ++ if (!S_ISDIR(inode->i_mode)) ++ err = au_do_refresh(dentry, /*dir_flags*/0, ++ parent); ++ else { ++ err = au_do_refresh(dentry, dir_flags, parent); ++ if (unlikely(err)) ++ au_fset_si(sbinfo, FAILED_REFRESH_DIR); ++ } ++ } else ++ err = au_do_refresh(dentry, /*dir_flags*/0, parent); ++ AuDbgDentry(dentry); ++ } ++ dput(parent); ++ ++ AuTraceErr(err); ++ return err; ++} ++ ++static int au_refresh_d(struct super_block *sb) ++{ ++ int err, i, j, ndentry, e; ++ unsigned int sigen; ++ struct au_dcsub_pages dpages; ++ struct au_dpage *dpage; ++ struct dentry **dentries, *d; ++ struct au_sbinfo *sbinfo; ++ struct dentry *root = sb->s_root; ++ const unsigned int dir_flags = au_hi_flags(root->d_inode, /*isdir*/1); ++ ++ err = au_dpages_init(&dpages, GFP_NOFS); ++ if (unlikely(err)) ++ goto out; ++ err = au_dcsub_pages(&dpages, root, NULL, NULL); ++ if (unlikely(err)) ++ goto out_dpages; ++ ++ sigen = au_sigen(sb); ++ sbinfo = au_sbi(sb); ++ for (i = 0; i < dpages.ndpage; i++) { ++ dpage = dpages.dpages + i; ++ dentries = dpage->dentries; ++ ndentry = dpage->ndentry; ++ for (j = 0; j < ndentry; j++) { ++ d = dentries[j]; ++ e = au_do_refresh_d(d, sigen, sbinfo, dir_flags); ++ if (unlikely(e && !err)) ++ err = e; ++ /* go on even err */ ++ } ++ } ++ ++out_dpages: ++ au_dpages_free(&dpages); ++out: ++ return err; ++} ++ ++static int au_refresh_i(struct super_block *sb) ++{ ++ int err, e; ++ unsigned int sigen; ++ unsigned long long max, ull; ++ struct inode *inode, **array; ++ ++ array = au_iarray_alloc(sb, &max); ++ err = PTR_ERR(array); ++ if (IS_ERR(array)) ++ goto out; ++ ++ err = 0; ++ sigen = au_sigen(sb); ++ for (ull = 0; ull < max; ull++) { ++ inode = array[ull]; ++ if (au_iigen(inode) != sigen) { ++ ii_write_lock_child(inode); ++ e = au_refresh_hinode_self(inode); ++ ii_write_unlock(inode); ++ if (unlikely(e)) { ++ pr_err("error %d, i%lu\n", e, inode->i_ino); ++ if (!err) ++ err = e; ++ /* go on even if err */ ++ } ++ } ++ } ++ ++ au_iarray_free(array, max); ++ ++out: ++ return err; ++} ++ ++static void au_remount_refresh(struct super_block *sb) ++{ ++ int err, e; ++ unsigned int udba; ++ aufs_bindex_t bindex, bend; ++ struct dentry *root; ++ struct inode *inode; ++ struct au_branch *br; ++ ++ au_sigen_inc(sb); ++ au_fclr_si(au_sbi(sb), FAILED_REFRESH_DIR); ++ ++ root = sb->s_root; ++ DiMustNoWaiters(root); ++ inode = root->d_inode; ++ IiMustNoWaiters(inode); ++ ++ udba = au_opt_udba(sb); ++ bend = au_sbend(sb); ++ for (bindex = 0; bindex <= bend; bindex++) { ++ br = au_sbr(sb, bindex); ++ err = au_hnotify_reset_br(udba, br, br->br_perm); ++ if (unlikely(err)) ++ AuIOErr("hnotify failed on br %d, %d, ignored\n", ++ bindex, err); ++ /* go on even if err */ ++ } ++ au_hn_reset(inode, au_hi_flags(inode, /*isdir*/1)); ++ ++ di_write_unlock(root); ++ err = au_refresh_d(sb); ++ e = au_refresh_i(sb); ++ if (unlikely(e && !err)) ++ err = e; ++ /* aufs_write_lock() calls ..._child() */ ++ di_write_lock_child(root); ++ ++ au_cpup_attr_all(inode, /*force*/1); ++ ++ if (unlikely(err)) ++ AuIOErr("refresh failed, ignored, %d\n", err); ++} ++ ++/* stop extra interpretation of errno in mount(8), and strange error messages */ ++static int cvt_err(int err) ++{ ++ AuTraceErr(err); ++ ++ switch (err) { ++ case -ENOENT: ++ case -ENOTDIR: ++ case -EEXIST: ++ case -EIO: ++ err = -EINVAL; ++ } ++ return err; ++} ++ ++static int aufs_remount_fs(struct super_block *sb, int *flags, char *data) ++{ ++ int err, do_dx; ++ unsigned int mntflags; ++ struct au_opts opts; ++ struct dentry *root; ++ struct inode *inode; ++ struct au_sbinfo *sbinfo; ++ ++ err = 0; ++ root = sb->s_root; ++ if (!data || !*data) { ++ err = si_write_lock(sb, AuLock_FLUSH | AuLock_NOPLM); ++ if (!err) { ++ di_write_lock_child(root); ++ err = au_opts_verify(sb, *flags, /*pending*/0); ++ aufs_write_unlock(root); ++ } ++ goto out; ++ } ++ ++ err = -ENOMEM; ++ memset(&opts, 0, sizeof(opts)); ++ opts.opt = (void *)__get_free_page(GFP_NOFS); ++ if (unlikely(!opts.opt)) ++ goto out; ++ opts.max_opt = PAGE_SIZE / sizeof(*opts.opt); ++ opts.flags = AuOpts_REMOUNT; ++ opts.sb_flags = *flags; ++ ++ /* parse it before aufs lock */ ++ err = au_opts_parse(sb, data, &opts); ++ if (unlikely(err)) ++ goto out_opts; ++ ++ sbinfo = au_sbi(sb); ++ inode = root->d_inode; ++ mutex_lock(&inode->i_mutex); ++ err = si_write_lock(sb, AuLock_FLUSH | AuLock_NOPLM); ++ if (unlikely(err)) ++ goto out_mtx; ++ di_write_lock_child(root); ++ ++ /* au_opts_remount() may return an error */ ++ err = au_opts_remount(sb, &opts); ++ au_opts_free(&opts); ++ ++ if (au_ftest_opts(opts.flags, REFRESH)) ++ au_remount_refresh(sb); ++ ++ if (au_ftest_opts(opts.flags, REFRESH_DYAOP)) { ++ mntflags = au_mntflags(sb); ++ do_dx = !!au_opt_test(mntflags, DIO); ++ au_dy_arefresh(do_dx); ++ } ++ ++ aufs_write_unlock(root); ++ ++out_mtx: ++ mutex_unlock(&inode->i_mutex); ++out_opts: ++ free_page((unsigned long)opts.opt); ++out: ++ err = cvt_err(err); ++ AuTraceErr(err); ++ return err; ++} ++ ++static const struct super_operations aufs_sop = { ++ .alloc_inode = aufs_alloc_inode, ++ .destroy_inode = aufs_destroy_inode, ++ /* always deleting, no clearing */ ++ .drop_inode = generic_delete_inode, ++ .show_options = aufs_show_options, ++ .statfs = aufs_statfs, ++ .put_super = aufs_put_super, ++ .remount_fs = aufs_remount_fs ++}; ++ ++/* ---------------------------------------------------------------------- */ ++ ++static int alloc_root(struct super_block *sb) ++{ ++ int err; ++ struct inode *inode; ++ struct dentry *root; ++ ++ err = -ENOMEM; ++ inode = au_iget_locked(sb, AUFS_ROOT_INO); ++ err = PTR_ERR(inode); ++ if (IS_ERR(inode)) ++ goto out; ++ ++ inode->i_op = &aufs_dir_iop; ++ inode->i_fop = &aufs_dir_fop; ++ inode->i_mode = S_IFDIR; ++ inode->i_nlink = 2; ++ unlock_new_inode(inode); ++ ++ root = d_alloc_root(inode); ++ if (unlikely(!root)) ++ goto out_iput; ++ err = PTR_ERR(root); ++ if (IS_ERR(root)) ++ goto out_iput; ++ ++ err = au_di_init(root); ++ if (!err) { ++ sb->s_root = root; ++ return 0; /* success */ ++ } ++ dput(root); ++ goto out; /* do not iput */ ++ ++out_iput: ++ iget_failed(inode); ++out: ++ return err; ++ ++} ++ ++static int aufs_fill_super(struct super_block *sb, void *raw_data, ++ int silent __maybe_unused) ++{ ++ int err; ++ struct au_opts opts; ++ struct dentry *root; ++ struct inode *inode; ++ char *arg = raw_data; ++ ++ if (unlikely(!arg || !*arg)) { ++ err = -EINVAL; ++ pr_err("no arg\n"); ++ goto out; ++ } ++ ++ err = -ENOMEM; ++ memset(&opts, 0, sizeof(opts)); ++ opts.opt = (void *)__get_free_page(GFP_NOFS); ++ if (unlikely(!opts.opt)) ++ goto out; ++ opts.max_opt = PAGE_SIZE / sizeof(*opts.opt); ++ opts.sb_flags = sb->s_flags; ++ ++ err = au_si_alloc(sb); ++ if (unlikely(err)) ++ goto out_opts; ++ ++ /* all timestamps always follow the ones on the branch */ ++ sb->s_flags |= MS_NOATIME | MS_NODIRATIME; ++ sb->s_op = &aufs_sop; ++ sb->s_d_op = &aufs_dop; ++ sb->s_magic = AUFS_SUPER_MAGIC; ++ sb->s_maxbytes = 0; ++ au_export_init(sb); ++ ++ err = alloc_root(sb); ++ if (unlikely(err)) { ++ si_write_unlock(sb); ++ goto out_info; ++ } ++ root = sb->s_root; ++ inode = root->d_inode; ++ ++ /* ++ * actually we can parse options regardless aufs lock here. ++ * but at remount time, parsing must be done before aufs lock. ++ * so we follow the same rule. ++ */ ++ ii_write_lock_parent(inode); ++ aufs_write_unlock(root); ++ err = au_opts_parse(sb, arg, &opts); ++ if (unlikely(err)) ++ goto out_root; ++ ++ /* lock vfs_inode first, then aufs. */ ++ mutex_lock(&inode->i_mutex); ++ aufs_write_lock(root); ++ err = au_opts_mount(sb, &opts); ++ au_opts_free(&opts); ++ aufs_write_unlock(root); ++ mutex_unlock(&inode->i_mutex); ++ if (!err) ++ goto out_opts; /* success */ ++ ++out_root: ++ dput(root); ++ sb->s_root = NULL; ++out_info: ++ kobject_put(&au_sbi(sb)->si_kobj); ++ sb->s_fs_info = NULL; ++out_opts: ++ free_page((unsigned long)opts.opt); ++out: ++ AuTraceErr(err); ++ err = cvt_err(err); ++ AuTraceErr(err); ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++static struct dentry *aufs_mount(struct file_system_type *fs_type, int flags, ++ const char *dev_name __maybe_unused, ++ void *raw_data) ++{ ++ struct dentry *root; ++ struct super_block *sb; ++ ++ /* all timestamps always follow the ones on the branch */ ++ /* mnt->mnt_flags |= MNT_NOATIME | MNT_NODIRATIME; */ ++ root = mount_nodev(fs_type, flags, raw_data, aufs_fill_super); ++ if (IS_ERR(root)) ++ goto out; ++ ++ sb = root->d_sb; ++ si_write_lock(sb, !AuLock_FLUSH); ++ sysaufs_brs_add(sb, 0); ++ si_write_unlock(sb); ++ au_sbilist_add(sb); ++ ++out: ++ return root; ++} ++ ++static void aufs_kill_sb(struct super_block *sb) ++{ ++ struct au_sbinfo *sbinfo; ++ ++ sbinfo = au_sbi(sb); ++ if (sbinfo) { ++ au_sbilist_del(sb); ++ aufs_write_lock(sb->s_root); ++ if (sbinfo->si_wbr_create_ops->fin) ++ sbinfo->si_wbr_create_ops->fin(sb); ++ if (au_opt_test(sbinfo->si_mntflags, UDBA_HNOTIFY)) { ++ au_opt_set_udba(sbinfo->si_mntflags, UDBA_NONE); ++ au_remount_refresh(sb); ++ } ++ if (au_opt_test(sbinfo->si_mntflags, PLINK)) ++ au_plink_put(sb, /*verbose*/1); ++ au_xino_clr(sb); ++ aufs_write_unlock(sb->s_root); ++ au_nwt_flush(&sbinfo->si_nowait); ++ } ++ generic_shutdown_super(sb); ++} ++ ++struct file_system_type aufs_fs_type = { ++ .name = AUFS_FSTYPE, ++ .fs_flags = ++ FS_RENAME_DOES_D_MOVE /* a race between rename and others */ ++ | FS_REVAL_DOT, /* for NFS branch and udba */ ++ .mount = aufs_mount, ++ .kill_sb = aufs_kill_sb, ++ /* no need to __module_get() and module_put(). */ ++ .owner = THIS_MODULE, ++}; +diff -urN a/fs/aufs/super.h b/fs/aufs/super.h +--- a/fs/aufs/super.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/super.h 2011-03-06 23:28:02.620413138 +0000 +@@ -0,0 +1,527 @@ ++/* ++ * Copyright (C) 2005-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * super_block operations ++ */ ++ ++#ifndef __AUFS_SUPER_H__ ++#define __AUFS_SUPER_H__ ++ ++#ifdef __KERNEL__ ++ ++#include ++#include ++#include "rwsem.h" ++#include "spl.h" ++#include "wkq.h" ++ ++typedef ssize_t (*au_readf_t)(struct file *, char __user *, size_t, loff_t *); ++typedef ssize_t (*au_writef_t)(struct file *, const char __user *, size_t, ++ loff_t *); ++ ++/* policies to select one among multiple writable branches */ ++struct au_wbr_copyup_operations { ++ int (*copyup)(struct dentry *dentry); ++}; ++ ++struct au_wbr_create_operations { ++ int (*create)(struct dentry *dentry, int isdir); ++ int (*init)(struct super_block *sb); ++ int (*fin)(struct super_block *sb); ++}; ++ ++struct au_wbr_mfs { ++ struct mutex mfs_lock; /* protect this structure */ ++ unsigned long mfs_jiffy; ++ unsigned long mfs_expire; ++ aufs_bindex_t mfs_bindex; ++ ++ unsigned long long mfsrr_bytes; ++ unsigned long long mfsrr_watermark; ++}; ++ ++struct au_branch; ++struct au_sbinfo { ++ /* nowait tasks in the system-wide workqueue */ ++ struct au_nowait_tasks si_nowait; ++ ++ /* ++ * tried sb->s_umount, but failed due to the dependecy between i_mutex. ++ * rwsem for au_sbinfo is necessary. ++ */ ++ struct au_rwsem si_rwsem; ++ ++ /* prevent recursive locking in deleting inode */ ++ struct { ++ unsigned long *bitmap; ++ spinlock_t tree_lock; ++ struct radix_tree_root tree; ++ } au_si_pid; ++ ++ /* ++ * dirty approach to protect sb->sb_inodes and ->s_files from remount. ++ */ ++ atomic_long_t si_ninodes, si_nfiles; ++ ++ /* branch management */ ++ unsigned int si_generation; ++ ++ /* see above flags */ ++ unsigned char au_si_status; ++ ++ aufs_bindex_t si_bend; ++ ++ /* dirty trick to keep br_id plus */ ++ unsigned int si_last_br_id : ++ sizeof(aufs_bindex_t) * BITS_PER_BYTE - 1; ++ struct au_branch **si_branch; ++ ++ /* policy to select a writable branch */ ++ unsigned char si_wbr_copyup; ++ unsigned char si_wbr_create; ++ struct au_wbr_copyup_operations *si_wbr_copyup_ops; ++ struct au_wbr_create_operations *si_wbr_create_ops; ++ ++ /* round robin */ ++ atomic_t si_wbr_rr_next; ++ ++ /* most free space */ ++ struct au_wbr_mfs si_wbr_mfs; ++ ++ /* mount flags */ ++ /* include/asm-ia64/siginfo.h defines a macro named si_flags */ ++ unsigned int si_mntflags; ++ ++ /* external inode number (bitmap and translation table) */ ++ au_readf_t si_xread; ++ au_writef_t si_xwrite; ++ struct file *si_xib; ++ struct mutex si_xib_mtx; /* protect xib members */ ++ unsigned long *si_xib_buf; ++ unsigned long si_xib_last_pindex; ++ int si_xib_next_bit; ++ aufs_bindex_t si_xino_brid; ++ /* reserved for future use */ ++ /* unsigned long long si_xib_limit; */ /* Max xib file size */ ++ ++#ifdef CONFIG_AUFS_EXPORT ++ /* i_generation */ ++ struct file *si_xigen; ++ atomic_t si_xigen_next; ++#endif ++ ++ /* vdir parameters */ ++ unsigned long si_rdcache; /* max cache time in jiffies */ ++ unsigned int si_rdblk; /* deblk size */ ++ unsigned int si_rdhash; /* hash size */ ++ ++ /* ++ * If the number of whiteouts are larger than si_dirwh, leave all of ++ * them after au_whtmp_ren to reduce the cost of rmdir(2). ++ * future fsck.aufs or kernel thread will remove them later. ++ * Otherwise, remove all whiteouts and the dir in rmdir(2). ++ */ ++ unsigned int si_dirwh; ++ ++ /* ++ * rename(2) a directory with all children. ++ */ ++ /* reserved for future use */ ++ /* int si_rendir; */ ++ ++ /* pseudo_link list */ ++ struct au_splhead si_plink; ++ wait_queue_head_t si_plink_wq; ++ spinlock_t si_plink_maint_lock; ++ pid_t si_plink_maint_pid; ++ ++ /* ++ * sysfs and lifetime management. ++ * this is not a small structure and it may be a waste of memory in case ++ * of sysfs is disabled, particulary when many aufs-es are mounted. ++ * but using sysfs is majority. ++ */ ++ struct kobject si_kobj; ++#ifdef CONFIG_DEBUG_FS ++ struct dentry *si_dbgaufs, *si_dbgaufs_xib; ++#ifdef CONFIG_AUFS_EXPORT ++ struct dentry *si_dbgaufs_xigen; ++#endif ++#endif ++ ++#ifdef CONFIG_AUFS_SBILIST ++ struct list_head si_list; ++#endif ++ ++ /* dirty, necessary for unmounting, sysfs and sysrq */ ++ struct super_block *si_sb; ++}; ++ ++/* sbinfo status flags */ ++/* ++ * set true when refresh_dirs() failed at remount time. ++ * then try refreshing dirs at access time again. ++ * if it is false, refreshing dirs at access time is unnecesary ++ */ ++#define AuSi_FAILED_REFRESH_DIR 1 ++static inline unsigned char au_do_ftest_si(struct au_sbinfo *sbi, ++ unsigned int flag) ++{ ++ AuRwMustAnyLock(&sbi->si_rwsem); ++ return sbi->au_si_status & flag; ++} ++#define au_ftest_si(sbinfo, name) au_do_ftest_si(sbinfo, AuSi_##name) ++#define au_fset_si(sbinfo, name) do { \ ++ AuRwMustWriteLock(&(sbinfo)->si_rwsem); \ ++ (sbinfo)->au_si_status |= AuSi_##name; \ ++} while (0) ++#define au_fclr_si(sbinfo, name) do { \ ++ AuRwMustWriteLock(&(sbinfo)->si_rwsem); \ ++ (sbinfo)->au_si_status &= ~AuSi_##name; \ ++} while (0) ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* policy to select one among writable branches */ ++#define AuWbrCopyup(sbinfo, ...) \ ++ ((sbinfo)->si_wbr_copyup_ops->copyup(__VA_ARGS__)) ++#define AuWbrCreate(sbinfo, ...) \ ++ ((sbinfo)->si_wbr_create_ops->create(__VA_ARGS__)) ++ ++/* flags for si_read_lock()/aufs_read_lock()/di_read_lock() */ ++#define AuLock_DW 1 /* write-lock dentry */ ++#define AuLock_IR (1 << 1) /* read-lock inode */ ++#define AuLock_IW (1 << 2) /* write-lock inode */ ++#define AuLock_FLUSH (1 << 3) /* wait for 'nowait' tasks */ ++#define AuLock_DIR (1 << 4) /* target is a dir */ ++#define AuLock_NOPLM (1 << 5) /* return err in plm mode */ ++#define AuLock_NOPLMW (1 << 6) /* wait for plm mode ends */ ++#define AuLock_GEN (1 << 7) /* test digen/iigen */ ++#define au_ftest_lock(flags, name) ((flags) & AuLock_##name) ++#define au_fset_lock(flags, name) \ ++ do { (flags) |= AuLock_##name; } while (0) ++#define au_fclr_lock(flags, name) \ ++ do { (flags) &= ~AuLock_##name; } while (0) ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* super.c */ ++extern struct file_system_type aufs_fs_type; ++struct inode *au_iget_locked(struct super_block *sb, ino_t ino); ++typedef unsigned long long (*au_arraycb_t)(void *array, unsigned long long max, ++ void *arg); ++void au_array_free(void *array); ++void *au_array_alloc(unsigned long long *hint, au_arraycb_t cb, void *arg); ++struct inode **au_iarray_alloc(struct super_block *sb, unsigned long long *max); ++void au_iarray_free(struct inode **a, unsigned long long max); ++ ++/* sbinfo.c */ ++void au_si_free(struct kobject *kobj); ++int au_si_alloc(struct super_block *sb); ++int au_sbr_realloc(struct au_sbinfo *sbinfo, int nbr); ++ ++unsigned int au_sigen_inc(struct super_block *sb); ++aufs_bindex_t au_new_br_id(struct super_block *sb); ++ ++int si_read_lock(struct super_block *sb, int flags); ++int si_write_lock(struct super_block *sb, int flags); ++int aufs_read_lock(struct dentry *dentry, int flags); ++void aufs_read_unlock(struct dentry *dentry, int flags); ++void aufs_write_lock(struct dentry *dentry); ++void aufs_write_unlock(struct dentry *dentry); ++int aufs_read_and_write_lock2(struct dentry *d1, struct dentry *d2, int flags); ++void aufs_read_and_write_unlock2(struct dentry *d1, struct dentry *d2); ++ ++int si_pid_test_slow(struct super_block *sb); ++void si_pid_set_slow(struct super_block *sb); ++void si_pid_clr_slow(struct super_block *sb); ++ ++/* wbr_policy.c */ ++extern struct au_wbr_copyup_operations au_wbr_copyup_ops[]; ++extern struct au_wbr_create_operations au_wbr_create_ops[]; ++int au_cpdown_dirs(struct dentry *dentry, aufs_bindex_t bdst); ++ ++/* ---------------------------------------------------------------------- */ ++ ++static inline struct au_sbinfo *au_sbi(struct super_block *sb) ++{ ++ return sb->s_fs_info; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++#ifdef CONFIG_AUFS_EXPORT ++void au_export_init(struct super_block *sb); ++ ++static inline int au_test_nfsd(void) ++{ ++ struct task_struct *tsk = current; ++ ++ return (tsk->flags & PF_KTHREAD) ++ && !strcmp(tsk->comm, "nfsd"); ++} ++ ++void au_xigen_inc(struct inode *inode); ++int au_xigen_new(struct inode *inode); ++int au_xigen_set(struct super_block *sb, struct file *base); ++void au_xigen_clr(struct super_block *sb); ++ ++static inline int au_busy_or_stale(void) ++{ ++ if (!au_test_nfsd()) ++ return -EBUSY; ++ return -ESTALE; ++} ++#else ++AuStubVoid(au_export_init, struct super_block *sb) ++AuStubInt0(au_test_nfsd, void) ++AuStubVoid(au_xigen_inc, struct inode *inode) ++AuStubInt0(au_xigen_new, struct inode *inode) ++AuStubInt0(au_xigen_set, struct super_block *sb, struct file *base) ++AuStubVoid(au_xigen_clr, struct super_block *sb) ++static inline int au_busy_or_stale(void) ++{ ++ return -EBUSY; ++} ++#endif /* CONFIG_AUFS_EXPORT */ ++ ++/* ---------------------------------------------------------------------- */ ++ ++#ifdef CONFIG_AUFS_SBILIST ++/* module.c */ ++extern struct au_splhead au_sbilist; ++ ++static inline void au_sbilist_init(void) ++{ ++ au_spl_init(&au_sbilist); ++} ++ ++static inline void au_sbilist_add(struct super_block *sb) ++{ ++ au_spl_add(&au_sbi(sb)->si_list, &au_sbilist); ++} ++ ++static inline void au_sbilist_del(struct super_block *sb) ++{ ++ au_spl_del(&au_sbi(sb)->si_list, &au_sbilist); ++} ++#else ++AuStubVoid(au_sbilist_init, void) ++AuStubVoid(au_sbilist_add, struct super_block*) ++AuStubVoid(au_sbilist_del, struct super_block*) ++#endif ++ ++/* ---------------------------------------------------------------------- */ ++ ++static inline void dbgaufs_si_null(struct au_sbinfo *sbinfo) ++{ ++ /* ++ * This function is a dynamic '__init' fucntion actually, ++ * so the tiny check for si_rwsem is unnecessary. ++ */ ++ /* AuRwMustWriteLock(&sbinfo->si_rwsem); */ ++#ifdef CONFIG_DEBUG_FS ++ sbinfo->si_dbgaufs = NULL; ++ sbinfo->si_dbgaufs_xib = NULL; ++#ifdef CONFIG_AUFS_EXPORT ++ sbinfo->si_dbgaufs_xigen = NULL; ++#endif ++#endif ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++static inline pid_t si_pid_bit(void) ++{ ++ /* the origin of pid is 1, but the bitmap's is 0 */ ++ return current->pid - 1; ++} ++ ++static inline int si_pid_test(struct super_block *sb) ++{ ++ pid_t bit = si_pid_bit(); ++ if (bit < PID_MAX_DEFAULT) ++ return test_bit(bit, au_sbi(sb)->au_si_pid.bitmap); ++ else ++ return si_pid_test_slow(sb); ++} ++ ++static inline void si_pid_set(struct super_block *sb) ++{ ++ pid_t bit = si_pid_bit(); ++ if (bit < PID_MAX_DEFAULT) { ++ AuDebugOn(test_bit(bit, au_sbi(sb)->au_si_pid.bitmap)); ++ set_bit(bit, au_sbi(sb)->au_si_pid.bitmap); ++ /* smp_mb(); */ ++ } else ++ si_pid_set_slow(sb); ++} ++ ++static inline void si_pid_clr(struct super_block *sb) ++{ ++ pid_t bit = si_pid_bit(); ++ if (bit < PID_MAX_DEFAULT) { ++ AuDebugOn(!test_bit(bit, au_sbi(sb)->au_si_pid.bitmap)); ++ clear_bit(bit, au_sbi(sb)->au_si_pid.bitmap); ++ /* smp_mb(); */ ++ } else ++ si_pid_clr_slow(sb); ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* lock superblock. mainly for entry point functions */ ++/* ++ * __si_read_lock, __si_write_lock, ++ * __si_read_unlock, __si_write_unlock, __si_downgrade_lock ++ */ ++AuSimpleRwsemFuncs(__si, struct super_block *sb, &au_sbi(sb)->si_rwsem); ++ ++#define SiMustNoWaiters(sb) AuRwMustNoWaiters(&au_sbi(sb)->si_rwsem) ++#define SiMustAnyLock(sb) AuRwMustAnyLock(&au_sbi(sb)->si_rwsem) ++#define SiMustWriteLock(sb) AuRwMustWriteLock(&au_sbi(sb)->si_rwsem) ++ ++static inline void si_noflush_read_lock(struct super_block *sb) ++{ ++ __si_read_lock(sb); ++ si_pid_set(sb); ++} ++ ++static inline int si_noflush_read_trylock(struct super_block *sb) ++{ ++ int locked = __si_read_trylock(sb); ++ if (locked) ++ si_pid_set(sb); ++ return locked; ++} ++ ++static inline void si_noflush_write_lock(struct super_block *sb) ++{ ++ __si_write_lock(sb); ++ si_pid_set(sb); ++} ++ ++static inline int si_noflush_write_trylock(struct super_block *sb) ++{ ++ int locked = __si_write_trylock(sb); ++ if (locked) ++ si_pid_set(sb); ++ return locked; ++} ++ ++#if 0 /* unused */ ++static inline int si_read_trylock(struct super_block *sb, int flags) ++{ ++ if (au_ftest_lock(flags, FLUSH)) ++ au_nwt_flush(&au_sbi(sb)->si_nowait); ++ return si_noflush_read_trylock(sb); ++} ++#endif ++ ++static inline void si_read_unlock(struct super_block *sb) ++{ ++ si_pid_clr(sb); ++ __si_read_unlock(sb); ++} ++ ++#if 0 /* unused */ ++static inline int si_write_trylock(struct super_block *sb, int flags) ++{ ++ if (au_ftest_lock(flags, FLUSH)) ++ au_nwt_flush(&au_sbi(sb)->si_nowait); ++ return si_noflush_write_trylock(sb); ++} ++#endif ++ ++static inline void si_write_unlock(struct super_block *sb) ++{ ++ si_pid_clr(sb); ++ __si_write_unlock(sb); ++} ++ ++#if 0 /* unused */ ++static inline void si_downgrade_lock(struct super_block *sb) ++{ ++ __si_downgrade_lock(sb); ++} ++#endif ++ ++/* ---------------------------------------------------------------------- */ ++ ++static inline aufs_bindex_t au_sbend(struct super_block *sb) ++{ ++ SiMustAnyLock(sb); ++ return au_sbi(sb)->si_bend; ++} ++ ++static inline unsigned int au_mntflags(struct super_block *sb) ++{ ++ SiMustAnyLock(sb); ++ return au_sbi(sb)->si_mntflags; ++} ++ ++static inline unsigned int au_sigen(struct super_block *sb) ++{ ++ SiMustAnyLock(sb); ++ return au_sbi(sb)->si_generation; ++} ++ ++static inline void au_ninodes_inc(struct super_block *sb) ++{ ++ atomic_long_inc(&au_sbi(sb)->si_ninodes); ++} ++ ++static inline void au_ninodes_dec(struct super_block *sb) ++{ ++ AuDebugOn(!atomic_long_read(&au_sbi(sb)->si_ninodes)); ++ atomic_long_dec(&au_sbi(sb)->si_ninodes); ++} ++ ++static inline void au_nfiles_inc(struct super_block *sb) ++{ ++ atomic_long_inc(&au_sbi(sb)->si_nfiles); ++} ++ ++static inline void au_nfiles_dec(struct super_block *sb) ++{ ++ AuDebugOn(!atomic_long_read(&au_sbi(sb)->si_nfiles)); ++ atomic_long_dec(&au_sbi(sb)->si_nfiles); ++} ++ ++static inline struct au_branch *au_sbr(struct super_block *sb, ++ aufs_bindex_t bindex) ++{ ++ SiMustAnyLock(sb); ++ return au_sbi(sb)->si_branch[0 + bindex]; ++} ++ ++static inline void au_xino_brid_set(struct super_block *sb, aufs_bindex_t brid) ++{ ++ SiMustWriteLock(sb); ++ au_sbi(sb)->si_xino_brid = brid; ++} ++ ++static inline aufs_bindex_t au_xino_brid(struct super_block *sb) ++{ ++ SiMustAnyLock(sb); ++ return au_sbi(sb)->si_xino_brid; ++} ++ ++#endif /* __KERNEL__ */ ++#endif /* __AUFS_SUPER_H__ */ +diff -urN a/fs/aufs/sysaufs.c b/fs/aufs/sysaufs.c +--- a/fs/aufs/sysaufs.c 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/sysaufs.c 2011-03-06 23:28:02.620413138 +0000 +@@ -0,0 +1,107 @@ ++/* ++ * Copyright (C) 2005-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * sysfs interface and lifetime management ++ * they are necessary regardless sysfs is disabled. ++ */ ++ ++#include ++#include ++#include ++#include "aufs.h" ++ ++unsigned long sysaufs_si_mask; ++struct kset *sysaufs_kset; ++ ++#define AuSiAttr(_name) { \ ++ .attr = { .name = __stringify(_name), .mode = 0444 }, \ ++ .show = sysaufs_si_##_name, \ ++} ++ ++static struct sysaufs_si_attr sysaufs_si_attr_xi_path = AuSiAttr(xi_path); ++struct attribute *sysaufs_si_attrs[] = { ++ &sysaufs_si_attr_xi_path.attr, ++ NULL, ++}; ++ ++static const struct sysfs_ops au_sbi_ops = { ++ .show = sysaufs_si_show ++}; ++ ++static struct kobj_type au_sbi_ktype = { ++ .release = au_si_free, ++ .sysfs_ops = &au_sbi_ops, ++ .default_attrs = sysaufs_si_attrs ++}; ++ ++/* ---------------------------------------------------------------------- */ ++ ++int sysaufs_si_init(struct au_sbinfo *sbinfo) ++{ ++ int err; ++ ++ sbinfo->si_kobj.kset = sysaufs_kset; ++ /* cf. sysaufs_name() */ ++ err = kobject_init_and_add ++ (&sbinfo->si_kobj, &au_sbi_ktype, /*&sysaufs_kset->kobj*/NULL, ++ SysaufsSiNamePrefix "%lx", sysaufs_si_id(sbinfo)); ++ ++ dbgaufs_si_null(sbinfo); ++ if (!err) { ++ err = dbgaufs_si_init(sbinfo); ++ if (unlikely(err)) ++ kobject_put(&sbinfo->si_kobj); ++ } ++ return err; ++} ++ ++void sysaufs_fin(void) ++{ ++ dbgaufs_fin(); ++ sysfs_remove_group(&sysaufs_kset->kobj, sysaufs_attr_group); ++ kset_unregister(sysaufs_kset); ++} ++ ++int __init sysaufs_init(void) ++{ ++ int err; ++ ++ do { ++ get_random_bytes(&sysaufs_si_mask, sizeof(sysaufs_si_mask)); ++ } while (!sysaufs_si_mask); ++ ++ err = -EINVAL; ++ sysaufs_kset = kset_create_and_add(AUFS_NAME, NULL, fs_kobj); ++ if (unlikely(!sysaufs_kset)) ++ goto out; ++ err = PTR_ERR(sysaufs_kset); ++ if (IS_ERR(sysaufs_kset)) ++ goto out; ++ err = sysfs_create_group(&sysaufs_kset->kobj, sysaufs_attr_group); ++ if (unlikely(err)) { ++ kset_unregister(sysaufs_kset); ++ goto out; ++ } ++ ++ err = dbgaufs_init(); ++ if (unlikely(err)) ++ sysaufs_fin(); ++out: ++ return err; ++} +diff -urN a/fs/aufs/sysaufs.h b/fs/aufs/sysaufs.h +--- a/fs/aufs/sysaufs.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/sysaufs.h 2011-03-06 23:28:02.616413258 +0000 +@@ -0,0 +1,105 @@ ++/* ++ * Copyright (C) 2005-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * sysfs interface and mount lifetime management ++ */ ++ ++#ifndef __SYSAUFS_H__ ++#define __SYSAUFS_H__ ++ ++#ifdef __KERNEL__ ++ ++#include ++#include ++#include "module.h" ++ ++struct super_block; ++struct au_sbinfo; ++ ++struct sysaufs_si_attr { ++ struct attribute attr; ++ int (*show)(struct seq_file *seq, struct super_block *sb); ++}; ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* sysaufs.c */ ++extern unsigned long sysaufs_si_mask; ++extern struct kset *sysaufs_kset; ++extern struct attribute *sysaufs_si_attrs[]; ++int sysaufs_si_init(struct au_sbinfo *sbinfo); ++int __init sysaufs_init(void); ++void sysaufs_fin(void); ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* some people doesn't like to show a pointer in kernel */ ++static inline unsigned long sysaufs_si_id(struct au_sbinfo *sbinfo) ++{ ++ return sysaufs_si_mask ^ (unsigned long)sbinfo; ++} ++ ++#define SysaufsSiNamePrefix "si_" ++#define SysaufsSiNameLen (sizeof(SysaufsSiNamePrefix) + 16) ++static inline void sysaufs_name(struct au_sbinfo *sbinfo, char *name) ++{ ++ snprintf(name, SysaufsSiNameLen, SysaufsSiNamePrefix "%lx", ++ sysaufs_si_id(sbinfo)); ++} ++ ++struct au_branch; ++#ifdef CONFIG_SYSFS ++/* sysfs.c */ ++extern struct attribute_group *sysaufs_attr_group; ++ ++int sysaufs_si_xi_path(struct seq_file *seq, struct super_block *sb); ++ssize_t sysaufs_si_show(struct kobject *kobj, struct attribute *attr, ++ char *buf); ++ ++void sysaufs_br_init(struct au_branch *br); ++void sysaufs_brs_add(struct super_block *sb, aufs_bindex_t bindex); ++void sysaufs_brs_del(struct super_block *sb, aufs_bindex_t bindex); ++ ++#define sysaufs_brs_init() do {} while (0) ++ ++#else ++#define sysaufs_attr_group NULL ++ ++AuStubInt0(sysaufs_si_xi_path, struct seq_file *seq, struct super_block *sb) ++ ++static inline ++ssize_t sysaufs_si_show(struct kobject *kobj, struct attribute *attr, ++ char *buf) ++{ ++ return 0; ++} ++ ++AuStubVoid(sysaufs_br_init, struct au_branch *br) ++AuStubVoid(sysaufs_brs_add, struct super_block *sb, aufs_bindex_t bindex) ++AuStubVoid(sysaufs_brs_del, struct super_block *sb, aufs_bindex_t bindex) ++ ++static inline void sysaufs_brs_init(void) ++{ ++ sysaufs_brs = 0; ++} ++ ++#endif /* CONFIG_SYSFS */ ++ ++#endif /* __KERNEL__ */ ++#endif /* __SYSAUFS_H__ */ +diff -urN a/fs/aufs/sysfs.c b/fs/aufs/sysfs.c +--- a/fs/aufs/sysfs.c 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/sysfs.c 2011-03-06 23:28:02.620413138 +0000 +@@ -0,0 +1,250 @@ ++/* ++ * Copyright (C) 2005-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * sysfs interface ++ */ ++ ++#include ++#include ++#include ++#include ++#include "aufs.h" ++ ++#ifdef CONFIG_AUFS_FS_MODULE ++/* this entry violates the "one line per file" policy of sysfs */ ++static ssize_t config_show(struct kobject *kobj, struct kobj_attribute *attr, ++ char *buf) ++{ ++ ssize_t err; ++ static char *conf = ++/* this file is generated at compiling */ ++#include "conf.str" ++ ; ++ ++ err = snprintf(buf, PAGE_SIZE, conf); ++ if (unlikely(err >= PAGE_SIZE)) ++ err = -EFBIG; ++ return err; ++} ++ ++static struct kobj_attribute au_config_attr = __ATTR_RO(config); ++#endif ++ ++static struct attribute *au_attr[] = { ++#ifdef CONFIG_AUFS_FS_MODULE ++ &au_config_attr.attr, ++#endif ++ NULL, /* need to NULL terminate the list of attributes */ ++}; ++ ++static struct attribute_group sysaufs_attr_group_body = { ++ .attrs = au_attr ++}; ++ ++struct attribute_group *sysaufs_attr_group = &sysaufs_attr_group_body; ++ ++/* ---------------------------------------------------------------------- */ ++ ++int sysaufs_si_xi_path(struct seq_file *seq, struct super_block *sb) ++{ ++ int err; ++ ++ SiMustAnyLock(sb); ++ ++ err = 0; ++ if (au_opt_test(au_mntflags(sb), XINO)) { ++ err = au_xino_path(seq, au_sbi(sb)->si_xib); ++ seq_putc(seq, '\n'); ++ } ++ return err; ++} ++ ++/* ++ * the lifetime of branch is independent from the entry under sysfs. ++ * sysfs handles the lifetime of the entry, and never call ->show() after it is ++ * unlinked. ++ */ ++static int sysaufs_si_br(struct seq_file *seq, struct super_block *sb, ++ aufs_bindex_t bindex) ++{ ++ struct path path; ++ struct dentry *root; ++ struct au_branch *br; ++ ++ AuDbg("b%d\n", bindex); ++ ++ root = sb->s_root; ++ di_read_lock_parent(root, !AuLock_IR); ++ br = au_sbr(sb, bindex); ++ path.mnt = br->br_mnt; ++ path.dentry = au_h_dptr(root, bindex); ++ au_seq_path(seq, &path); ++ di_read_unlock(root, !AuLock_IR); ++ seq_printf(seq, "=%s\n", au_optstr_br_perm(br->br_perm)); ++ return 0; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++static struct seq_file *au_seq(char *p, ssize_t len) ++{ ++ struct seq_file *seq; ++ ++ seq = kzalloc(sizeof(*seq), GFP_NOFS); ++ if (seq) { ++ /* mutex_init(&seq.lock); */ ++ seq->buf = p; ++ seq->size = len; ++ return seq; /* success */ ++ } ++ ++ seq = ERR_PTR(-ENOMEM); ++ return seq; ++} ++ ++#define SysaufsBr_PREFIX "br" ++ ++/* todo: file size may exceed PAGE_SIZE */ ++ssize_t sysaufs_si_show(struct kobject *kobj, struct attribute *attr, ++ char *buf) ++{ ++ ssize_t err; ++ long l; ++ aufs_bindex_t bend; ++ struct au_sbinfo *sbinfo; ++ struct super_block *sb; ++ struct seq_file *seq; ++ char *name; ++ struct attribute **cattr; ++ ++ sbinfo = container_of(kobj, struct au_sbinfo, si_kobj); ++ sb = sbinfo->si_sb; ++ ++ /* ++ * prevent a race condition between sysfs and aufs. ++ * for instance, sysfs_file_read() calls sysfs_get_active_two() which ++ * prohibits maintaining the sysfs entries. ++ * hew we acquire read lock after sysfs_get_active_two(). ++ * on the other hand, the remount process may maintain the sysfs/aufs ++ * entries after acquiring write lock. ++ * it can cause a deadlock. ++ * simply we gave up processing read here. ++ */ ++ err = -EBUSY; ++ if (unlikely(!si_noflush_read_trylock(sb))) ++ goto out; ++ ++ seq = au_seq(buf, PAGE_SIZE); ++ err = PTR_ERR(seq); ++ if (IS_ERR(seq)) ++ goto out_unlock; ++ ++ name = (void *)attr->name; ++ cattr = sysaufs_si_attrs; ++ while (*cattr) { ++ if (!strcmp(name, (*cattr)->name)) { ++ err = container_of(*cattr, struct sysaufs_si_attr, attr) ++ ->show(seq, sb); ++ goto out_seq; ++ } ++ cattr++; ++ } ++ ++ bend = au_sbend(sb); ++ if (!strncmp(name, SysaufsBr_PREFIX, sizeof(SysaufsBr_PREFIX) - 1)) { ++ name += sizeof(SysaufsBr_PREFIX) - 1; ++ err = strict_strtol(name, 10, &l); ++ if (!err) { ++ if (l <= bend) ++ err = sysaufs_si_br(seq, sb, (aufs_bindex_t)l); ++ else ++ err = -ENOENT; ++ } ++ goto out_seq; ++ } ++ BUG(); ++ ++out_seq: ++ if (!err) { ++ err = seq->count; ++ /* sysfs limit */ ++ if (unlikely(err == PAGE_SIZE)) ++ err = -EFBIG; ++ } ++ kfree(seq); ++out_unlock: ++ si_read_unlock(sb); ++out: ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++void sysaufs_br_init(struct au_branch *br) ++{ ++ struct attribute *attr = &br->br_attr; ++ ++ sysfs_attr_init(attr); ++ attr->name = br->br_name; ++ attr->mode = S_IRUGO; ++} ++ ++void sysaufs_brs_del(struct super_block *sb, aufs_bindex_t bindex) ++{ ++ struct au_branch *br; ++ struct kobject *kobj; ++ aufs_bindex_t bend; ++ ++ dbgaufs_brs_del(sb, bindex); ++ ++ if (!sysaufs_brs) ++ return; ++ ++ kobj = &au_sbi(sb)->si_kobj; ++ bend = au_sbend(sb); ++ for (; bindex <= bend; bindex++) { ++ br = au_sbr(sb, bindex); ++ sysfs_remove_file(kobj, &br->br_attr); ++ } ++} ++ ++void sysaufs_brs_add(struct super_block *sb, aufs_bindex_t bindex) ++{ ++ int err; ++ aufs_bindex_t bend; ++ struct kobject *kobj; ++ struct au_branch *br; ++ ++ dbgaufs_brs_add(sb, bindex); ++ ++ if (!sysaufs_brs) ++ return; ++ ++ kobj = &au_sbi(sb)->si_kobj; ++ bend = au_sbend(sb); ++ for (; bindex <= bend; bindex++) { ++ br = au_sbr(sb, bindex); ++ snprintf(br->br_name, sizeof(br->br_name), SysaufsBr_PREFIX ++ "%d", bindex); ++ err = sysfs_create_file(kobj, &br->br_attr); ++ if (unlikely(err)) ++ pr_warning("failed %s under sysfs(%d)\n", ++ br->br_name, err); ++ } ++} +diff -urN a/fs/aufs/sysrq.c b/fs/aufs/sysrq.c +--- a/fs/aufs/sysrq.c 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/sysrq.c 2011-03-06 23:28:02.620413138 +0000 +@@ -0,0 +1,148 @@ ++/* ++ * Copyright (C) 2005-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * magic sysrq hanlder ++ */ ++ ++#include ++#include ++#include ++/* #include */ ++#include ++#include "aufs.h" ++ ++/* ---------------------------------------------------------------------- */ ++ ++static void sysrq_sb(struct super_block *sb) ++{ ++ char *plevel; ++ struct au_sbinfo *sbinfo; ++ struct file *file; ++ ++ plevel = au_plevel; ++ au_plevel = KERN_WARNING; ++ ++ sbinfo = au_sbi(sb); ++ /* since we define pr_fmt, call printk directly */ ++ printk(KERN_WARNING "si=%lx\n", sysaufs_si_id(sbinfo)); ++ printk(KERN_WARNING AUFS_NAME ": superblock\n"); ++ au_dpri_sb(sb); ++ ++#if 0 ++ printk(KERN_WARNING AUFS_NAME ": root dentry\n"); ++ au_dpri_dentry(sb->s_root); ++ printk(KERN_WARNING AUFS_NAME ": root inode\n"); ++ au_dpri_inode(sb->s_root->d_inode); ++#endif ++ ++#if 0 ++ do { ++ int err, i, j, ndentry; ++ struct au_dcsub_pages dpages; ++ struct au_dpage *dpage; ++ ++ err = au_dpages_init(&dpages, GFP_ATOMIC); ++ if (unlikely(err)) ++ break; ++ err = au_dcsub_pages(&dpages, sb->s_root, NULL, NULL); ++ if (!err) ++ for (i = 0; i < dpages.ndpage; i++) { ++ dpage = dpages.dpages + i; ++ ndentry = dpage->ndentry; ++ for (j = 0; j < ndentry; j++) ++ au_dpri_dentry(dpage->dentries[j]); ++ } ++ au_dpages_free(&dpages); ++ } while (0); ++#endif ++ ++#if 1 ++ { ++ struct inode *i; ++ printk(KERN_WARNING AUFS_NAME ": isolated inode\n"); ++ spin_lock(&inode_lock); ++ list_for_each_entry(i, &sb->s_inodes, i_sb_list) ++ if (1 || list_empty(&i->i_dentry)) ++ au_dpri_inode(i); ++ spin_unlock(&inode_lock); ++ } ++#endif ++ printk(KERN_WARNING AUFS_NAME ": files\n"); ++ lg_global_lock(files_lglock); ++ do_file_list_for_each_entry(sb, file) { ++ umode_t mode; ++ mode = file->f_dentry->d_inode->i_mode; ++ if (!special_file(mode) || au_special_file(mode)) ++ au_dpri_file(file); ++ } while_file_list_for_each_entry; ++ lg_global_unlock(files_lglock); ++ printk(KERN_WARNING AUFS_NAME ": done\n"); ++ ++ au_plevel = plevel; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* module parameter */ ++static char *aufs_sysrq_key = "a"; ++module_param_named(sysrq, aufs_sysrq_key, charp, S_IRUGO); ++MODULE_PARM_DESC(sysrq, "MagicSysRq key for " AUFS_NAME); ++ ++static void au_sysrq(int key __maybe_unused) ++{ ++ struct au_sbinfo *sbinfo; ++ ++ lockdep_off(); ++ spin_lock(&au_sbilist.spin); ++ list_for_each_entry(sbinfo, &au_sbilist.head, si_list) ++ sysrq_sb(sbinfo->si_sb); ++ spin_unlock(&au_sbilist.spin); ++ lockdep_on(); ++} ++ ++static struct sysrq_key_op au_sysrq_op = { ++ .handler = au_sysrq, ++ .help_msg = "Aufs", ++ .action_msg = "Aufs", ++ .enable_mask = SYSRQ_ENABLE_DUMP ++}; ++ ++/* ---------------------------------------------------------------------- */ ++ ++int __init au_sysrq_init(void) ++{ ++ int err; ++ char key; ++ ++ err = -1; ++ key = *aufs_sysrq_key; ++ if ('a' <= key && key <= 'z') ++ err = register_sysrq_key(key, &au_sysrq_op); ++ if (unlikely(err)) ++ pr_err("err %d, sysrq=%c\n", err, key); ++ return err; ++} ++ ++void au_sysrq_fin(void) ++{ ++ int err; ++ err = unregister_sysrq_key(*aufs_sysrq_key, &au_sysrq_op); ++ if (unlikely(err)) ++ pr_err("err %d (ignored)\n", err); ++} +diff -urN a/fs/aufs/vdir.c b/fs/aufs/vdir.c +--- a/fs/aufs/vdir.c 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/vdir.c 2011-03-06 23:28:02.616413258 +0000 +@@ -0,0 +1,886 @@ ++/* ++ * Copyright (C) 2005-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * virtual or vertical directory ++ */ ++ ++#include ++#include "aufs.h" ++ ++static unsigned int calc_size(int nlen) ++{ ++ return ALIGN(sizeof(struct au_vdir_de) + nlen, sizeof(ino_t)); ++} ++ ++static int set_deblk_end(union au_vdir_deblk_p *p, ++ union au_vdir_deblk_p *deblk_end) ++{ ++ if (calc_size(0) <= deblk_end->deblk - p->deblk) { ++ p->de->de_str.len = 0; ++ /* smp_mb(); */ ++ return 0; ++ } ++ return -1; /* error */ ++} ++ ++/* returns true or false */ ++static int is_deblk_end(union au_vdir_deblk_p *p, ++ union au_vdir_deblk_p *deblk_end) ++{ ++ if (calc_size(0) <= deblk_end->deblk - p->deblk) ++ return !p->de->de_str.len; ++ return 1; ++} ++ ++static unsigned char *last_deblk(struct au_vdir *vdir) ++{ ++ return vdir->vd_deblk[vdir->vd_nblk - 1]; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* estimate the apropriate size for name hash table */ ++unsigned int au_rdhash_est(loff_t sz) ++{ ++ unsigned int n; ++ ++ n = UINT_MAX; ++ sz >>= 10; ++ if (sz < n) ++ n = sz; ++ if (sz < AUFS_RDHASH_DEF) ++ n = AUFS_RDHASH_DEF; ++ /* pr_info("n %u\n", n); */ ++ return n; ++} ++ ++/* ++ * the allocated memory has to be freed by ++ * au_nhash_wh_free() or au_nhash_de_free(). ++ */ ++int au_nhash_alloc(struct au_nhash *nhash, unsigned int num_hash, gfp_t gfp) ++{ ++ struct hlist_head *head; ++ unsigned int u; ++ ++ head = kmalloc(sizeof(*nhash->nh_head) * num_hash, gfp); ++ if (head) { ++ nhash->nh_num = num_hash; ++ nhash->nh_head = head; ++ for (u = 0; u < num_hash; u++) ++ INIT_HLIST_HEAD(head++); ++ return 0; /* success */ ++ } ++ ++ return -ENOMEM; ++} ++ ++static void nhash_count(struct hlist_head *head) ++{ ++#if 0 ++ unsigned long n; ++ struct hlist_node *pos; ++ ++ n = 0; ++ hlist_for_each(pos, head) ++ n++; ++ pr_info("%lu\n", n); ++#endif ++} ++ ++static void au_nhash_wh_do_free(struct hlist_head *head) ++{ ++ struct au_vdir_wh *tpos; ++ struct hlist_node *pos, *node; ++ ++ hlist_for_each_entry_safe(tpos, pos, node, head, wh_hash) { ++ /* hlist_del(pos); */ ++ kfree(tpos); ++ } ++} ++ ++static void au_nhash_de_do_free(struct hlist_head *head) ++{ ++ struct au_vdir_dehstr *tpos; ++ struct hlist_node *pos, *node; ++ ++ hlist_for_each_entry_safe(tpos, pos, node, head, hash) { ++ /* hlist_del(pos); */ ++ au_cache_free_vdir_dehstr(tpos); ++ } ++} ++ ++static void au_nhash_do_free(struct au_nhash *nhash, ++ void (*free)(struct hlist_head *head)) ++{ ++ unsigned int n; ++ struct hlist_head *head; ++ ++ n = nhash->nh_num; ++ if (!n) ++ return; ++ ++ head = nhash->nh_head; ++ while (n-- > 0) { ++ nhash_count(head); ++ free(head++); ++ } ++ kfree(nhash->nh_head); ++} ++ ++void au_nhash_wh_free(struct au_nhash *whlist) ++{ ++ au_nhash_do_free(whlist, au_nhash_wh_do_free); ++} ++ ++static void au_nhash_de_free(struct au_nhash *delist) ++{ ++ au_nhash_do_free(delist, au_nhash_de_do_free); ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++int au_nhash_test_longer_wh(struct au_nhash *whlist, aufs_bindex_t btgt, ++ int limit) ++{ ++ int num; ++ unsigned int u, n; ++ struct hlist_head *head; ++ struct au_vdir_wh *tpos; ++ struct hlist_node *pos; ++ ++ num = 0; ++ n = whlist->nh_num; ++ head = whlist->nh_head; ++ for (u = 0; u < n; u++, head++) ++ hlist_for_each_entry(tpos, pos, head, wh_hash) ++ if (tpos->wh_bindex == btgt && ++num > limit) ++ return 1; ++ return 0; ++} ++ ++static struct hlist_head *au_name_hash(struct au_nhash *nhash, ++ unsigned char *name, ++ unsigned int len) ++{ ++ unsigned int v; ++ /* const unsigned int magic_bit = 12; */ ++ ++ AuDebugOn(!nhash->nh_num || !nhash->nh_head); ++ ++ v = 0; ++ while (len--) ++ v += *name++; ++ /* v = hash_long(v, magic_bit); */ ++ v %= nhash->nh_num; ++ return nhash->nh_head + v; ++} ++ ++static int au_nhash_test_name(struct au_vdir_destr *str, const char *name, ++ int nlen) ++{ ++ return str->len == nlen && !memcmp(str->name, name, nlen); ++} ++ ++/* returns found or not */ ++int au_nhash_test_known_wh(struct au_nhash *whlist, char *name, int nlen) ++{ ++ struct hlist_head *head; ++ struct au_vdir_wh *tpos; ++ struct hlist_node *pos; ++ struct au_vdir_destr *str; ++ ++ head = au_name_hash(whlist, name, nlen); ++ hlist_for_each_entry(tpos, pos, head, wh_hash) { ++ str = &tpos->wh_str; ++ AuDbg("%.*s\n", str->len, str->name); ++ if (au_nhash_test_name(str, name, nlen)) ++ return 1; ++ } ++ return 0; ++} ++ ++/* returns found(true) or not */ ++static int test_known(struct au_nhash *delist, char *name, int nlen) ++{ ++ struct hlist_head *head; ++ struct au_vdir_dehstr *tpos; ++ struct hlist_node *pos; ++ struct au_vdir_destr *str; ++ ++ head = au_name_hash(delist, name, nlen); ++ hlist_for_each_entry(tpos, pos, head, hash) { ++ str = tpos->str; ++ AuDbg("%.*s\n", str->len, str->name); ++ if (au_nhash_test_name(str, name, nlen)) ++ return 1; ++ } ++ return 0; ++} ++ ++static void au_shwh_init_wh(struct au_vdir_wh *wh, ino_t ino, ++ unsigned char d_type) ++{ ++#ifdef CONFIG_AUFS_SHWH ++ wh->wh_ino = ino; ++ wh->wh_type = d_type; ++#endif ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++int au_nhash_append_wh(struct au_nhash *whlist, char *name, int nlen, ino_t ino, ++ unsigned int d_type, aufs_bindex_t bindex, ++ unsigned char shwh) ++{ ++ int err; ++ struct au_vdir_destr *str; ++ struct au_vdir_wh *wh; ++ ++ AuDbg("%.*s\n", nlen, name); ++ AuDebugOn(!whlist->nh_num || !whlist->nh_head); ++ ++ err = -ENOMEM; ++ wh = kmalloc(sizeof(*wh) + nlen, GFP_NOFS); ++ if (unlikely(!wh)) ++ goto out; ++ ++ err = 0; ++ wh->wh_bindex = bindex; ++ if (shwh) ++ au_shwh_init_wh(wh, ino, d_type); ++ str = &wh->wh_str; ++ str->len = nlen; ++ memcpy(str->name, name, nlen); ++ hlist_add_head(&wh->wh_hash, au_name_hash(whlist, name, nlen)); ++ /* smp_mb(); */ ++ ++out: ++ return err; ++} ++ ++static int append_deblk(struct au_vdir *vdir) ++{ ++ int err; ++ unsigned long ul; ++ const unsigned int deblk_sz = vdir->vd_deblk_sz; ++ union au_vdir_deblk_p p, deblk_end; ++ unsigned char **o; ++ ++ err = -ENOMEM; ++ o = krealloc(vdir->vd_deblk, sizeof(*o) * (vdir->vd_nblk + 1), ++ GFP_NOFS); ++ if (unlikely(!o)) ++ goto out; ++ ++ vdir->vd_deblk = o; ++ p.deblk = kmalloc(deblk_sz, GFP_NOFS); ++ if (p.deblk) { ++ ul = vdir->vd_nblk++; ++ vdir->vd_deblk[ul] = p.deblk; ++ vdir->vd_last.ul = ul; ++ vdir->vd_last.p.deblk = p.deblk; ++ deblk_end.deblk = p.deblk + deblk_sz; ++ err = set_deblk_end(&p, &deblk_end); ++ } ++ ++out: ++ return err; ++} ++ ++static int append_de(struct au_vdir *vdir, char *name, int nlen, ino_t ino, ++ unsigned int d_type, struct au_nhash *delist) ++{ ++ int err; ++ unsigned int sz; ++ const unsigned int deblk_sz = vdir->vd_deblk_sz; ++ union au_vdir_deblk_p p, *room, deblk_end; ++ struct au_vdir_dehstr *dehstr; ++ ++ p.deblk = last_deblk(vdir); ++ deblk_end.deblk = p.deblk + deblk_sz; ++ room = &vdir->vd_last.p; ++ AuDebugOn(room->deblk < p.deblk || deblk_end.deblk <= room->deblk ++ || !is_deblk_end(room, &deblk_end)); ++ ++ sz = calc_size(nlen); ++ if (unlikely(sz > deblk_end.deblk - room->deblk)) { ++ err = append_deblk(vdir); ++ if (unlikely(err)) ++ goto out; ++ ++ p.deblk = last_deblk(vdir); ++ deblk_end.deblk = p.deblk + deblk_sz; ++ /* smp_mb(); */ ++ AuDebugOn(room->deblk != p.deblk); ++ } ++ ++ err = -ENOMEM; ++ dehstr = au_cache_alloc_vdir_dehstr(); ++ if (unlikely(!dehstr)) ++ goto out; ++ ++ dehstr->str = &room->de->de_str; ++ hlist_add_head(&dehstr->hash, au_name_hash(delist, name, nlen)); ++ room->de->de_ino = ino; ++ room->de->de_type = d_type; ++ room->de->de_str.len = nlen; ++ memcpy(room->de->de_str.name, name, nlen); ++ ++ err = 0; ++ room->deblk += sz; ++ if (unlikely(set_deblk_end(room, &deblk_end))) ++ err = append_deblk(vdir); ++ /* smp_mb(); */ ++ ++out: ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++void au_vdir_free(struct au_vdir *vdir) ++{ ++ unsigned char **deblk; ++ ++ deblk = vdir->vd_deblk; ++ while (vdir->vd_nblk--) ++ kfree(*deblk++); ++ kfree(vdir->vd_deblk); ++ au_cache_free_vdir(vdir); ++} ++ ++static struct au_vdir *alloc_vdir(struct file *file) ++{ ++ struct au_vdir *vdir; ++ struct super_block *sb; ++ int err; ++ ++ sb = file->f_dentry->d_sb; ++ SiMustAnyLock(sb); ++ ++ err = -ENOMEM; ++ vdir = au_cache_alloc_vdir(); ++ if (unlikely(!vdir)) ++ goto out; ++ ++ vdir->vd_deblk = kzalloc(sizeof(*vdir->vd_deblk), GFP_NOFS); ++ if (unlikely(!vdir->vd_deblk)) ++ goto out_free; ++ ++ vdir->vd_deblk_sz = au_sbi(sb)->si_rdblk; ++ if (!vdir->vd_deblk_sz) { ++ /* estimate the apropriate size for deblk */ ++ vdir->vd_deblk_sz = au_dir_size(file, /*dentry*/NULL); ++ /* pr_info("vd_deblk_sz %u\n", vdir->vd_deblk_sz); */ ++ } ++ vdir->vd_nblk = 0; ++ vdir->vd_version = 0; ++ vdir->vd_jiffy = 0; ++ err = append_deblk(vdir); ++ if (!err) ++ return vdir; /* success */ ++ ++ kfree(vdir->vd_deblk); ++ ++out_free: ++ au_cache_free_vdir(vdir); ++out: ++ vdir = ERR_PTR(err); ++ return vdir; ++} ++ ++static int reinit_vdir(struct au_vdir *vdir) ++{ ++ int err; ++ union au_vdir_deblk_p p, deblk_end; ++ ++ while (vdir->vd_nblk > 1) { ++ kfree(vdir->vd_deblk[vdir->vd_nblk - 1]); ++ /* vdir->vd_deblk[vdir->vd_nblk - 1] = NULL; */ ++ vdir->vd_nblk--; ++ } ++ p.deblk = vdir->vd_deblk[0]; ++ deblk_end.deblk = p.deblk + vdir->vd_deblk_sz; ++ err = set_deblk_end(&p, &deblk_end); ++ /* keep vd_dblk_sz */ ++ vdir->vd_last.ul = 0; ++ vdir->vd_last.p.deblk = vdir->vd_deblk[0]; ++ vdir->vd_version = 0; ++ vdir->vd_jiffy = 0; ++ /* smp_mb(); */ ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++#define AuFillVdir_CALLED 1 ++#define AuFillVdir_WHABLE (1 << 1) ++#define AuFillVdir_SHWH (1 << 2) ++#define au_ftest_fillvdir(flags, name) ((flags) & AuFillVdir_##name) ++#define au_fset_fillvdir(flags, name) \ ++ do { (flags) |= AuFillVdir_##name; } while (0) ++#define au_fclr_fillvdir(flags, name) \ ++ do { (flags) &= ~AuFillVdir_##name; } while (0) ++ ++#ifndef CONFIG_AUFS_SHWH ++#undef AuFillVdir_SHWH ++#define AuFillVdir_SHWH 0 ++#endif ++ ++struct fillvdir_arg { ++ struct file *file; ++ struct au_vdir *vdir; ++ struct au_nhash delist; ++ struct au_nhash whlist; ++ aufs_bindex_t bindex; ++ unsigned int flags; ++ int err; ++}; ++ ++static int fillvdir(void *__arg, const char *__name, int nlen, ++ loff_t offset __maybe_unused, u64 h_ino, ++ unsigned int d_type) ++{ ++ struct fillvdir_arg *arg = __arg; ++ char *name = (void *)__name; ++ struct super_block *sb; ++ ino_t ino; ++ const unsigned char shwh = !!au_ftest_fillvdir(arg->flags, SHWH); ++ ++ arg->err = 0; ++ sb = arg->file->f_dentry->d_sb; ++ au_fset_fillvdir(arg->flags, CALLED); ++ /* smp_mb(); */ ++ if (nlen <= AUFS_WH_PFX_LEN ++ || memcmp(name, AUFS_WH_PFX, AUFS_WH_PFX_LEN)) { ++ if (test_known(&arg->delist, name, nlen) ++ || au_nhash_test_known_wh(&arg->whlist, name, nlen)) ++ goto out; /* already exists or whiteouted */ ++ ++ sb = arg->file->f_dentry->d_sb; ++ arg->err = au_ino(sb, arg->bindex, h_ino, d_type, &ino); ++ if (!arg->err) { ++ if (unlikely(nlen > AUFS_MAX_NAMELEN)) ++ d_type = DT_UNKNOWN; ++ arg->err = append_de(arg->vdir, name, nlen, ino, ++ d_type, &arg->delist); ++ } ++ } else if (au_ftest_fillvdir(arg->flags, WHABLE)) { ++ name += AUFS_WH_PFX_LEN; ++ nlen -= AUFS_WH_PFX_LEN; ++ if (au_nhash_test_known_wh(&arg->whlist, name, nlen)) ++ goto out; /* already whiteouted */ ++ ++ if (shwh) ++ arg->err = au_wh_ino(sb, arg->bindex, h_ino, d_type, ++ &ino); ++ if (!arg->err) { ++ if (nlen <= AUFS_MAX_NAMELEN + AUFS_WH_PFX_LEN) ++ d_type = DT_UNKNOWN; ++ arg->err = au_nhash_append_wh ++ (&arg->whlist, name, nlen, ino, d_type, ++ arg->bindex, shwh); ++ } ++ } ++ ++out: ++ if (!arg->err) ++ arg->vdir->vd_jiffy = jiffies; ++ /* smp_mb(); */ ++ AuTraceErr(arg->err); ++ return arg->err; ++} ++ ++static int au_handle_shwh(struct super_block *sb, struct au_vdir *vdir, ++ struct au_nhash *whlist, struct au_nhash *delist) ++{ ++#ifdef CONFIG_AUFS_SHWH ++ int err; ++ unsigned int nh, u; ++ struct hlist_head *head; ++ struct au_vdir_wh *tpos; ++ struct hlist_node *pos, *n; ++ char *p, *o; ++ struct au_vdir_destr *destr; ++ ++ AuDebugOn(!au_opt_test(au_mntflags(sb), SHWH)); ++ ++ err = -ENOMEM; ++ o = p = __getname_gfp(GFP_NOFS); ++ if (unlikely(!p)) ++ goto out; ++ ++ err = 0; ++ nh = whlist->nh_num; ++ memcpy(p, AUFS_WH_PFX, AUFS_WH_PFX_LEN); ++ p += AUFS_WH_PFX_LEN; ++ for (u = 0; u < nh; u++) { ++ head = whlist->nh_head + u; ++ hlist_for_each_entry_safe(tpos, pos, n, head, wh_hash) { ++ destr = &tpos->wh_str; ++ memcpy(p, destr->name, destr->len); ++ err = append_de(vdir, o, destr->len + AUFS_WH_PFX_LEN, ++ tpos->wh_ino, tpos->wh_type, delist); ++ if (unlikely(err)) ++ break; ++ } ++ } ++ ++ __putname(o); ++ ++out: ++ AuTraceErr(err); ++ return err; ++#else ++ return 0; ++#endif ++} ++ ++static int au_do_read_vdir(struct fillvdir_arg *arg) ++{ ++ int err; ++ unsigned int rdhash; ++ loff_t offset; ++ aufs_bindex_t bend, bindex, bstart; ++ unsigned char shwh; ++ struct file *hf, *file; ++ struct super_block *sb; ++ ++ file = arg->file; ++ sb = file->f_dentry->d_sb; ++ SiMustAnyLock(sb); ++ ++ rdhash = au_sbi(sb)->si_rdhash; ++ if (!rdhash) ++ rdhash = au_rdhash_est(au_dir_size(file, /*dentry*/NULL)); ++ err = au_nhash_alloc(&arg->delist, rdhash, GFP_NOFS); ++ if (unlikely(err)) ++ goto out; ++ err = au_nhash_alloc(&arg->whlist, rdhash, GFP_NOFS); ++ if (unlikely(err)) ++ goto out_delist; ++ ++ err = 0; ++ arg->flags = 0; ++ shwh = 0; ++ if (au_opt_test(au_mntflags(sb), SHWH)) { ++ shwh = 1; ++ au_fset_fillvdir(arg->flags, SHWH); ++ } ++ bstart = au_fbstart(file); ++ bend = au_fbend_dir(file); ++ for (bindex = bstart; !err && bindex <= bend; bindex++) { ++ hf = au_hf_dir(file, bindex); ++ if (!hf) ++ continue; ++ ++ offset = vfsub_llseek(hf, 0, SEEK_SET); ++ err = offset; ++ if (unlikely(offset)) ++ break; ++ ++ arg->bindex = bindex; ++ au_fclr_fillvdir(arg->flags, WHABLE); ++ if (shwh ++ || (bindex != bend ++ && au_br_whable(au_sbr_perm(sb, bindex)))) ++ au_fset_fillvdir(arg->flags, WHABLE); ++ do { ++ arg->err = 0; ++ au_fclr_fillvdir(arg->flags, CALLED); ++ /* smp_mb(); */ ++ err = vfsub_readdir(hf, fillvdir, arg); ++ if (err >= 0) ++ err = arg->err; ++ } while (!err && au_ftest_fillvdir(arg->flags, CALLED)); ++ } ++ ++ if (!err && shwh) ++ err = au_handle_shwh(sb, arg->vdir, &arg->whlist, &arg->delist); ++ ++ au_nhash_wh_free(&arg->whlist); ++ ++out_delist: ++ au_nhash_de_free(&arg->delist); ++out: ++ return err; ++} ++ ++static int read_vdir(struct file *file, int may_read) ++{ ++ int err; ++ unsigned long expire; ++ unsigned char do_read; ++ struct fillvdir_arg arg; ++ struct inode *inode; ++ struct au_vdir *vdir, *allocated; ++ ++ err = 0; ++ inode = file->f_dentry->d_inode; ++ IMustLock(inode); ++ SiMustAnyLock(inode->i_sb); ++ ++ allocated = NULL; ++ do_read = 0; ++ expire = au_sbi(inode->i_sb)->si_rdcache; ++ vdir = au_ivdir(inode); ++ if (!vdir) { ++ do_read = 1; ++ vdir = alloc_vdir(file); ++ err = PTR_ERR(vdir); ++ if (IS_ERR(vdir)) ++ goto out; ++ err = 0; ++ allocated = vdir; ++ } else if (may_read ++ && (inode->i_version != vdir->vd_version ++ || time_after(jiffies, vdir->vd_jiffy + expire))) { ++ do_read = 1; ++ err = reinit_vdir(vdir); ++ if (unlikely(err)) ++ goto out; ++ } ++ ++ if (!do_read) ++ return 0; /* success */ ++ ++ arg.file = file; ++ arg.vdir = vdir; ++ err = au_do_read_vdir(&arg); ++ if (!err) { ++ /* file->f_pos = 0; */ ++ vdir->vd_version = inode->i_version; ++ vdir->vd_last.ul = 0; ++ vdir->vd_last.p.deblk = vdir->vd_deblk[0]; ++ if (allocated) ++ au_set_ivdir(inode, allocated); ++ } else if (allocated) ++ au_vdir_free(allocated); ++ ++out: ++ return err; ++} ++ ++static int copy_vdir(struct au_vdir *tgt, struct au_vdir *src) ++{ ++ int err, rerr; ++ unsigned long ul, n; ++ const unsigned int deblk_sz = src->vd_deblk_sz; ++ ++ AuDebugOn(tgt->vd_nblk != 1); ++ ++ err = -ENOMEM; ++ if (tgt->vd_nblk < src->vd_nblk) { ++ unsigned char **p; ++ ++ p = krealloc(tgt->vd_deblk, sizeof(*p) * src->vd_nblk, ++ GFP_NOFS); ++ if (unlikely(!p)) ++ goto out; ++ tgt->vd_deblk = p; ++ } ++ ++ if (tgt->vd_deblk_sz != deblk_sz) { ++ unsigned char *p; ++ ++ tgt->vd_deblk_sz = deblk_sz; ++ p = krealloc(tgt->vd_deblk[0], deblk_sz, GFP_NOFS); ++ if (unlikely(!p)) ++ goto out; ++ tgt->vd_deblk[0] = p; ++ } ++ memcpy(tgt->vd_deblk[0], src->vd_deblk[0], deblk_sz); ++ tgt->vd_version = src->vd_version; ++ tgt->vd_jiffy = src->vd_jiffy; ++ ++ n = src->vd_nblk; ++ for (ul = 1; ul < n; ul++) { ++ tgt->vd_deblk[ul] = kmemdup(src->vd_deblk[ul], deblk_sz, ++ GFP_NOFS); ++ if (unlikely(!tgt->vd_deblk[ul])) ++ goto out; ++ tgt->vd_nblk++; ++ } ++ tgt->vd_nblk = n; ++ tgt->vd_last.ul = tgt->vd_last.ul; ++ tgt->vd_last.p.deblk = tgt->vd_deblk[tgt->vd_last.ul]; ++ tgt->vd_last.p.deblk += src->vd_last.p.deblk ++ - src->vd_deblk[src->vd_last.ul]; ++ /* smp_mb(); */ ++ return 0; /* success */ ++ ++out: ++ rerr = reinit_vdir(tgt); ++ BUG_ON(rerr); ++ return err; ++} ++ ++int au_vdir_init(struct file *file) ++{ ++ int err; ++ struct inode *inode; ++ struct au_vdir *vdir_cache, *allocated; ++ ++ err = read_vdir(file, !file->f_pos); ++ if (unlikely(err)) ++ goto out; ++ ++ allocated = NULL; ++ vdir_cache = au_fvdir_cache(file); ++ if (!vdir_cache) { ++ vdir_cache = alloc_vdir(file); ++ err = PTR_ERR(vdir_cache); ++ if (IS_ERR(vdir_cache)) ++ goto out; ++ allocated = vdir_cache; ++ } else if (!file->f_pos && vdir_cache->vd_version != file->f_version) { ++ err = reinit_vdir(vdir_cache); ++ if (unlikely(err)) ++ goto out; ++ } else ++ return 0; /* success */ ++ ++ inode = file->f_dentry->d_inode; ++ err = copy_vdir(vdir_cache, au_ivdir(inode)); ++ if (!err) { ++ file->f_version = inode->i_version; ++ if (allocated) ++ au_set_fvdir_cache(file, allocated); ++ } else if (allocated) ++ au_vdir_free(allocated); ++ ++out: ++ return err; ++} ++ ++static loff_t calc_offset(struct au_vdir *vdir) ++{ ++ loff_t offset; ++ union au_vdir_deblk_p p; ++ ++ p.deblk = vdir->vd_deblk[vdir->vd_last.ul]; ++ offset = vdir->vd_last.p.deblk - p.deblk; ++ offset += vdir->vd_deblk_sz * vdir->vd_last.ul; ++ return offset; ++} ++ ++/* returns true or false */ ++static int seek_vdir(struct file *file) ++{ ++ int valid; ++ unsigned int deblk_sz; ++ unsigned long ul, n; ++ loff_t offset; ++ union au_vdir_deblk_p p, deblk_end; ++ struct au_vdir *vdir_cache; ++ ++ valid = 1; ++ vdir_cache = au_fvdir_cache(file); ++ offset = calc_offset(vdir_cache); ++ AuDbg("offset %lld\n", offset); ++ if (file->f_pos == offset) ++ goto out; ++ ++ vdir_cache->vd_last.ul = 0; ++ vdir_cache->vd_last.p.deblk = vdir_cache->vd_deblk[0]; ++ if (!file->f_pos) ++ goto out; ++ ++ valid = 0; ++ deblk_sz = vdir_cache->vd_deblk_sz; ++ ul = div64_u64(file->f_pos, deblk_sz); ++ AuDbg("ul %lu\n", ul); ++ if (ul >= vdir_cache->vd_nblk) ++ goto out; ++ ++ n = vdir_cache->vd_nblk; ++ for (; ul < n; ul++) { ++ p.deblk = vdir_cache->vd_deblk[ul]; ++ deblk_end.deblk = p.deblk + deblk_sz; ++ offset = ul; ++ offset *= deblk_sz; ++ while (!is_deblk_end(&p, &deblk_end) && offset < file->f_pos) { ++ unsigned int l; ++ ++ l = calc_size(p.de->de_str.len); ++ offset += l; ++ p.deblk += l; ++ } ++ if (!is_deblk_end(&p, &deblk_end)) { ++ valid = 1; ++ vdir_cache->vd_last.ul = ul; ++ vdir_cache->vd_last.p = p; ++ break; ++ } ++ } ++ ++out: ++ /* smp_mb(); */ ++ AuTraceErr(!valid); ++ return valid; ++} ++ ++int au_vdir_fill_de(struct file *file, void *dirent, filldir_t filldir) ++{ ++ int err; ++ unsigned int l, deblk_sz; ++ union au_vdir_deblk_p deblk_end; ++ struct au_vdir *vdir_cache; ++ struct au_vdir_de *de; ++ ++ vdir_cache = au_fvdir_cache(file); ++ if (!seek_vdir(file)) ++ return 0; ++ ++ deblk_sz = vdir_cache->vd_deblk_sz; ++ while (1) { ++ deblk_end.deblk = vdir_cache->vd_deblk[vdir_cache->vd_last.ul]; ++ deblk_end.deblk += deblk_sz; ++ while (!is_deblk_end(&vdir_cache->vd_last.p, &deblk_end)) { ++ de = vdir_cache->vd_last.p.de; ++ AuDbg("%.*s, off%lld, i%lu, dt%d\n", ++ de->de_str.len, de->de_str.name, file->f_pos, ++ (unsigned long)de->de_ino, de->de_type); ++ err = filldir(dirent, de->de_str.name, de->de_str.len, ++ file->f_pos, de->de_ino, de->de_type); ++ if (unlikely(err)) { ++ AuTraceErr(err); ++ /* todo: ignore the error caused by udba? */ ++ /* return err; */ ++ return 0; ++ } ++ ++ l = calc_size(de->de_str.len); ++ vdir_cache->vd_last.p.deblk += l; ++ file->f_pos += l; ++ } ++ if (vdir_cache->vd_last.ul < vdir_cache->vd_nblk - 1) { ++ vdir_cache->vd_last.ul++; ++ vdir_cache->vd_last.p.deblk ++ = vdir_cache->vd_deblk[vdir_cache->vd_last.ul]; ++ file->f_pos = deblk_sz * vdir_cache->vd_last.ul; ++ continue; ++ } ++ break; ++ } ++ ++ /* smp_mb(); */ ++ return 0; ++} +diff -urN a/fs/aufs/vfsub.c b/fs/aufs/vfsub.c +--- a/fs/aufs/vfsub.c 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/vfsub.c 2011-03-06 23:28:02.620413138 +0000 +@@ -0,0 +1,790 @@ ++/* ++ * Copyright (C) 2005-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * sub-routines for VFS ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include "aufs.h" ++ ++int vfsub_update_h_iattr(struct path *h_path, int *did) ++{ ++ int err; ++ struct kstat st; ++ struct super_block *h_sb; ++ ++ /* for remote fs, leave work for its getattr or d_revalidate */ ++ /* for bad i_attr fs, handle them in aufs_getattr() */ ++ /* still some fs may acquire i_mutex. we need to skip them */ ++ err = 0; ++ if (!did) ++ did = &err; ++ h_sb = h_path->dentry->d_sb; ++ *did = (!au_test_fs_remote(h_sb) && au_test_fs_refresh_iattr(h_sb)); ++ if (*did) ++ err = vfs_getattr(h_path->mnt, h_path->dentry, &st); ++ ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++static int au_conv_oflags(int flags) ++{ ++ int mask = 0; ++ ++#ifdef CONFIG_IMA ++ fmode_t fmode; ++ ++ /* mask = MAY_OPEN; */ ++ fmode = OPEN_FMODE(flags); ++ if (fmode & FMODE_READ) ++ mask |= MAY_READ; ++ if ((fmode & FMODE_WRITE) ++ || (flags & O_TRUNC)) ++ mask |= MAY_WRITE; ++ /* ++ * if (flags & O_APPEND) ++ * mask |= MAY_APPEND; ++ */ ++ if (flags & vfsub_fmode_to_uint(FMODE_EXEC)) ++ mask |= MAY_EXEC; ++ ++ AuDbg("flags 0x%x, mask 0x%x\n", flags, mask); ++#endif ++ ++ return mask; ++} ++ ++struct file *vfsub_dentry_open(struct path *path, int flags) ++{ ++ struct file *file; ++ int err; ++ ++ path_get(path); ++ file = dentry_open(path->dentry, path->mnt, ++ flags /* | vfsub_fmode_to_uint(FMODE_NONOTIFY) */, ++ current_cred()); ++ if (IS_ERR(file)) ++ goto out; ++ ++ err = ima_file_check(file, au_conv_oflags(flags)); ++ if (unlikely(err)) { ++ fput(file); ++ file = ERR_PTR(err); ++ } ++out: ++ return file; ++} ++ ++struct file *vfsub_filp_open(const char *path, int oflags, int mode) ++{ ++ struct file *file; ++ ++ file = filp_open(path, ++ oflags /* | vfsub_fmode_to_uint(FMODE_NONOTIFY) */, ++ mode); ++ if (IS_ERR(file)) ++ goto out; ++ vfsub_update_h_iattr(&file->f_path, /*did*/NULL); /*ignore*/ ++ ++out: ++ return file; ++} ++ ++int vfsub_kern_path(const char *name, unsigned int flags, struct path *path) ++{ ++ int err; ++ ++ err = kern_path(name, flags, path); ++ if (!err && path->dentry->d_inode) ++ vfsub_update_h_iattr(path, /*did*/NULL); /*ignore*/ ++ return err; ++} ++ ++struct dentry *vfsub_lookup_one_len(const char *name, struct dentry *parent, ++ int len) ++{ ++ struct path path = { ++ .mnt = NULL ++ }; ++ ++ /* VFS checks it too, but by WARN_ON_ONCE() */ ++ IMustLock(parent->d_inode); ++ ++ path.dentry = lookup_one_len(name, parent, len); ++ if (IS_ERR(path.dentry)) ++ goto out; ++ if (path.dentry->d_inode) ++ vfsub_update_h_iattr(&path, /*did*/NULL); /*ignore*/ ++ ++out: ++ AuTraceErrPtr(path.dentry); ++ return path.dentry; ++} ++ ++struct dentry *vfsub_lookup_hash(struct nameidata *nd) ++{ ++ struct path path = { ++ .mnt = nd->path.mnt ++ }; ++ ++ IMustLock(nd->path.dentry->d_inode); ++ ++ path.dentry = lookup_hash(nd); ++ if (IS_ERR(path.dentry)) ++ goto out; ++ if (path.dentry->d_inode) ++ vfsub_update_h_iattr(&path, /*did*/NULL); /*ignore*/ ++ ++out: ++ AuTraceErrPtr(path.dentry); ++ return path.dentry; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++struct dentry *vfsub_lock_rename(struct dentry *d1, struct au_hinode *hdir1, ++ struct dentry *d2, struct au_hinode *hdir2) ++{ ++ struct dentry *d; ++ ++ d = lock_rename(d1, d2); ++ au_hn_suspend(hdir1); ++ if (hdir1 != hdir2) ++ au_hn_suspend(hdir2); ++ ++ return d; ++} ++ ++void vfsub_unlock_rename(struct dentry *d1, struct au_hinode *hdir1, ++ struct dentry *d2, struct au_hinode *hdir2) ++{ ++ au_hn_resume(hdir1); ++ if (hdir1 != hdir2) ++ au_hn_resume(hdir2); ++ unlock_rename(d1, d2); ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++int vfsub_create(struct inode *dir, struct path *path, int mode) ++{ ++ int err; ++ struct dentry *d; ++ ++ IMustLock(dir); ++ ++ d = path->dentry; ++ path->dentry = d->d_parent; ++ err = security_path_mknod(path, d, mode, 0); ++ path->dentry = d; ++ if (unlikely(err)) ++ goto out; ++ ++ if (au_test_fs_null_nd(dir->i_sb)) ++ err = vfs_create(dir, path->dentry, mode, NULL); ++ else { ++ struct nameidata h_nd; ++ ++ memset(&h_nd, 0, sizeof(h_nd)); ++ h_nd.flags = LOOKUP_CREATE; ++ h_nd.intent.open.flags = O_CREAT ++ | vfsub_fmode_to_uint(FMODE_READ); ++ h_nd.intent.open.create_mode = mode; ++ h_nd.path.dentry = path->dentry->d_parent; ++ h_nd.path.mnt = path->mnt; ++ path_get(&h_nd.path); ++ err = vfs_create(dir, path->dentry, mode, &h_nd); ++ path_put(&h_nd.path); ++ } ++ ++ if (!err) { ++ struct path tmp = *path; ++ int did; ++ ++ vfsub_update_h_iattr(&tmp, &did); ++ if (did) { ++ tmp.dentry = path->dentry->d_parent; ++ vfsub_update_h_iattr(&tmp, /*did*/NULL); ++ } ++ /*ignore*/ ++ } ++ ++out: ++ return err; ++} ++ ++int vfsub_symlink(struct inode *dir, struct path *path, const char *symname) ++{ ++ int err; ++ struct dentry *d; ++ ++ IMustLock(dir); ++ ++ d = path->dentry; ++ path->dentry = d->d_parent; ++ err = security_path_symlink(path, d, symname); ++ path->dentry = d; ++ if (unlikely(err)) ++ goto out; ++ ++ err = vfs_symlink(dir, path->dentry, symname); ++ if (!err) { ++ struct path tmp = *path; ++ int did; ++ ++ vfsub_update_h_iattr(&tmp, &did); ++ if (did) { ++ tmp.dentry = path->dentry->d_parent; ++ vfsub_update_h_iattr(&tmp, /*did*/NULL); ++ } ++ /*ignore*/ ++ } ++ ++out: ++ return err; ++} ++ ++int vfsub_mknod(struct inode *dir, struct path *path, int mode, dev_t dev) ++{ ++ int err; ++ struct dentry *d; ++ ++ IMustLock(dir); ++ ++ d = path->dentry; ++ path->dentry = d->d_parent; ++ err = security_path_mknod(path, d, mode, dev); ++ path->dentry = d; ++ if (unlikely(err)) ++ goto out; ++ ++ err = vfs_mknod(dir, path->dentry, mode, dev); ++ if (!err) { ++ struct path tmp = *path; ++ int did; ++ ++ vfsub_update_h_iattr(&tmp, &did); ++ if (did) { ++ tmp.dentry = path->dentry->d_parent; ++ vfsub_update_h_iattr(&tmp, /*did*/NULL); ++ } ++ /*ignore*/ ++ } ++ ++out: ++ return err; ++} ++ ++static int au_test_nlink(struct inode *inode) ++{ ++ const unsigned int link_max = UINT_MAX >> 1; /* rough margin */ ++ ++ if (!au_test_fs_no_limit_nlink(inode->i_sb) ++ || inode->i_nlink < link_max) ++ return 0; ++ return -EMLINK; ++} ++ ++int vfsub_link(struct dentry *src_dentry, struct inode *dir, struct path *path) ++{ ++ int err; ++ struct dentry *d; ++ ++ IMustLock(dir); ++ ++ err = au_test_nlink(src_dentry->d_inode); ++ if (unlikely(err)) ++ return err; ++ ++ d = path->dentry; ++ path->dentry = d->d_parent; ++ err = security_path_link(src_dentry, path, d); ++ path->dentry = d; ++ if (unlikely(err)) ++ goto out; ++ ++ err = vfs_link(src_dentry, dir, path->dentry); ++ if (!err) { ++ struct path tmp = *path; ++ int did; ++ ++ /* fuse has different memory inode for the same inumber */ ++ vfsub_update_h_iattr(&tmp, &did); ++ if (did) { ++ tmp.dentry = path->dentry->d_parent; ++ vfsub_update_h_iattr(&tmp, /*did*/NULL); ++ tmp.dentry = src_dentry; ++ vfsub_update_h_iattr(&tmp, /*did*/NULL); ++ } ++ /*ignore*/ ++ } ++ ++out: ++ return err; ++} ++ ++int vfsub_rename(struct inode *src_dir, struct dentry *src_dentry, ++ struct inode *dir, struct path *path) ++{ ++ int err; ++ struct path tmp = { ++ .mnt = path->mnt ++ }; ++ struct dentry *d; ++ ++ IMustLock(dir); ++ IMustLock(src_dir); ++ ++ d = path->dentry; ++ path->dentry = d->d_parent; ++ tmp.dentry = src_dentry->d_parent; ++ err = security_path_rename(&tmp, src_dentry, path, d); ++ path->dentry = d; ++ if (unlikely(err)) ++ goto out; ++ ++ err = vfs_rename(src_dir, src_dentry, dir, path->dentry); ++ if (!err) { ++ int did; ++ ++ tmp.dentry = d->d_parent; ++ vfsub_update_h_iattr(&tmp, &did); ++ if (did) { ++ tmp.dentry = src_dentry; ++ vfsub_update_h_iattr(&tmp, /*did*/NULL); ++ tmp.dentry = src_dentry->d_parent; ++ vfsub_update_h_iattr(&tmp, /*did*/NULL); ++ } ++ /*ignore*/ ++ } ++ ++out: ++ return err; ++} ++ ++int vfsub_mkdir(struct inode *dir, struct path *path, int mode) ++{ ++ int err; ++ struct dentry *d; ++ ++ IMustLock(dir); ++ ++ d = path->dentry; ++ path->dentry = d->d_parent; ++ err = security_path_mkdir(path, d, mode); ++ path->dentry = d; ++ if (unlikely(err)) ++ goto out; ++ ++ err = vfs_mkdir(dir, path->dentry, mode); ++ if (!err) { ++ struct path tmp = *path; ++ int did; ++ ++ vfsub_update_h_iattr(&tmp, &did); ++ if (did) { ++ tmp.dentry = path->dentry->d_parent; ++ vfsub_update_h_iattr(&tmp, /*did*/NULL); ++ } ++ /*ignore*/ ++ } ++ ++out: ++ return err; ++} ++ ++int vfsub_rmdir(struct inode *dir, struct path *path) ++{ ++ int err; ++ struct dentry *d; ++ ++ IMustLock(dir); ++ ++ d = path->dentry; ++ path->dentry = d->d_parent; ++ err = security_path_rmdir(path, d); ++ path->dentry = d; ++ if (unlikely(err)) ++ goto out; ++ ++ err = vfs_rmdir(dir, path->dentry); ++ if (!err) { ++ struct path tmp = { ++ .dentry = path->dentry->d_parent, ++ .mnt = path->mnt ++ }; ++ ++ vfsub_update_h_iattr(&tmp, /*did*/NULL); /*ignore*/ ++ } ++ ++out: ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++ssize_t vfsub_read_u(struct file *file, char __user *ubuf, size_t count, ++ loff_t *ppos) ++{ ++ ssize_t err; ++ ++ err = vfs_read(file, ubuf, count, ppos); ++ if (err >= 0) ++ vfsub_update_h_iattr(&file->f_path, /*did*/NULL); /*ignore*/ ++ return err; ++} ++ ++/* todo: kernel_read()? */ ++ssize_t vfsub_read_k(struct file *file, void *kbuf, size_t count, ++ loff_t *ppos) ++{ ++ ssize_t err; ++ mm_segment_t oldfs; ++ union { ++ void *k; ++ char __user *u; ++ } buf; ++ ++ buf.k = kbuf; ++ oldfs = get_fs(); ++ set_fs(KERNEL_DS); ++ err = vfsub_read_u(file, buf.u, count, ppos); ++ set_fs(oldfs); ++ return err; ++} ++ ++ssize_t vfsub_write_u(struct file *file, const char __user *ubuf, size_t count, ++ loff_t *ppos) ++{ ++ ssize_t err; ++ ++ err = vfs_write(file, ubuf, count, ppos); ++ if (err >= 0) ++ vfsub_update_h_iattr(&file->f_path, /*did*/NULL); /*ignore*/ ++ return err; ++} ++ ++ssize_t vfsub_write_k(struct file *file, void *kbuf, size_t count, loff_t *ppos) ++{ ++ ssize_t err; ++ mm_segment_t oldfs; ++ union { ++ void *k; ++ const char __user *u; ++ } buf; ++ ++ buf.k = kbuf; ++ oldfs = get_fs(); ++ set_fs(KERNEL_DS); ++ err = vfsub_write_u(file, buf.u, count, ppos); ++ set_fs(oldfs); ++ return err; ++} ++ ++int vfsub_flush(struct file *file, fl_owner_t id) ++{ ++ int err; ++ ++ err = 0; ++ if (file->f_op && file->f_op->flush) { ++ err = file->f_op->flush(file, id); ++ if (!err) ++ vfsub_update_h_iattr(&file->f_path, /*did*/NULL); ++ /*ignore*/ ++ } ++ return err; ++} ++ ++int vfsub_readdir(struct file *file, filldir_t filldir, void *arg) ++{ ++ int err; ++ ++ err = vfs_readdir(file, filldir, arg); ++ if (err >= 0) ++ vfsub_update_h_iattr(&file->f_path, /*did*/NULL); /*ignore*/ ++ return err; ++} ++ ++long vfsub_splice_to(struct file *in, loff_t *ppos, ++ struct pipe_inode_info *pipe, size_t len, ++ unsigned int flags) ++{ ++ long err; ++ ++ err = do_splice_to(in, ppos, pipe, len, flags); ++ file_accessed(in); ++ if (err >= 0) ++ vfsub_update_h_iattr(&in->f_path, /*did*/NULL); /*ignore*/ ++ return err; ++} ++ ++long vfsub_splice_from(struct pipe_inode_info *pipe, struct file *out, ++ loff_t *ppos, size_t len, unsigned int flags) ++{ ++ long err; ++ ++ err = do_splice_from(pipe, out, ppos, len, flags); ++ if (err >= 0) ++ vfsub_update_h_iattr(&out->f_path, /*did*/NULL); /*ignore*/ ++ return err; ++} ++ ++/* cf. open.c:do_sys_truncate() and do_sys_ftruncate() */ ++int vfsub_trunc(struct path *h_path, loff_t length, unsigned int attr, ++ struct file *h_file) ++{ ++ int err; ++ struct inode *h_inode; ++ ++ h_inode = h_path->dentry->d_inode; ++ if (!h_file) { ++ err = mnt_want_write(h_path->mnt); ++ if (err) ++ goto out; ++ err = inode_permission(h_inode, MAY_WRITE); ++ if (err) ++ goto out_mnt; ++ err = get_write_access(h_inode); ++ if (err) ++ goto out_mnt; ++ err = break_lease(h_inode, O_WRONLY); ++ if (err) ++ goto out_inode; ++ } ++ ++ err = locks_verify_truncate(h_inode, h_file, length); ++ if (!err) ++ err = security_path_truncate(h_path); ++ if (!err) ++ err = do_truncate(h_path->dentry, length, attr, h_file); ++ ++out_inode: ++ if (!h_file) ++ put_write_access(h_inode); ++out_mnt: ++ if (!h_file) ++ mnt_drop_write(h_path->mnt); ++out: ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++struct au_vfsub_mkdir_args { ++ int *errp; ++ struct inode *dir; ++ struct path *path; ++ int mode; ++}; ++ ++static void au_call_vfsub_mkdir(void *args) ++{ ++ struct au_vfsub_mkdir_args *a = args; ++ *a->errp = vfsub_mkdir(a->dir, a->path, a->mode); ++} ++ ++int vfsub_sio_mkdir(struct inode *dir, struct path *path, int mode) ++{ ++ int err, do_sio, wkq_err; ++ ++ do_sio = au_test_h_perm_sio(dir, MAY_EXEC | MAY_WRITE); ++ if (!do_sio) ++ err = vfsub_mkdir(dir, path, mode); ++ else { ++ struct au_vfsub_mkdir_args args = { ++ .errp = &err, ++ .dir = dir, ++ .path = path, ++ .mode = mode ++ }; ++ wkq_err = au_wkq_wait(au_call_vfsub_mkdir, &args); ++ if (unlikely(wkq_err)) ++ err = wkq_err; ++ } ++ ++ return err; ++} ++ ++struct au_vfsub_rmdir_args { ++ int *errp; ++ struct inode *dir; ++ struct path *path; ++}; ++ ++static void au_call_vfsub_rmdir(void *args) ++{ ++ struct au_vfsub_rmdir_args *a = args; ++ *a->errp = vfsub_rmdir(a->dir, a->path); ++} ++ ++int vfsub_sio_rmdir(struct inode *dir, struct path *path) ++{ ++ int err, do_sio, wkq_err; ++ ++ do_sio = au_test_h_perm_sio(dir, MAY_EXEC | MAY_WRITE); ++ if (!do_sio) ++ err = vfsub_rmdir(dir, path); ++ else { ++ struct au_vfsub_rmdir_args args = { ++ .errp = &err, ++ .dir = dir, ++ .path = path ++ }; ++ wkq_err = au_wkq_wait(au_call_vfsub_rmdir, &args); ++ if (unlikely(wkq_err)) ++ err = wkq_err; ++ } ++ ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++struct notify_change_args { ++ int *errp; ++ struct path *path; ++ struct iattr *ia; ++}; ++ ++static void call_notify_change(void *args) ++{ ++ struct notify_change_args *a = args; ++ struct inode *h_inode; ++ ++ h_inode = a->path->dentry->d_inode; ++ IMustLock(h_inode); ++ ++ *a->errp = -EPERM; ++ if (!IS_IMMUTABLE(h_inode) && !IS_APPEND(h_inode)) { ++ *a->errp = notify_change(a->path->dentry, a->ia); ++ if (!*a->errp) ++ vfsub_update_h_iattr(a->path, /*did*/NULL); /*ignore*/ ++ } ++ AuTraceErr(*a->errp); ++} ++ ++int vfsub_notify_change(struct path *path, struct iattr *ia) ++{ ++ int err; ++ struct notify_change_args args = { ++ .errp = &err, ++ .path = path, ++ .ia = ia ++ }; ++ ++ call_notify_change(&args); ++ ++ return err; ++} ++ ++int vfsub_sio_notify_change(struct path *path, struct iattr *ia) ++{ ++ int err, wkq_err; ++ struct notify_change_args args = { ++ .errp = &err, ++ .path = path, ++ .ia = ia ++ }; ++ ++ wkq_err = au_wkq_wait(call_notify_change, &args); ++ if (unlikely(wkq_err)) ++ err = wkq_err; ++ ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++struct unlink_args { ++ int *errp; ++ struct inode *dir; ++ struct path *path; ++}; ++ ++static void call_unlink(void *args) ++{ ++ struct unlink_args *a = args; ++ struct dentry *d = a->path->dentry; ++ struct inode *h_inode; ++ const int stop_sillyrename = (au_test_nfs(d->d_sb) ++ && d->d_count == 1); ++ ++ IMustLock(a->dir); ++ ++ a->path->dentry = d->d_parent; ++ *a->errp = security_path_unlink(a->path, d); ++ a->path->dentry = d; ++ if (unlikely(*a->errp)) ++ return; ++ ++ if (!stop_sillyrename) ++ dget(d); ++ h_inode = d->d_inode; ++ if (h_inode) ++ ihold(h_inode); ++ ++ *a->errp = vfs_unlink(a->dir, d); ++ if (!*a->errp) { ++ struct path tmp = { ++ .dentry = d->d_parent, ++ .mnt = a->path->mnt ++ }; ++ vfsub_update_h_iattr(&tmp, /*did*/NULL); /*ignore*/ ++ } ++ ++ if (!stop_sillyrename) ++ dput(d); ++ if (h_inode) ++ iput(h_inode); ++ ++ AuTraceErr(*a->errp); ++} ++ ++/* ++ * @dir: must be locked. ++ * @dentry: target dentry. ++ */ ++int vfsub_unlink(struct inode *dir, struct path *path, int force) ++{ ++ int err; ++ struct unlink_args args = { ++ .errp = &err, ++ .dir = dir, ++ .path = path ++ }; ++ ++ if (!force) ++ call_unlink(&args); ++ else { ++ int wkq_err; ++ ++ wkq_err = au_wkq_wait(call_unlink, &args); ++ if (unlikely(wkq_err)) ++ err = wkq_err; ++ } ++ ++ return err; ++} +diff -urN a/fs/aufs/vfsub.h b/fs/aufs/vfsub.h +--- a/fs/aufs/vfsub.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/vfsub.h 2011-03-06 23:28:02.620413138 +0000 +@@ -0,0 +1,226 @@ ++/* ++ * Copyright (C) 2005-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * sub-routines for VFS ++ */ ++ ++#ifndef __AUFS_VFSUB_H__ ++#define __AUFS_VFSUB_H__ ++ ++#ifdef __KERNEL__ ++ ++#include ++#include ++#include "debug.h" ++ ++/* copied from linux/fs/internal.h */ ++DECLARE_BRLOCK(vfsmount_lock); ++extern void file_sb_list_del(struct file *f); ++ ++/* copied from linux/fs/file_table.c */ ++DECLARE_LGLOCK(files_lglock); ++#ifdef CONFIG_SMP ++/* ++ * These macros iterate all files on all CPUs for a given superblock. ++ * files_lglock must be held globally. ++ */ ++#define do_file_list_for_each_entry(__sb, __file) \ ++{ \ ++ int i; \ ++ for_each_possible_cpu(i) { \ ++ struct list_head *list; \ ++ list = per_cpu_ptr((__sb)->s_files, i); \ ++ list_for_each_entry((__file), list, f_u.fu_list) ++ ++#define while_file_list_for_each_entry \ ++ } \ ++} ++ ++#else ++ ++#define do_file_list_for_each_entry(__sb, __file) \ ++{ \ ++ struct list_head *list; \ ++ list = &(sb)->s_files; \ ++ list_for_each_entry((__file), list, f_u.fu_list) ++ ++#define while_file_list_for_each_entry \ ++} ++#endif ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* lock subclass for lower inode */ ++/* default MAX_LOCKDEP_SUBCLASSES(8) is not enough */ ++/* reduce? gave up. */ ++enum { ++ AuLsc_I_Begin = I_MUTEX_QUOTA, /* 4 */ ++ AuLsc_I_PARENT, /* lower inode, parent first */ ++ AuLsc_I_PARENT2, /* copyup dirs */ ++ AuLsc_I_PARENT3, /* copyup wh */ ++ AuLsc_I_CHILD, ++ AuLsc_I_CHILD2, ++ AuLsc_I_End ++}; ++ ++/* to debug easier, do not make them inlined functions */ ++#define MtxMustLock(mtx) AuDebugOn(!mutex_is_locked(mtx)) ++#define IMustLock(i) MtxMustLock(&(i)->i_mutex) ++ ++/* ---------------------------------------------------------------------- */ ++ ++static inline void vfsub_drop_nlink(struct inode *inode) ++{ ++ AuDebugOn(!inode->i_nlink); ++ drop_nlink(inode); ++} ++ ++static inline void vfsub_dead_dir(struct inode *inode) ++{ ++ AuDebugOn(!S_ISDIR(inode->i_mode)); ++ inode->i_flags |= S_DEAD; ++ clear_nlink(inode); ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++int vfsub_update_h_iattr(struct path *h_path, int *did); ++struct file *vfsub_dentry_open(struct path *path, int flags); ++struct file *vfsub_filp_open(const char *path, int oflags, int mode); ++int vfsub_kern_path(const char *name, unsigned int flags, struct path *path); ++struct dentry *vfsub_lookup_one_len(const char *name, struct dentry *parent, ++ int len); ++struct dentry *vfsub_lookup_hash(struct nameidata *nd); ++ ++/* ---------------------------------------------------------------------- */ ++ ++struct au_hinode; ++struct dentry *vfsub_lock_rename(struct dentry *d1, struct au_hinode *hdir1, ++ struct dentry *d2, struct au_hinode *hdir2); ++void vfsub_unlock_rename(struct dentry *d1, struct au_hinode *hdir1, ++ struct dentry *d2, struct au_hinode *hdir2); ++ ++int vfsub_create(struct inode *dir, struct path *path, int mode); ++int vfsub_symlink(struct inode *dir, struct path *path, ++ const char *symname); ++int vfsub_mknod(struct inode *dir, struct path *path, int mode, dev_t dev); ++int vfsub_link(struct dentry *src_dentry, struct inode *dir, ++ struct path *path); ++int vfsub_rename(struct inode *src_hdir, struct dentry *src_dentry, ++ struct inode *hdir, struct path *path); ++int vfsub_mkdir(struct inode *dir, struct path *path, int mode); ++int vfsub_rmdir(struct inode *dir, struct path *path); ++ ++/* ---------------------------------------------------------------------- */ ++ ++ssize_t vfsub_read_u(struct file *file, char __user *ubuf, size_t count, ++ loff_t *ppos); ++ssize_t vfsub_read_k(struct file *file, void *kbuf, size_t count, ++ loff_t *ppos); ++ssize_t vfsub_write_u(struct file *file, const char __user *ubuf, size_t count, ++ loff_t *ppos); ++ssize_t vfsub_write_k(struct file *file, void *kbuf, size_t count, ++ loff_t *ppos); ++int vfsub_flush(struct file *file, fl_owner_t id); ++int vfsub_readdir(struct file *file, filldir_t filldir, void *arg); ++ ++static inline unsigned int vfsub_file_flags(struct file *file) ++{ ++ unsigned int flags; ++ ++ spin_lock(&file->f_lock); ++ flags = file->f_flags; ++ spin_unlock(&file->f_lock); ++ ++ return flags; ++} ++ ++static inline void vfsub_file_accessed(struct file *h_file) ++{ ++ file_accessed(h_file); ++ vfsub_update_h_iattr(&h_file->f_path, /*did*/NULL); /*ignore*/ ++} ++ ++static inline void vfsub_touch_atime(struct vfsmount *h_mnt, ++ struct dentry *h_dentry) ++{ ++ struct path h_path = { ++ .dentry = h_dentry, ++ .mnt = h_mnt ++ }; ++ touch_atime(h_mnt, h_dentry); ++ vfsub_update_h_iattr(&h_path, /*did*/NULL); /*ignore*/ ++} ++ ++long vfsub_splice_to(struct file *in, loff_t *ppos, ++ struct pipe_inode_info *pipe, size_t len, ++ unsigned int flags); ++long vfsub_splice_from(struct pipe_inode_info *pipe, struct file *out, ++ loff_t *ppos, size_t len, unsigned int flags); ++int vfsub_trunc(struct path *h_path, loff_t length, unsigned int attr, ++ struct file *h_file); ++ ++/* ---------------------------------------------------------------------- */ ++ ++static inline loff_t vfsub_llseek(struct file *file, loff_t offset, int origin) ++{ ++ loff_t err; ++ ++ err = vfs_llseek(file, offset, origin); ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* dirty workaround for strict type of fmode_t */ ++union vfsub_fmu { ++ fmode_t fm; ++ unsigned int ui; ++}; ++ ++static inline unsigned int vfsub_fmode_to_uint(fmode_t fm) ++{ ++ union vfsub_fmu u = { ++ .fm = fm ++ }; ++ ++ BUILD_BUG_ON(sizeof(u.fm) != sizeof(u.ui)); ++ ++ return u.ui; ++} ++ ++static inline fmode_t vfsub_uint_to_fmode(unsigned int ui) ++{ ++ union vfsub_fmu u = { ++ .ui = ui ++ }; ++ ++ return u.fm; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++int vfsub_sio_mkdir(struct inode *dir, struct path *path, int mode); ++int vfsub_sio_rmdir(struct inode *dir, struct path *path); ++int vfsub_sio_notify_change(struct path *path, struct iattr *ia); ++int vfsub_notify_change(struct path *path, struct iattr *ia); ++int vfsub_unlink(struct inode *dir, struct path *path, int force); ++ ++#endif /* __KERNEL__ */ ++#endif /* __AUFS_VFSUB_H__ */ +diff -urN a/fs/aufs/wbr_policy.c b/fs/aufs/wbr_policy.c +--- a/fs/aufs/wbr_policy.c 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/wbr_policy.c 2011-03-06 23:28:02.616413258 +0000 +@@ -0,0 +1,700 @@ ++/* ++ * Copyright (C) 2005-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * policies for selecting one among multiple writable branches ++ */ ++ ++#include ++#include "aufs.h" ++ ++/* subset of cpup_attr() */ ++static noinline_for_stack ++int au_cpdown_attr(struct path *h_path, struct dentry *h_src) ++{ ++ int err, sbits; ++ struct iattr ia; ++ struct inode *h_isrc; ++ ++ h_isrc = h_src->d_inode; ++ ia.ia_valid = ATTR_FORCE | ATTR_MODE | ATTR_UID | ATTR_GID; ++ ia.ia_mode = h_isrc->i_mode; ++ ia.ia_uid = h_isrc->i_uid; ++ ia.ia_gid = h_isrc->i_gid; ++ sbits = !!(ia.ia_mode & (S_ISUID | S_ISGID)); ++ au_cpup_attr_flags(h_path->dentry->d_inode, h_isrc); ++ err = vfsub_sio_notify_change(h_path, &ia); ++ ++ /* is this nfs only? */ ++ if (!err && sbits && au_test_nfs(h_path->dentry->d_sb)) { ++ ia.ia_valid = ATTR_FORCE | ATTR_MODE; ++ ia.ia_mode = h_isrc->i_mode; ++ err = vfsub_sio_notify_change(h_path, &ia); ++ } ++ ++ return err; ++} ++ ++#define AuCpdown_PARENT_OPQ 1 ++#define AuCpdown_WHED (1 << 1) ++#define AuCpdown_MADE_DIR (1 << 2) ++#define AuCpdown_DIROPQ (1 << 3) ++#define au_ftest_cpdown(flags, name) ((flags) & AuCpdown_##name) ++#define au_fset_cpdown(flags, name) \ ++ do { (flags) |= AuCpdown_##name; } while (0) ++#define au_fclr_cpdown(flags, name) \ ++ do { (flags) &= ~AuCpdown_##name; } while (0) ++ ++struct au_cpdown_dir_args { ++ struct dentry *parent; ++ unsigned int flags; ++}; ++ ++static int au_cpdown_dir_opq(struct dentry *dentry, aufs_bindex_t bdst, ++ struct au_cpdown_dir_args *a) ++{ ++ int err; ++ struct dentry *opq_dentry; ++ ++ opq_dentry = au_diropq_create(dentry, bdst); ++ err = PTR_ERR(opq_dentry); ++ if (IS_ERR(opq_dentry)) ++ goto out; ++ dput(opq_dentry); ++ au_fset_cpdown(a->flags, DIROPQ); ++ ++out: ++ return err; ++} ++ ++static int au_cpdown_dir_wh(struct dentry *dentry, struct dentry *h_parent, ++ struct inode *dir, aufs_bindex_t bdst) ++{ ++ int err; ++ struct path h_path; ++ struct au_branch *br; ++ ++ br = au_sbr(dentry->d_sb, bdst); ++ h_path.dentry = au_wh_lkup(h_parent, &dentry->d_name, br); ++ err = PTR_ERR(h_path.dentry); ++ if (IS_ERR(h_path.dentry)) ++ goto out; ++ ++ err = 0; ++ if (h_path.dentry->d_inode) { ++ h_path.mnt = br->br_mnt; ++ err = au_wh_unlink_dentry(au_h_iptr(dir, bdst), &h_path, ++ dentry); ++ } ++ dput(h_path.dentry); ++ ++out: ++ return err; ++} ++ ++static int au_cpdown_dir(struct dentry *dentry, aufs_bindex_t bdst, ++ struct dentry *h_parent, void *arg) ++{ ++ int err, rerr; ++ aufs_bindex_t bopq, bstart; ++ struct path h_path; ++ struct dentry *parent; ++ struct inode *h_dir, *h_inode, *inode, *dir; ++ struct au_cpdown_dir_args *args = arg; ++ ++ bstart = au_dbstart(dentry); ++ /* dentry is di-locked */ ++ parent = dget_parent(dentry); ++ dir = parent->d_inode; ++ h_dir = h_parent->d_inode; ++ AuDebugOn(h_dir != au_h_iptr(dir, bdst)); ++ IMustLock(h_dir); ++ ++ err = au_lkup_neg(dentry, bdst); ++ if (unlikely(err < 0)) ++ goto out; ++ h_path.dentry = au_h_dptr(dentry, bdst); ++ h_path.mnt = au_sbr_mnt(dentry->d_sb, bdst); ++ err = vfsub_sio_mkdir(au_h_iptr(dir, bdst), &h_path, ++ S_IRWXU | S_IRUGO | S_IXUGO); ++ if (unlikely(err)) ++ goto out_put; ++ au_fset_cpdown(args->flags, MADE_DIR); ++ ++ bopq = au_dbdiropq(dentry); ++ au_fclr_cpdown(args->flags, WHED); ++ au_fclr_cpdown(args->flags, DIROPQ); ++ if (au_dbwh(dentry) == bdst) ++ au_fset_cpdown(args->flags, WHED); ++ if (!au_ftest_cpdown(args->flags, PARENT_OPQ) && bopq <= bdst) ++ au_fset_cpdown(args->flags, PARENT_OPQ); ++ h_inode = h_path.dentry->d_inode; ++ mutex_lock_nested(&h_inode->i_mutex, AuLsc_I_CHILD); ++ if (au_ftest_cpdown(args->flags, WHED)) { ++ err = au_cpdown_dir_opq(dentry, bdst, args); ++ if (unlikely(err)) { ++ mutex_unlock(&h_inode->i_mutex); ++ goto out_dir; ++ } ++ } ++ ++ err = au_cpdown_attr(&h_path, au_h_dptr(dentry, bstart)); ++ mutex_unlock(&h_inode->i_mutex); ++ if (unlikely(err)) ++ goto out_opq; ++ ++ if (au_ftest_cpdown(args->flags, WHED)) { ++ err = au_cpdown_dir_wh(dentry, h_parent, dir, bdst); ++ if (unlikely(err)) ++ goto out_opq; ++ } ++ ++ inode = dentry->d_inode; ++ if (au_ibend(inode) < bdst) ++ au_set_ibend(inode, bdst); ++ au_set_h_iptr(inode, bdst, au_igrab(h_inode), ++ au_hi_flags(inode, /*isdir*/1)); ++ goto out; /* success */ ++ ++ /* revert */ ++out_opq: ++ if (au_ftest_cpdown(args->flags, DIROPQ)) { ++ mutex_lock_nested(&h_inode->i_mutex, AuLsc_I_CHILD); ++ rerr = au_diropq_remove(dentry, bdst); ++ mutex_unlock(&h_inode->i_mutex); ++ if (unlikely(rerr)) { ++ AuIOErr("failed removing diropq for %.*s b%d (%d)\n", ++ AuDLNPair(dentry), bdst, rerr); ++ err = -EIO; ++ goto out; ++ } ++ } ++out_dir: ++ if (au_ftest_cpdown(args->flags, MADE_DIR)) { ++ rerr = vfsub_sio_rmdir(au_h_iptr(dir, bdst), &h_path); ++ if (unlikely(rerr)) { ++ AuIOErr("failed removing %.*s b%d (%d)\n", ++ AuDLNPair(dentry), bdst, rerr); ++ err = -EIO; ++ } ++ } ++out_put: ++ au_set_h_dptr(dentry, bdst, NULL); ++ if (au_dbend(dentry) == bdst) ++ au_update_dbend(dentry); ++out: ++ dput(parent); ++ return err; ++} ++ ++int au_cpdown_dirs(struct dentry *dentry, aufs_bindex_t bdst) ++{ ++ int err; ++ struct au_cpdown_dir_args args = { ++ .parent = dget_parent(dentry), ++ .flags = 0 ++ }; ++ ++ err = au_cp_dirs(dentry, bdst, au_cpdown_dir, &args); ++ dput(args.parent); ++ ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* policies for create */ ++ ++static int au_wbr_nonopq(struct dentry *dentry, aufs_bindex_t bindex) ++{ ++ int err, i, j, ndentry; ++ aufs_bindex_t bopq; ++ struct au_dcsub_pages dpages; ++ struct au_dpage *dpage; ++ struct dentry **dentries, *parent, *d; ++ ++ err = au_dpages_init(&dpages, GFP_NOFS); ++ if (unlikely(err)) ++ goto out; ++ parent = dget_parent(dentry); ++ err = au_dcsub_pages_rev_aufs(&dpages, parent, /*do_include*/0); ++ if (unlikely(err)) ++ goto out_free; ++ ++ err = bindex; ++ for (i = 0; i < dpages.ndpage; i++) { ++ dpage = dpages.dpages + i; ++ dentries = dpage->dentries; ++ ndentry = dpage->ndentry; ++ for (j = 0; j < ndentry; j++) { ++ d = dentries[j]; ++ di_read_lock_parent2(d, !AuLock_IR); ++ bopq = au_dbdiropq(d); ++ di_read_unlock(d, !AuLock_IR); ++ if (bopq >= 0 && bopq < err) ++ err = bopq; ++ } ++ } ++ ++out_free: ++ dput(parent); ++ au_dpages_free(&dpages); ++out: ++ return err; ++} ++ ++static int au_wbr_bu(struct super_block *sb, aufs_bindex_t bindex) ++{ ++ for (; bindex >= 0; bindex--) ++ if (!au_br_rdonly(au_sbr(sb, bindex))) ++ return bindex; ++ return -EROFS; ++} ++ ++/* top down parent */ ++static int au_wbr_create_tdp(struct dentry *dentry, int isdir __maybe_unused) ++{ ++ int err; ++ aufs_bindex_t bstart, bindex; ++ struct super_block *sb; ++ struct dentry *parent, *h_parent; ++ ++ sb = dentry->d_sb; ++ bstart = au_dbstart(dentry); ++ err = bstart; ++ if (!au_br_rdonly(au_sbr(sb, bstart))) ++ goto out; ++ ++ err = -EROFS; ++ parent = dget_parent(dentry); ++ for (bindex = au_dbstart(parent); bindex < bstart; bindex++) { ++ h_parent = au_h_dptr(parent, bindex); ++ if (!h_parent || !h_parent->d_inode) ++ continue; ++ ++ if (!au_br_rdonly(au_sbr(sb, bindex))) { ++ err = bindex; ++ break; ++ } ++ } ++ dput(parent); ++ ++ /* bottom up here */ ++ if (unlikely(err < 0)) { ++ err = au_wbr_bu(sb, bstart - 1); ++ if (err >= 0) ++ err = au_wbr_nonopq(dentry, err); ++ } ++ ++out: ++ AuDbg("b%d\n", err); ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* an exception for the policy other than tdp */ ++static int au_wbr_create_exp(struct dentry *dentry) ++{ ++ int err; ++ aufs_bindex_t bwh, bdiropq; ++ struct dentry *parent; ++ ++ err = -1; ++ bwh = au_dbwh(dentry); ++ parent = dget_parent(dentry); ++ bdiropq = au_dbdiropq(parent); ++ if (bwh >= 0) { ++ if (bdiropq >= 0) ++ err = min(bdiropq, bwh); ++ else ++ err = bwh; ++ AuDbg("%d\n", err); ++ } else if (bdiropq >= 0) { ++ err = bdiropq; ++ AuDbg("%d\n", err); ++ } ++ dput(parent); ++ ++ if (err >= 0) ++ err = au_wbr_nonopq(dentry, err); ++ ++ if (err >= 0 && au_br_rdonly(au_sbr(dentry->d_sb, err))) ++ err = -1; ++ ++ AuDbg("%d\n", err); ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* round robin */ ++static int au_wbr_create_init_rr(struct super_block *sb) ++{ ++ int err; ++ ++ err = au_wbr_bu(sb, au_sbend(sb)); ++ atomic_set(&au_sbi(sb)->si_wbr_rr_next, -err); /* less important */ ++ /* smp_mb(); */ ++ ++ AuDbg("b%d\n", err); ++ return err; ++} ++ ++static int au_wbr_create_rr(struct dentry *dentry, int isdir) ++{ ++ int err, nbr; ++ unsigned int u; ++ aufs_bindex_t bindex, bend; ++ struct super_block *sb; ++ atomic_t *next; ++ ++ err = au_wbr_create_exp(dentry); ++ if (err >= 0) ++ goto out; ++ ++ sb = dentry->d_sb; ++ next = &au_sbi(sb)->si_wbr_rr_next; ++ bend = au_sbend(sb); ++ nbr = bend + 1; ++ for (bindex = 0; bindex <= bend; bindex++) { ++ if (!isdir) { ++ err = atomic_dec_return(next) + 1; ++ /* modulo for 0 is meaningless */ ++ if (unlikely(!err)) ++ err = atomic_dec_return(next) + 1; ++ } else ++ err = atomic_read(next); ++ AuDbg("%d\n", err); ++ u = err; ++ err = u % nbr; ++ AuDbg("%d\n", err); ++ if (!au_br_rdonly(au_sbr(sb, err))) ++ break; ++ err = -EROFS; ++ } ++ ++ if (err >= 0) ++ err = au_wbr_nonopq(dentry, err); ++ ++out: ++ AuDbg("%d\n", err); ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* most free space */ ++static void au_mfs(struct dentry *dentry) ++{ ++ struct super_block *sb; ++ struct au_branch *br; ++ struct au_wbr_mfs *mfs; ++ aufs_bindex_t bindex, bend; ++ int err; ++ unsigned long long b, bavail; ++ struct path h_path; ++ /* reduce the stack usage */ ++ struct kstatfs *st; ++ ++ st = kmalloc(sizeof(*st), GFP_NOFS); ++ if (unlikely(!st)) { ++ AuWarn1("failed updating mfs(%d), ignored\n", -ENOMEM); ++ return; ++ } ++ ++ bavail = 0; ++ sb = dentry->d_sb; ++ mfs = &au_sbi(sb)->si_wbr_mfs; ++ MtxMustLock(&mfs->mfs_lock); ++ mfs->mfs_bindex = -EROFS; ++ mfs->mfsrr_bytes = 0; ++ bend = au_sbend(sb); ++ for (bindex = 0; bindex <= bend; bindex++) { ++ br = au_sbr(sb, bindex); ++ if (au_br_rdonly(br)) ++ continue; ++ ++ /* sb->s_root for NFS is unreliable */ ++ h_path.mnt = br->br_mnt; ++ h_path.dentry = h_path.mnt->mnt_root; ++ err = vfs_statfs(&h_path, st); ++ if (unlikely(err)) { ++ AuWarn1("failed statfs, b%d, %d\n", bindex, err); ++ continue; ++ } ++ ++ /* when the available size is equal, select the lower one */ ++ BUILD_BUG_ON(sizeof(b) < sizeof(st->f_bavail) ++ || sizeof(b) < sizeof(st->f_bsize)); ++ b = st->f_bavail * st->f_bsize; ++ br->br_wbr->wbr_bytes = b; ++ if (b >= bavail) { ++ bavail = b; ++ mfs->mfs_bindex = bindex; ++ mfs->mfs_jiffy = jiffies; ++ } ++ } ++ ++ mfs->mfsrr_bytes = bavail; ++ AuDbg("b%d\n", mfs->mfs_bindex); ++ kfree(st); ++} ++ ++static int au_wbr_create_mfs(struct dentry *dentry, int isdir __maybe_unused) ++{ ++ int err; ++ struct super_block *sb; ++ struct au_wbr_mfs *mfs; ++ ++ err = au_wbr_create_exp(dentry); ++ if (err >= 0) ++ goto out; ++ ++ sb = dentry->d_sb; ++ mfs = &au_sbi(sb)->si_wbr_mfs; ++ mutex_lock(&mfs->mfs_lock); ++ if (time_after(jiffies, mfs->mfs_jiffy + mfs->mfs_expire) ++ || mfs->mfs_bindex < 0 ++ || au_br_rdonly(au_sbr(sb, mfs->mfs_bindex))) ++ au_mfs(dentry); ++ mutex_unlock(&mfs->mfs_lock); ++ err = mfs->mfs_bindex; ++ ++ if (err >= 0) ++ err = au_wbr_nonopq(dentry, err); ++ ++out: ++ AuDbg("b%d\n", err); ++ return err; ++} ++ ++static int au_wbr_create_init_mfs(struct super_block *sb) ++{ ++ struct au_wbr_mfs *mfs; ++ ++ mfs = &au_sbi(sb)->si_wbr_mfs; ++ mutex_init(&mfs->mfs_lock); ++ mfs->mfs_jiffy = 0; ++ mfs->mfs_bindex = -EROFS; ++ ++ return 0; ++} ++ ++static int au_wbr_create_fin_mfs(struct super_block *sb __maybe_unused) ++{ ++ mutex_destroy(&au_sbi(sb)->si_wbr_mfs.mfs_lock); ++ return 0; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* most free space and then round robin */ ++static int au_wbr_create_mfsrr(struct dentry *dentry, int isdir) ++{ ++ int err; ++ struct au_wbr_mfs *mfs; ++ ++ err = au_wbr_create_mfs(dentry, isdir); ++ if (err >= 0) { ++ mfs = &au_sbi(dentry->d_sb)->si_wbr_mfs; ++ mutex_lock(&mfs->mfs_lock); ++ if (mfs->mfsrr_bytes < mfs->mfsrr_watermark) ++ err = au_wbr_create_rr(dentry, isdir); ++ mutex_unlock(&mfs->mfs_lock); ++ } ++ ++ AuDbg("b%d\n", err); ++ return err; ++} ++ ++static int au_wbr_create_init_mfsrr(struct super_block *sb) ++{ ++ int err; ++ ++ au_wbr_create_init_mfs(sb); /* ignore */ ++ err = au_wbr_create_init_rr(sb); ++ ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* top down parent and most free space */ ++static int au_wbr_create_pmfs(struct dentry *dentry, int isdir) ++{ ++ int err, e2; ++ unsigned long long b; ++ aufs_bindex_t bindex, bstart, bend; ++ struct super_block *sb; ++ struct dentry *parent, *h_parent; ++ struct au_branch *br; ++ ++ err = au_wbr_create_tdp(dentry, isdir); ++ if (unlikely(err < 0)) ++ goto out; ++ parent = dget_parent(dentry); ++ bstart = au_dbstart(parent); ++ bend = au_dbtaildir(parent); ++ if (bstart == bend) ++ goto out_parent; /* success */ ++ ++ e2 = au_wbr_create_mfs(dentry, isdir); ++ if (e2 < 0) ++ goto out_parent; /* success */ ++ ++ /* when the available size is equal, select upper one */ ++ sb = dentry->d_sb; ++ br = au_sbr(sb, err); ++ b = br->br_wbr->wbr_bytes; ++ AuDbg("b%d, %llu\n", err, b); ++ ++ for (bindex = bstart; bindex <= bend; bindex++) { ++ h_parent = au_h_dptr(parent, bindex); ++ if (!h_parent || !h_parent->d_inode) ++ continue; ++ ++ br = au_sbr(sb, bindex); ++ if (!au_br_rdonly(br) && br->br_wbr->wbr_bytes > b) { ++ b = br->br_wbr->wbr_bytes; ++ err = bindex; ++ AuDbg("b%d, %llu\n", err, b); ++ } ++ } ++ ++ if (err >= 0) ++ err = au_wbr_nonopq(dentry, err); ++ ++out_parent: ++ dput(parent); ++out: ++ AuDbg("b%d\n", err); ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* policies for copyup */ ++ ++/* top down parent */ ++static int au_wbr_copyup_tdp(struct dentry *dentry) ++{ ++ return au_wbr_create_tdp(dentry, /*isdir, anything is ok*/0); ++} ++ ++/* bottom up parent */ ++static int au_wbr_copyup_bup(struct dentry *dentry) ++{ ++ int err; ++ aufs_bindex_t bindex, bstart; ++ struct dentry *parent, *h_parent; ++ struct super_block *sb; ++ ++ err = -EROFS; ++ sb = dentry->d_sb; ++ parent = dget_parent(dentry); ++ bstart = au_dbstart(parent); ++ for (bindex = au_dbstart(dentry); bindex >= bstart; bindex--) { ++ h_parent = au_h_dptr(parent, bindex); ++ if (!h_parent || !h_parent->d_inode) ++ continue; ++ ++ if (!au_br_rdonly(au_sbr(sb, bindex))) { ++ err = bindex; ++ break; ++ } ++ } ++ dput(parent); ++ ++ /* bottom up here */ ++ if (unlikely(err < 0)) ++ err = au_wbr_bu(sb, bstart - 1); ++ ++ AuDbg("b%d\n", err); ++ return err; ++} ++ ++/* bottom up */ ++static int au_wbr_copyup_bu(struct dentry *dentry) ++{ ++ int err; ++ aufs_bindex_t bstart; ++ ++ bstart = au_dbstart(dentry); ++ err = au_wbr_bu(dentry->d_sb, bstart); ++ AuDbg("b%d\n", err); ++ if (err > bstart) ++ err = au_wbr_nonopq(dentry, err); ++ ++ AuDbg("b%d\n", err); ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++struct au_wbr_copyup_operations au_wbr_copyup_ops[] = { ++ [AuWbrCopyup_TDP] = { ++ .copyup = au_wbr_copyup_tdp ++ }, ++ [AuWbrCopyup_BUP] = { ++ .copyup = au_wbr_copyup_bup ++ }, ++ [AuWbrCopyup_BU] = { ++ .copyup = au_wbr_copyup_bu ++ } ++}; ++ ++struct au_wbr_create_operations au_wbr_create_ops[] = { ++ [AuWbrCreate_TDP] = { ++ .create = au_wbr_create_tdp ++ }, ++ [AuWbrCreate_RR] = { ++ .create = au_wbr_create_rr, ++ .init = au_wbr_create_init_rr ++ }, ++ [AuWbrCreate_MFS] = { ++ .create = au_wbr_create_mfs, ++ .init = au_wbr_create_init_mfs, ++ .fin = au_wbr_create_fin_mfs ++ }, ++ [AuWbrCreate_MFSV] = { ++ .create = au_wbr_create_mfs, ++ .init = au_wbr_create_init_mfs, ++ .fin = au_wbr_create_fin_mfs ++ }, ++ [AuWbrCreate_MFSRR] = { ++ .create = au_wbr_create_mfsrr, ++ .init = au_wbr_create_init_mfsrr, ++ .fin = au_wbr_create_fin_mfs ++ }, ++ [AuWbrCreate_MFSRRV] = { ++ .create = au_wbr_create_mfsrr, ++ .init = au_wbr_create_init_mfsrr, ++ .fin = au_wbr_create_fin_mfs ++ }, ++ [AuWbrCreate_PMFS] = { ++ .create = au_wbr_create_pmfs, ++ .init = au_wbr_create_init_mfs, ++ .fin = au_wbr_create_fin_mfs ++ }, ++ [AuWbrCreate_PMFSV] = { ++ .create = au_wbr_create_pmfs, ++ .init = au_wbr_create_init_mfs, ++ .fin = au_wbr_create_fin_mfs ++ } ++}; +diff -urN a/fs/aufs/whout.c b/fs/aufs/whout.c +--- a/fs/aufs/whout.c 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/whout.c 2011-03-06 23:28:02.620413138 +0000 +@@ -0,0 +1,1062 @@ ++/* ++ * Copyright (C) 2005-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * whiteout for logical deletion and opaque directory ++ */ ++ ++#include ++#include "aufs.h" ++ ++#define WH_MASK S_IRUGO ++ ++/* ++ * If a directory contains this file, then it is opaque. We start with the ++ * .wh. flag so that it is blocked by lookup. ++ */ ++static struct qstr diropq_name = { ++ .name = AUFS_WH_DIROPQ, ++ .len = sizeof(AUFS_WH_DIROPQ) - 1 ++}; ++ ++/* ++ * generate whiteout name, which is NOT terminated by NULL. ++ * @name: original d_name.name ++ * @len: original d_name.len ++ * @wh: whiteout qstr ++ * returns zero when succeeds, otherwise error. ++ * succeeded value as wh->name should be freed by kfree(). ++ */ ++int au_wh_name_alloc(struct qstr *wh, const struct qstr *name) ++{ ++ char *p; ++ ++ if (unlikely(name->len > PATH_MAX - AUFS_WH_PFX_LEN)) ++ return -ENAMETOOLONG; ++ ++ wh->len = name->len + AUFS_WH_PFX_LEN; ++ p = kmalloc(wh->len, GFP_NOFS); ++ wh->name = p; ++ if (p) { ++ memcpy(p, AUFS_WH_PFX, AUFS_WH_PFX_LEN); ++ memcpy(p + AUFS_WH_PFX_LEN, name->name, name->len); ++ /* smp_mb(); */ ++ return 0; ++ } ++ return -ENOMEM; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* ++ * test if the @wh_name exists under @h_parent. ++ * @try_sio specifies the necessary of super-io. ++ */ ++int au_wh_test(struct dentry *h_parent, struct qstr *wh_name, ++ struct au_branch *br, int try_sio) ++{ ++ int err; ++ struct dentry *wh_dentry; ++ ++ if (!try_sio) ++ wh_dentry = au_lkup_one(wh_name, h_parent, br, /*nd*/NULL); ++ else ++ wh_dentry = au_sio_lkup_one(wh_name, h_parent, br); ++ err = PTR_ERR(wh_dentry); ++ if (IS_ERR(wh_dentry)) ++ goto out; ++ ++ err = 0; ++ if (!wh_dentry->d_inode) ++ goto out_wh; /* success */ ++ ++ err = 1; ++ if (S_ISREG(wh_dentry->d_inode->i_mode)) ++ goto out_wh; /* success */ ++ ++ err = -EIO; ++ AuIOErr("%.*s Invalid whiteout entry type 0%o.\n", ++ AuDLNPair(wh_dentry), wh_dentry->d_inode->i_mode); ++ ++out_wh: ++ dput(wh_dentry); ++out: ++ return err; ++} ++ ++/* ++ * test if the @h_dentry sets opaque or not. ++ */ ++int au_diropq_test(struct dentry *h_dentry, struct au_branch *br) ++{ ++ int err; ++ struct inode *h_dir; ++ ++ h_dir = h_dentry->d_inode; ++ err = au_wh_test(h_dentry, &diropq_name, br, ++ au_test_h_perm_sio(h_dir, MAY_EXEC)); ++ return err; ++} ++ ++/* ++ * returns a negative dentry whose name is unique and temporary. ++ */ ++struct dentry *au_whtmp_lkup(struct dentry *h_parent, struct au_branch *br, ++ struct qstr *prefix) ++{ ++ struct dentry *dentry; ++ int i; ++ char defname[NAME_MAX - AUFS_MAX_NAMELEN + DNAME_INLINE_LEN + 1], ++ *name, *p; ++ /* strict atomic_t is unnecessary here */ ++ static unsigned short cnt; ++ struct qstr qs; ++ ++ BUILD_BUG_ON(sizeof(cnt) * 2 > AUFS_WH_TMP_LEN); ++ ++ name = defname; ++ qs.len = sizeof(defname) - DNAME_INLINE_LEN + prefix->len - 1; ++ if (unlikely(prefix->len > DNAME_INLINE_LEN)) { ++ dentry = ERR_PTR(-ENAMETOOLONG); ++ if (unlikely(qs.len > NAME_MAX)) ++ goto out; ++ dentry = ERR_PTR(-ENOMEM); ++ name = kmalloc(qs.len + 1, GFP_NOFS); ++ if (unlikely(!name)) ++ goto out; ++ } ++ ++ /* doubly whiteout-ed */ ++ memcpy(name, AUFS_WH_PFX AUFS_WH_PFX, AUFS_WH_PFX_LEN * 2); ++ p = name + AUFS_WH_PFX_LEN * 2; ++ memcpy(p, prefix->name, prefix->len); ++ p += prefix->len; ++ *p++ = '.'; ++ AuDebugOn(name + qs.len + 1 - p <= AUFS_WH_TMP_LEN); ++ ++ qs.name = name; ++ for (i = 0; i < 3; i++) { ++ sprintf(p, "%.*x", AUFS_WH_TMP_LEN, cnt++); ++ dentry = au_sio_lkup_one(&qs, h_parent, br); ++ if (IS_ERR(dentry) || !dentry->d_inode) ++ goto out_name; ++ dput(dentry); ++ } ++ /* pr_warning("could not get random name\n"); */ ++ dentry = ERR_PTR(-EEXIST); ++ AuDbg("%.*s\n", AuLNPair(&qs)); ++ BUG(); ++ ++out_name: ++ if (name != defname) ++ kfree(name); ++out: ++ AuTraceErrPtr(dentry); ++ return dentry; ++} ++ ++/* ++ * rename the @h_dentry on @br to the whiteouted temporary name. ++ */ ++int au_whtmp_ren(struct dentry *h_dentry, struct au_branch *br) ++{ ++ int err; ++ struct path h_path = { ++ .mnt = br->br_mnt ++ }; ++ struct inode *h_dir; ++ struct dentry *h_parent; ++ ++ h_parent = h_dentry->d_parent; /* dir inode is locked */ ++ h_dir = h_parent->d_inode; ++ IMustLock(h_dir); ++ ++ h_path.dentry = au_whtmp_lkup(h_parent, br, &h_dentry->d_name); ++ err = PTR_ERR(h_path.dentry); ++ if (IS_ERR(h_path.dentry)) ++ goto out; ++ ++ /* under the same dir, no need to lock_rename() */ ++ err = vfsub_rename(h_dir, h_dentry, h_dir, &h_path); ++ AuTraceErr(err); ++ dput(h_path.dentry); ++ ++out: ++ AuTraceErr(err); ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++/* ++ * functions for removing a whiteout ++ */ ++ ++static int do_unlink_wh(struct inode *h_dir, struct path *h_path) ++{ ++ int force; ++ ++ /* ++ * forces superio when the dir has a sticky bit. ++ * this may be a violation of unix fs semantics. ++ */ ++ force = (h_dir->i_mode & S_ISVTX) ++ && h_path->dentry->d_inode->i_uid != current_fsuid(); ++ return vfsub_unlink(h_dir, h_path, force); ++} ++ ++int au_wh_unlink_dentry(struct inode *h_dir, struct path *h_path, ++ struct dentry *dentry) ++{ ++ int err; ++ ++ err = do_unlink_wh(h_dir, h_path); ++ if (!err && dentry) ++ au_set_dbwh(dentry, -1); ++ ++ return err; ++} ++ ++static int unlink_wh_name(struct dentry *h_parent, struct qstr *wh, ++ struct au_branch *br) ++{ ++ int err; ++ struct path h_path = { ++ .mnt = br->br_mnt ++ }; ++ ++ err = 0; ++ h_path.dentry = au_lkup_one(wh, h_parent, br, /*nd*/NULL); ++ if (IS_ERR(h_path.dentry)) ++ err = PTR_ERR(h_path.dentry); ++ else { ++ if (h_path.dentry->d_inode ++ && S_ISREG(h_path.dentry->d_inode->i_mode)) ++ err = do_unlink_wh(h_parent->d_inode, &h_path); ++ dput(h_path.dentry); ++ } ++ ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++/* ++ * initialize/clean whiteout for a branch ++ */ ++ ++static void au_wh_clean(struct inode *h_dir, struct path *whpath, ++ const int isdir) ++{ ++ int err; ++ ++ if (!whpath->dentry->d_inode) ++ return; ++ ++ err = mnt_want_write(whpath->mnt); ++ if (!err) { ++ if (isdir) ++ err = vfsub_rmdir(h_dir, whpath); ++ else ++ err = vfsub_unlink(h_dir, whpath, /*force*/0); ++ mnt_drop_write(whpath->mnt); ++ } ++ if (unlikely(err)) ++ pr_warning("failed removing %.*s (%d), ignored.\n", ++ AuDLNPair(whpath->dentry), err); ++} ++ ++static int test_linkable(struct dentry *h_root) ++{ ++ struct inode *h_dir = h_root->d_inode; ++ ++ if (h_dir->i_op->link) ++ return 0; ++ ++ pr_err("%.*s (%s) doesn't support link(2), use noplink and rw+nolwh\n", ++ AuDLNPair(h_root), au_sbtype(h_root->d_sb)); ++ return -ENOSYS; ++} ++ ++/* todo: should this mkdir be done in /sbin/mount.aufs helper? */ ++static int au_whdir(struct inode *h_dir, struct path *path) ++{ ++ int err; ++ ++ err = -EEXIST; ++ if (!path->dentry->d_inode) { ++ int mode = S_IRWXU; ++ ++ if (au_test_nfs(path->dentry->d_sb)) ++ mode |= S_IXUGO; ++ err = mnt_want_write(path->mnt); ++ if (!err) { ++ err = vfsub_mkdir(h_dir, path, mode); ++ mnt_drop_write(path->mnt); ++ } ++ } else if (S_ISDIR(path->dentry->d_inode->i_mode)) ++ err = 0; ++ else ++ pr_err("unknown %.*s exists\n", AuDLNPair(path->dentry)); ++ ++ return err; ++} ++ ++struct au_wh_base { ++ const struct qstr *name; ++ struct dentry *dentry; ++}; ++ ++static void au_wh_init_ro(struct inode *h_dir, struct au_wh_base base[], ++ struct path *h_path) ++{ ++ h_path->dentry = base[AuBrWh_BASE].dentry; ++ au_wh_clean(h_dir, h_path, /*isdir*/0); ++ h_path->dentry = base[AuBrWh_PLINK].dentry; ++ au_wh_clean(h_dir, h_path, /*isdir*/1); ++ h_path->dentry = base[AuBrWh_ORPH].dentry; ++ au_wh_clean(h_dir, h_path, /*isdir*/1); ++} ++ ++/* ++ * returns tri-state, ++ * minus: error, caller should print the mesage ++ * zero: succuess ++ * plus: error, caller should NOT print the mesage ++ */ ++static int au_wh_init_rw_nolink(struct dentry *h_root, struct au_wbr *wbr, ++ int do_plink, struct au_wh_base base[], ++ struct path *h_path) ++{ ++ int err; ++ struct inode *h_dir; ++ ++ h_dir = h_root->d_inode; ++ h_path->dentry = base[AuBrWh_BASE].dentry; ++ au_wh_clean(h_dir, h_path, /*isdir*/0); ++ h_path->dentry = base[AuBrWh_PLINK].dentry; ++ if (do_plink) { ++ err = test_linkable(h_root); ++ if (unlikely(err)) { ++ err = 1; ++ goto out; ++ } ++ ++ err = au_whdir(h_dir, h_path); ++ if (unlikely(err)) ++ goto out; ++ wbr->wbr_plink = dget(base[AuBrWh_PLINK].dentry); ++ } else ++ au_wh_clean(h_dir, h_path, /*isdir*/1); ++ h_path->dentry = base[AuBrWh_ORPH].dentry; ++ err = au_whdir(h_dir, h_path); ++ if (unlikely(err)) ++ goto out; ++ wbr->wbr_orph = dget(base[AuBrWh_ORPH].dentry); ++ ++out: ++ return err; ++} ++ ++/* ++ * for the moment, aufs supports the branch filesystem which does not support ++ * link(2). testing on FAT which does not support i_op->setattr() fully either, ++ * copyup failed. finally, such filesystem will not be used as the writable ++ * branch. ++ * ++ * returns tri-state, see above. ++ */ ++static int au_wh_init_rw(struct dentry *h_root, struct au_wbr *wbr, ++ int do_plink, struct au_wh_base base[], ++ struct path *h_path) ++{ ++ int err; ++ struct inode *h_dir; ++ ++ WbrWhMustWriteLock(wbr); ++ ++ err = test_linkable(h_root); ++ if (unlikely(err)) { ++ err = 1; ++ goto out; ++ } ++ ++ /* ++ * todo: should this create be done in /sbin/mount.aufs helper? ++ */ ++ err = -EEXIST; ++ h_dir = h_root->d_inode; ++ if (!base[AuBrWh_BASE].dentry->d_inode) { ++ err = mnt_want_write(h_path->mnt); ++ if (!err) { ++ h_path->dentry = base[AuBrWh_BASE].dentry; ++ err = vfsub_create(h_dir, h_path, WH_MASK); ++ mnt_drop_write(h_path->mnt); ++ } ++ } else if (S_ISREG(base[AuBrWh_BASE].dentry->d_inode->i_mode)) ++ err = 0; ++ else ++ pr_err("unknown %.*s/%.*s exists\n", ++ AuDLNPair(h_root), AuDLNPair(base[AuBrWh_BASE].dentry)); ++ if (unlikely(err)) ++ goto out; ++ ++ h_path->dentry = base[AuBrWh_PLINK].dentry; ++ if (do_plink) { ++ err = au_whdir(h_dir, h_path); ++ if (unlikely(err)) ++ goto out; ++ wbr->wbr_plink = dget(base[AuBrWh_PLINK].dentry); ++ } else ++ au_wh_clean(h_dir, h_path, /*isdir*/1); ++ wbr->wbr_whbase = dget(base[AuBrWh_BASE].dentry); ++ ++ h_path->dentry = base[AuBrWh_ORPH].dentry; ++ err = au_whdir(h_dir, h_path); ++ if (unlikely(err)) ++ goto out; ++ wbr->wbr_orph = dget(base[AuBrWh_ORPH].dentry); ++ ++out: ++ return err; ++} ++ ++/* ++ * initialize the whiteout base file/dir for @br. ++ */ ++int au_wh_init(struct dentry *h_root, struct au_branch *br, ++ struct super_block *sb) ++{ ++ int err, i; ++ const unsigned char do_plink ++ = !!au_opt_test(au_mntflags(sb), PLINK); ++ struct path path = { ++ .mnt = br->br_mnt ++ }; ++ struct inode *h_dir; ++ struct au_wbr *wbr = br->br_wbr; ++ static const struct qstr base_name[] = { ++ [AuBrWh_BASE] = { ++ .name = AUFS_BASE_NAME, ++ .len = sizeof(AUFS_BASE_NAME) - 1 ++ }, ++ [AuBrWh_PLINK] = { ++ .name = AUFS_PLINKDIR_NAME, ++ .len = sizeof(AUFS_PLINKDIR_NAME) - 1 ++ }, ++ [AuBrWh_ORPH] = { ++ .name = AUFS_ORPHDIR_NAME, ++ .len = sizeof(AUFS_ORPHDIR_NAME) - 1 ++ } ++ }; ++ struct au_wh_base base[] = { ++ [AuBrWh_BASE] = { ++ .name = base_name + AuBrWh_BASE, ++ .dentry = NULL ++ }, ++ [AuBrWh_PLINK] = { ++ .name = base_name + AuBrWh_PLINK, ++ .dentry = NULL ++ }, ++ [AuBrWh_ORPH] = { ++ .name = base_name + AuBrWh_ORPH, ++ .dentry = NULL ++ } ++ }; ++ ++ if (wbr) ++ WbrWhMustWriteLock(wbr); ++ ++ for (i = 0; i < AuBrWh_Last; i++) { ++ /* doubly whiteouted */ ++ struct dentry *d; ++ ++ d = au_wh_lkup(h_root, (void *)base[i].name, br); ++ err = PTR_ERR(d); ++ if (IS_ERR(d)) ++ goto out; ++ ++ base[i].dentry = d; ++ AuDebugOn(wbr ++ && wbr->wbr_wh[i] ++ && wbr->wbr_wh[i] != base[i].dentry); ++ } ++ ++ if (wbr) ++ for (i = 0; i < AuBrWh_Last; i++) { ++ dput(wbr->wbr_wh[i]); ++ wbr->wbr_wh[i] = NULL; ++ } ++ ++ err = 0; ++ switch (br->br_perm) { ++ case AuBrPerm_RO: ++ case AuBrPerm_ROWH: ++ case AuBrPerm_RR: ++ case AuBrPerm_RRWH: ++ h_dir = h_root->d_inode; ++ au_wh_init_ro(h_dir, base, &path); ++ break; ++ ++ case AuBrPerm_RWNoLinkWH: ++ err = au_wh_init_rw_nolink(h_root, wbr, do_plink, base, &path); ++ if (err > 0) ++ goto out; ++ else if (err) ++ goto out_err; ++ break; ++ ++ case AuBrPerm_RW: ++ err = au_wh_init_rw(h_root, wbr, do_plink, base, &path); ++ if (err > 0) ++ goto out; ++ else if (err) ++ goto out_err; ++ break; ++ ++ default: ++ BUG(); ++ } ++ goto out; /* success */ ++ ++out_err: ++ pr_err("an error(%d) on the writable branch %.*s(%s)\n", ++ err, AuDLNPair(h_root), au_sbtype(h_root->d_sb)); ++out: ++ for (i = 0; i < AuBrWh_Last; i++) ++ dput(base[i].dentry); ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++/* ++ * whiteouts are all hard-linked usually. ++ * when its link count reaches a ceiling, we create a new whiteout base ++ * asynchronously. ++ */ ++ ++struct reinit_br_wh { ++ struct super_block *sb; ++ struct au_branch *br; ++}; ++ ++static void reinit_br_wh(void *arg) ++{ ++ int err; ++ aufs_bindex_t bindex; ++ struct path h_path; ++ struct reinit_br_wh *a = arg; ++ struct au_wbr *wbr; ++ struct inode *dir; ++ struct dentry *h_root; ++ struct au_hinode *hdir; ++ ++ err = 0; ++ wbr = a->br->br_wbr; ++ /* big aufs lock */ ++ si_noflush_write_lock(a->sb); ++ if (!au_br_writable(a->br->br_perm)) ++ goto out; ++ bindex = au_br_index(a->sb, a->br->br_id); ++ if (unlikely(bindex < 0)) ++ goto out; ++ ++ di_read_lock_parent(a->sb->s_root, AuLock_IR); ++ dir = a->sb->s_root->d_inode; ++ hdir = au_hi(dir, bindex); ++ h_root = au_h_dptr(a->sb->s_root, bindex); ++ ++ au_hn_imtx_lock_nested(hdir, AuLsc_I_PARENT); ++ wbr_wh_write_lock(wbr); ++ err = au_h_verify(wbr->wbr_whbase, au_opt_udba(a->sb), hdir->hi_inode, ++ h_root, a->br); ++ if (!err) { ++ err = mnt_want_write(a->br->br_mnt); ++ if (!err) { ++ h_path.dentry = wbr->wbr_whbase; ++ h_path.mnt = a->br->br_mnt; ++ err = vfsub_unlink(hdir->hi_inode, &h_path, /*force*/0); ++ mnt_drop_write(a->br->br_mnt); ++ } ++ } else { ++ pr_warning("%.*s is moved, ignored\n", ++ AuDLNPair(wbr->wbr_whbase)); ++ err = 0; ++ } ++ dput(wbr->wbr_whbase); ++ wbr->wbr_whbase = NULL; ++ if (!err) ++ err = au_wh_init(h_root, a->br, a->sb); ++ wbr_wh_write_unlock(wbr); ++ au_hn_imtx_unlock(hdir); ++ di_read_unlock(a->sb->s_root, AuLock_IR); ++ ++out: ++ if (wbr) ++ atomic_dec(&wbr->wbr_wh_running); ++ atomic_dec(&a->br->br_count); ++ si_write_unlock(a->sb); ++ au_nwt_done(&au_sbi(a->sb)->si_nowait); ++ kfree(arg); ++ if (unlikely(err)) ++ AuIOErr("err %d\n", err); ++} ++ ++static void kick_reinit_br_wh(struct super_block *sb, struct au_branch *br) ++{ ++ int do_dec, wkq_err; ++ struct reinit_br_wh *arg; ++ ++ do_dec = 1; ++ if (atomic_inc_return(&br->br_wbr->wbr_wh_running) != 1) ++ goto out; ++ ++ /* ignore ENOMEM */ ++ arg = kmalloc(sizeof(*arg), GFP_NOFS); ++ if (arg) { ++ /* ++ * dec(wh_running), kfree(arg) and dec(br_count) ++ * in reinit function ++ */ ++ arg->sb = sb; ++ arg->br = br; ++ atomic_inc(&br->br_count); ++ wkq_err = au_wkq_nowait(reinit_br_wh, arg, sb); ++ if (unlikely(wkq_err)) { ++ atomic_dec(&br->br_wbr->wbr_wh_running); ++ atomic_dec(&br->br_count); ++ kfree(arg); ++ } ++ do_dec = 0; ++ } ++ ++out: ++ if (do_dec) ++ atomic_dec(&br->br_wbr->wbr_wh_running); ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* ++ * create the whiteout @wh. ++ */ ++static int link_or_create_wh(struct super_block *sb, aufs_bindex_t bindex, ++ struct dentry *wh) ++{ ++ int err; ++ struct path h_path = { ++ .dentry = wh ++ }; ++ struct au_branch *br; ++ struct au_wbr *wbr; ++ struct dentry *h_parent; ++ struct inode *h_dir; ++ ++ h_parent = wh->d_parent; /* dir inode is locked */ ++ h_dir = h_parent->d_inode; ++ IMustLock(h_dir); ++ ++ br = au_sbr(sb, bindex); ++ h_path.mnt = br->br_mnt; ++ wbr = br->br_wbr; ++ wbr_wh_read_lock(wbr); ++ if (wbr->wbr_whbase) { ++ err = vfsub_link(wbr->wbr_whbase, h_dir, &h_path); ++ if (!err || err != -EMLINK) ++ goto out; ++ ++ /* link count full. re-initialize br_whbase. */ ++ kick_reinit_br_wh(sb, br); ++ } ++ ++ /* return this error in this context */ ++ err = vfsub_create(h_dir, &h_path, WH_MASK); ++ ++out: ++ wbr_wh_read_unlock(wbr); ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* ++ * create or remove the diropq. ++ */ ++static struct dentry *do_diropq(struct dentry *dentry, aufs_bindex_t bindex, ++ unsigned int flags) ++{ ++ struct dentry *opq_dentry, *h_dentry; ++ struct super_block *sb; ++ struct au_branch *br; ++ int err; ++ ++ sb = dentry->d_sb; ++ br = au_sbr(sb, bindex); ++ h_dentry = au_h_dptr(dentry, bindex); ++ opq_dentry = au_lkup_one(&diropq_name, h_dentry, br, /*nd*/NULL); ++ if (IS_ERR(opq_dentry)) ++ goto out; ++ ++ if (au_ftest_diropq(flags, CREATE)) { ++ err = link_or_create_wh(sb, bindex, opq_dentry); ++ if (!err) { ++ au_set_dbdiropq(dentry, bindex); ++ goto out; /* success */ ++ } ++ } else { ++ struct path tmp = { ++ .dentry = opq_dentry, ++ .mnt = br->br_mnt ++ }; ++ err = do_unlink_wh(au_h_iptr(dentry->d_inode, bindex), &tmp); ++ if (!err) ++ au_set_dbdiropq(dentry, -1); ++ } ++ dput(opq_dentry); ++ opq_dentry = ERR_PTR(err); ++ ++out: ++ return opq_dentry; ++} ++ ++struct do_diropq_args { ++ struct dentry **errp; ++ struct dentry *dentry; ++ aufs_bindex_t bindex; ++ unsigned int flags; ++}; ++ ++static void call_do_diropq(void *args) ++{ ++ struct do_diropq_args *a = args; ++ *a->errp = do_diropq(a->dentry, a->bindex, a->flags); ++} ++ ++struct dentry *au_diropq_sio(struct dentry *dentry, aufs_bindex_t bindex, ++ unsigned int flags) ++{ ++ struct dentry *diropq, *h_dentry; ++ ++ h_dentry = au_h_dptr(dentry, bindex); ++ if (!au_test_h_perm_sio(h_dentry->d_inode, MAY_EXEC | MAY_WRITE)) ++ diropq = do_diropq(dentry, bindex, flags); ++ else { ++ int wkq_err; ++ struct do_diropq_args args = { ++ .errp = &diropq, ++ .dentry = dentry, ++ .bindex = bindex, ++ .flags = flags ++ }; ++ ++ wkq_err = au_wkq_wait(call_do_diropq, &args); ++ if (unlikely(wkq_err)) ++ diropq = ERR_PTR(wkq_err); ++ } ++ ++ return diropq; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* ++ * lookup whiteout dentry. ++ * @h_parent: lower parent dentry which must exist and be locked ++ * @base_name: name of dentry which will be whiteouted ++ * returns dentry for whiteout. ++ */ ++struct dentry *au_wh_lkup(struct dentry *h_parent, struct qstr *base_name, ++ struct au_branch *br) ++{ ++ int err; ++ struct qstr wh_name; ++ struct dentry *wh_dentry; ++ ++ err = au_wh_name_alloc(&wh_name, base_name); ++ wh_dentry = ERR_PTR(err); ++ if (!err) { ++ wh_dentry = au_lkup_one(&wh_name, h_parent, br, /*nd*/NULL); ++ kfree(wh_name.name); ++ } ++ return wh_dentry; ++} ++ ++/* ++ * link/create a whiteout for @dentry on @bindex. ++ */ ++struct dentry *au_wh_create(struct dentry *dentry, aufs_bindex_t bindex, ++ struct dentry *h_parent) ++{ ++ struct dentry *wh_dentry; ++ struct super_block *sb; ++ int err; ++ ++ sb = dentry->d_sb; ++ wh_dentry = au_wh_lkup(h_parent, &dentry->d_name, au_sbr(sb, bindex)); ++ if (!IS_ERR(wh_dentry) && !wh_dentry->d_inode) { ++ err = link_or_create_wh(sb, bindex, wh_dentry); ++ if (!err) ++ au_set_dbwh(dentry, bindex); ++ else { ++ dput(wh_dentry); ++ wh_dentry = ERR_PTR(err); ++ } ++ } ++ ++ return wh_dentry; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* Delete all whiteouts in this directory on branch bindex. */ ++static int del_wh_children(struct dentry *h_dentry, struct au_nhash *whlist, ++ aufs_bindex_t bindex, struct au_branch *br) ++{ ++ int err; ++ unsigned long ul, n; ++ struct qstr wh_name; ++ char *p; ++ struct hlist_head *head; ++ struct au_vdir_wh *tpos; ++ struct hlist_node *pos; ++ struct au_vdir_destr *str; ++ ++ err = -ENOMEM; ++ p = __getname_gfp(GFP_NOFS); ++ wh_name.name = p; ++ if (unlikely(!wh_name.name)) ++ goto out; ++ ++ err = 0; ++ memcpy(p, AUFS_WH_PFX, AUFS_WH_PFX_LEN); ++ p += AUFS_WH_PFX_LEN; ++ n = whlist->nh_num; ++ head = whlist->nh_head; ++ for (ul = 0; !err && ul < n; ul++, head++) { ++ hlist_for_each_entry(tpos, pos, head, wh_hash) { ++ if (tpos->wh_bindex != bindex) ++ continue; ++ ++ str = &tpos->wh_str; ++ if (str->len + AUFS_WH_PFX_LEN <= PATH_MAX) { ++ memcpy(p, str->name, str->len); ++ wh_name.len = AUFS_WH_PFX_LEN + str->len; ++ err = unlink_wh_name(h_dentry, &wh_name, br); ++ if (!err) ++ continue; ++ break; ++ } ++ AuIOErr("whiteout name too long %.*s\n", ++ str->len, str->name); ++ err = -EIO; ++ break; ++ } ++ } ++ __putname(wh_name.name); ++ ++out: ++ return err; ++} ++ ++struct del_wh_children_args { ++ int *errp; ++ struct dentry *h_dentry; ++ struct au_nhash *whlist; ++ aufs_bindex_t bindex; ++ struct au_branch *br; ++}; ++ ++static void call_del_wh_children(void *args) ++{ ++ struct del_wh_children_args *a = args; ++ *a->errp = del_wh_children(a->h_dentry, a->whlist, a->bindex, a->br); ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++struct au_whtmp_rmdir *au_whtmp_rmdir_alloc(struct super_block *sb, gfp_t gfp) ++{ ++ struct au_whtmp_rmdir *whtmp; ++ int err; ++ unsigned int rdhash; ++ ++ SiMustAnyLock(sb); ++ ++ whtmp = kmalloc(sizeof(*whtmp), gfp); ++ if (unlikely(!whtmp)) { ++ whtmp = ERR_PTR(-ENOMEM); ++ goto out; ++ } ++ ++ whtmp->dir = NULL; ++ whtmp->br = NULL; ++ whtmp->wh_dentry = NULL; ++ /* no estimation for dir size */ ++ rdhash = au_sbi(sb)->si_rdhash; ++ if (!rdhash) ++ rdhash = AUFS_RDHASH_DEF; ++ err = au_nhash_alloc(&whtmp->whlist, rdhash, gfp); ++ if (unlikely(err)) { ++ kfree(whtmp); ++ whtmp = ERR_PTR(err); ++ } ++ ++out: ++ return whtmp; ++} ++ ++void au_whtmp_rmdir_free(struct au_whtmp_rmdir *whtmp) ++{ ++ if (whtmp->br) ++ atomic_dec(&whtmp->br->br_count); ++ dput(whtmp->wh_dentry); ++ iput(whtmp->dir); ++ au_nhash_wh_free(&whtmp->whlist); ++ kfree(whtmp); ++} ++ ++/* ++ * rmdir the whiteouted temporary named dir @h_dentry. ++ * @whlist: whiteouted children. ++ */ ++int au_whtmp_rmdir(struct inode *dir, aufs_bindex_t bindex, ++ struct dentry *wh_dentry, struct au_nhash *whlist) ++{ ++ int err; ++ struct path h_tmp; ++ struct inode *wh_inode, *h_dir; ++ struct au_branch *br; ++ ++ h_dir = wh_dentry->d_parent->d_inode; /* dir inode is locked */ ++ IMustLock(h_dir); ++ ++ br = au_sbr(dir->i_sb, bindex); ++ wh_inode = wh_dentry->d_inode; ++ mutex_lock_nested(&wh_inode->i_mutex, AuLsc_I_CHILD); ++ ++ /* ++ * someone else might change some whiteouts while we were sleeping. ++ * it means this whlist may have an obsoleted entry. ++ */ ++ if (!au_test_h_perm_sio(wh_inode, MAY_EXEC | MAY_WRITE)) ++ err = del_wh_children(wh_dentry, whlist, bindex, br); ++ else { ++ int wkq_err; ++ struct del_wh_children_args args = { ++ .errp = &err, ++ .h_dentry = wh_dentry, ++ .whlist = whlist, ++ .bindex = bindex, ++ .br = br ++ }; ++ ++ wkq_err = au_wkq_wait(call_del_wh_children, &args); ++ if (unlikely(wkq_err)) ++ err = wkq_err; ++ } ++ mutex_unlock(&wh_inode->i_mutex); ++ ++ if (!err) { ++ h_tmp.dentry = wh_dentry; ++ h_tmp.mnt = br->br_mnt; ++ err = vfsub_rmdir(h_dir, &h_tmp); ++ } ++ ++ if (!err) { ++ if (au_ibstart(dir) == bindex) { ++ /* todo: dir->i_mutex is necessary */ ++ au_cpup_attr_timesizes(dir); ++ vfsub_drop_nlink(dir); ++ } ++ return 0; /* success */ ++ } ++ ++ pr_warning("failed removing %.*s(%d), ignored\n", ++ AuDLNPair(wh_dentry), err); ++ return err; ++} ++ ++static void call_rmdir_whtmp(void *args) ++{ ++ int err; ++ aufs_bindex_t bindex; ++ struct au_whtmp_rmdir *a = args; ++ struct super_block *sb; ++ struct dentry *h_parent; ++ struct inode *h_dir; ++ struct au_hinode *hdir; ++ ++ /* rmdir by nfsd may cause deadlock with this i_mutex */ ++ /* mutex_lock(&a->dir->i_mutex); */ ++ err = -EROFS; ++ sb = a->dir->i_sb; ++ si_read_lock(sb, !AuLock_FLUSH); ++ if (!au_br_writable(a->br->br_perm)) ++ goto out; ++ bindex = au_br_index(sb, a->br->br_id); ++ if (unlikely(bindex < 0)) ++ goto out; ++ ++ err = -EIO; ++ ii_write_lock_parent(a->dir); ++ h_parent = dget_parent(a->wh_dentry); ++ h_dir = h_parent->d_inode; ++ hdir = au_hi(a->dir, bindex); ++ au_hn_imtx_lock_nested(hdir, AuLsc_I_PARENT); ++ err = au_h_verify(a->wh_dentry, au_opt_udba(sb), h_dir, h_parent, ++ a->br); ++ if (!err) { ++ err = mnt_want_write(a->br->br_mnt); ++ if (!err) { ++ err = au_whtmp_rmdir(a->dir, bindex, a->wh_dentry, ++ &a->whlist); ++ mnt_drop_write(a->br->br_mnt); ++ } ++ } ++ au_hn_imtx_unlock(hdir); ++ dput(h_parent); ++ ii_write_unlock(a->dir); ++ ++out: ++ /* mutex_unlock(&a->dir->i_mutex); */ ++ au_whtmp_rmdir_free(a); ++ si_read_unlock(sb); ++ au_nwt_done(&au_sbi(sb)->si_nowait); ++ if (unlikely(err)) ++ AuIOErr("err %d\n", err); ++} ++ ++void au_whtmp_kick_rmdir(struct inode *dir, aufs_bindex_t bindex, ++ struct dentry *wh_dentry, struct au_whtmp_rmdir *args) ++{ ++ int wkq_err; ++ struct super_block *sb; ++ ++ IMustLock(dir); ++ ++ /* all post-process will be done in do_rmdir_whtmp(). */ ++ sb = dir->i_sb; ++ args->dir = au_igrab(dir); ++ args->br = au_sbr(sb, bindex); ++ atomic_inc(&args->br->br_count); ++ args->wh_dentry = dget(wh_dentry); ++ wkq_err = au_wkq_nowait(call_rmdir_whtmp, args, sb); ++ if (unlikely(wkq_err)) { ++ pr_warning("rmdir error %.*s (%d), ignored\n", ++ AuDLNPair(wh_dentry), wkq_err); ++ au_whtmp_rmdir_free(args); ++ } ++} +diff -urN a/fs/aufs/whout.h b/fs/aufs/whout.h +--- a/fs/aufs/whout.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/whout.h 2011-03-06 23:28:02.616413258 +0000 +@@ -0,0 +1,89 @@ ++/* ++ * Copyright (C) 2005-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * whiteout for logical deletion and opaque directory ++ */ ++ ++#ifndef __AUFS_WHOUT_H__ ++#define __AUFS_WHOUT_H__ ++ ++#ifdef __KERNEL__ ++ ++#include ++#include "dir.h" ++ ++/* whout.c */ ++int au_wh_name_alloc(struct qstr *wh, const struct qstr *name); ++struct au_branch; ++int au_wh_test(struct dentry *h_parent, struct qstr *wh_name, ++ struct au_branch *br, int try_sio); ++int au_diropq_test(struct dentry *h_dentry, struct au_branch *br); ++struct dentry *au_whtmp_lkup(struct dentry *h_parent, struct au_branch *br, ++ struct qstr *prefix); ++int au_whtmp_ren(struct dentry *h_dentry, struct au_branch *br); ++int au_wh_unlink_dentry(struct inode *h_dir, struct path *h_path, ++ struct dentry *dentry); ++int au_wh_init(struct dentry *h_parent, struct au_branch *br, ++ struct super_block *sb); ++ ++/* diropq flags */ ++#define AuDiropq_CREATE 1 ++#define au_ftest_diropq(flags, name) ((flags) & AuDiropq_##name) ++#define au_fset_diropq(flags, name) \ ++ do { (flags) |= AuDiropq_##name; } while (0) ++#define au_fclr_diropq(flags, name) \ ++ do { (flags) &= ~AuDiropq_##name; } while (0) ++ ++struct dentry *au_diropq_sio(struct dentry *dentry, aufs_bindex_t bindex, ++ unsigned int flags); ++struct dentry *au_wh_lkup(struct dentry *h_parent, struct qstr *base_name, ++ struct au_branch *br); ++struct dentry *au_wh_create(struct dentry *dentry, aufs_bindex_t bindex, ++ struct dentry *h_parent); ++ ++/* real rmdir for the whiteout-ed dir */ ++struct au_whtmp_rmdir { ++ struct inode *dir; ++ struct au_branch *br; ++ struct dentry *wh_dentry; ++ struct au_nhash whlist; ++}; ++ ++struct au_whtmp_rmdir *au_whtmp_rmdir_alloc(struct super_block *sb, gfp_t gfp); ++void au_whtmp_rmdir_free(struct au_whtmp_rmdir *whtmp); ++int au_whtmp_rmdir(struct inode *dir, aufs_bindex_t bindex, ++ struct dentry *wh_dentry, struct au_nhash *whlist); ++void au_whtmp_kick_rmdir(struct inode *dir, aufs_bindex_t bindex, ++ struct dentry *wh_dentry, struct au_whtmp_rmdir *args); ++ ++/* ---------------------------------------------------------------------- */ ++ ++static inline struct dentry *au_diropq_create(struct dentry *dentry, ++ aufs_bindex_t bindex) ++{ ++ return au_diropq_sio(dentry, bindex, AuDiropq_CREATE); ++} ++ ++static inline int au_diropq_remove(struct dentry *dentry, aufs_bindex_t bindex) ++{ ++ return PTR_ERR(au_diropq_sio(dentry, bindex, !AuDiropq_CREATE)); ++} ++ ++#endif /* __KERNEL__ */ ++#endif /* __AUFS_WHOUT_H__ */ +diff -urN a/fs/aufs/wkq.c b/fs/aufs/wkq.c +--- a/fs/aufs/wkq.c 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/wkq.c 2011-03-06 23:28:02.620413138 +0000 +@@ -0,0 +1,236 @@ ++/* ++ * Copyright (C) 2005-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * workqueue for asynchronous/super-io operations ++ * todo: try new dredential scheme ++ */ ++ ++#include ++#include "aufs.h" ++ ++/* internal workqueue named AUFS_WKQ_NAME and AUFS_WKQ_PRE_NAME */ ++enum { ++ AuWkq_INORMAL, ++ AuWkq_IPRE ++}; ++ ++static struct { ++ char *name; ++ struct workqueue_struct *wkq; ++} au_wkq[] = { ++ [AuWkq_INORMAL] = { ++ .name = AUFS_WKQ_NAME ++ }, ++ [AuWkq_IPRE] = { ++ .name = AUFS_WKQ_PRE_NAME ++ } ++}; ++ ++struct au_wkinfo { ++ struct work_struct wk; ++ struct kobject *kobj; ++ ++ unsigned int flags; /* see wkq.h */ ++ ++ au_wkq_func_t func; ++ void *args; ++ ++ struct completion *comp; ++}; ++ ++/* ---------------------------------------------------------------------- */ ++ ++static void wkq_func(struct work_struct *wk) ++{ ++ struct au_wkinfo *wkinfo = container_of(wk, struct au_wkinfo, wk); ++ ++ AuDebugOn(current_fsuid()); ++ AuDebugOn(rlimit(RLIMIT_FSIZE) != RLIM_INFINITY); ++ ++ wkinfo->func(wkinfo->args); ++ if (au_ftest_wkq(wkinfo->flags, WAIT)) ++ complete(wkinfo->comp); ++ else { ++ kobject_put(wkinfo->kobj); ++ module_put(THIS_MODULE); ++ kfree(wkinfo); ++ } ++} ++ ++/* ++ * Since struct completion is large, try allocating it dynamically. ++ */ ++#if defined(CONFIG_4KSTACKS) || defined(AuTest4KSTACKS) ++#define AuWkqCompDeclare(name) struct completion *comp = NULL ++ ++static int au_wkq_comp_alloc(struct au_wkinfo *wkinfo, struct completion **comp) ++{ ++ *comp = kmalloc(sizeof(**comp), GFP_NOFS); ++ if (*comp) { ++ init_completion(*comp); ++ wkinfo->comp = *comp; ++ return 0; ++ } ++ return -ENOMEM; ++} ++ ++static void au_wkq_comp_free(struct completion *comp) ++{ ++ kfree(comp); ++} ++ ++#else ++ ++/* no braces */ ++#define AuWkqCompDeclare(name) \ ++ DECLARE_COMPLETION_ONSTACK(_ ## name); \ ++ struct completion *comp = &_ ## name ++ ++static int au_wkq_comp_alloc(struct au_wkinfo *wkinfo, struct completion **comp) ++{ ++ wkinfo->comp = *comp; ++ return 0; ++} ++ ++static void au_wkq_comp_free(struct completion *comp __maybe_unused) ++{ ++ /* empty */ ++} ++#endif /* 4KSTACKS */ ++ ++static void au_wkq_run(struct au_wkinfo *wkinfo, unsigned int flags) ++{ ++ struct workqueue_struct *wkq; ++ ++ au_dbg_verify_kthread(); ++ if (flags & AuWkq_WAIT) { ++ INIT_WORK_ONSTACK(&wkinfo->wk, wkq_func); ++ wkq = au_wkq[AuWkq_INORMAL].wkq; ++ if (flags & AuWkq_PRE) ++ wkq = au_wkq[AuWkq_IPRE].wkq; ++ queue_work(wkq, &wkinfo->wk); ++ } else { ++ INIT_WORK(&wkinfo->wk, wkq_func); ++ schedule_work(&wkinfo->wk); ++ } ++} ++ ++/* ++ * Be careful. It is easy to make deadlock happen. ++ * processA: lock, wkq and wait ++ * processB: wkq and wait, lock in wkq ++ * --> deadlock ++ */ ++int au_wkq_do_wait(unsigned int flags, au_wkq_func_t func, void *args) ++{ ++ int err; ++ AuWkqCompDeclare(comp); ++ struct au_wkinfo wkinfo = { ++ .flags = flags, ++ .func = func, ++ .args = args ++ }; ++ ++ err = au_wkq_comp_alloc(&wkinfo, &comp); ++ if (!err) { ++ au_wkq_run(&wkinfo, flags); ++ /* no timeout, no interrupt */ ++ wait_for_completion(wkinfo.comp); ++ au_wkq_comp_free(comp); ++ destroy_work_on_stack(&wkinfo.wk); ++ } ++ ++ return err; ++ ++} ++ ++/* ++ * Note: dget/dput() in func for aufs dentries are not supported. It will be a ++ * problem in a concurrent umounting. ++ */ ++int au_wkq_nowait(au_wkq_func_t func, void *args, struct super_block *sb) ++{ ++ int err; ++ struct au_wkinfo *wkinfo; ++ ++ atomic_inc(&au_sbi(sb)->si_nowait.nw_len); ++ ++ /* ++ * wkq_func() must free this wkinfo. ++ * it highly depends upon the implementation of workqueue. ++ */ ++ err = 0; ++ wkinfo = kmalloc(sizeof(*wkinfo), GFP_NOFS); ++ if (wkinfo) { ++ wkinfo->kobj = &au_sbi(sb)->si_kobj; ++ wkinfo->flags = !AuWkq_WAIT; ++ wkinfo->func = func; ++ wkinfo->args = args; ++ wkinfo->comp = NULL; ++ kobject_get(wkinfo->kobj); ++ __module_get(THIS_MODULE); ++ ++ au_wkq_run(wkinfo, !AuWkq_WAIT); ++ } else { ++ err = -ENOMEM; ++ au_nwt_done(&au_sbi(sb)->si_nowait); ++ } ++ ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++void au_nwt_init(struct au_nowait_tasks *nwt) ++{ ++ atomic_set(&nwt->nw_len, 0); ++ /* smp_mb(); */ /* atomic_set */ ++ init_waitqueue_head(&nwt->nw_wq); ++} ++ ++void au_wkq_fin(void) ++{ ++ int i; ++ ++ for (i = 0; i < ARRAY_SIZE(au_wkq); i++) ++ if (au_wkq[i].wkq) ++ destroy_workqueue(au_wkq[i].wkq); ++} ++ ++int __init au_wkq_init(void) ++{ ++ int err, i; ++ ++ err = 0; ++ for (i = 0; !err && i < ARRAY_SIZE(au_wkq); i++) { ++ BUILD_BUG_ON(!WQ_RESCUER); ++ au_wkq[i].wkq = alloc_workqueue(au_wkq[i].name, !WQ_RESCUER, ++ WQ_DFL_ACTIVE); ++ if (IS_ERR(au_wkq[i].wkq)) ++ err = PTR_ERR(au_wkq[i].wkq); ++ else if (!au_wkq[i].wkq) ++ err = -ENOMEM; ++ if (unlikely(err)) ++ au_wkq[i].wkq = NULL; ++ } ++ if (unlikely(err)) ++ au_wkq_fin(); ++ ++ return err; ++} +diff -urN a/fs/aufs/wkq.h b/fs/aufs/wkq.h +--- a/fs/aufs/wkq.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/wkq.h 2011-03-06 23:28:02.616413258 +0000 +@@ -0,0 +1,90 @@ ++/* ++ * Copyright (C) 2005-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * workqueue for asynchronous/super-io operations ++ * todo: try new credentials management scheme ++ */ ++ ++#ifndef __AUFS_WKQ_H__ ++#define __AUFS_WKQ_H__ ++ ++#ifdef __KERNEL__ ++ ++#include ++#include ++#include ++ ++struct super_block; ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* ++ * in the next operation, wait for the 'nowait' tasks in system-wide workqueue ++ */ ++struct au_nowait_tasks { ++ atomic_t nw_len; ++ wait_queue_head_t nw_wq; ++}; ++ ++/* ---------------------------------------------------------------------- */ ++ ++typedef void (*au_wkq_func_t)(void *args); ++ ++/* wkq flags */ ++#define AuWkq_WAIT 1 ++#define AuWkq_PRE (1 << 1) ++#define au_ftest_wkq(flags, name) ((flags) & AuWkq_##name) ++#define au_fset_wkq(flags, name) \ ++ do { (flags) |= AuWkq_##name; } while (0) ++#define au_fclr_wkq(flags, name) \ ++ do { (flags) &= ~AuWkq_##name; } while (0) ++ ++/* wkq.c */ ++int au_wkq_do_wait(unsigned int flags, au_wkq_func_t func, void *args); ++int au_wkq_nowait(au_wkq_func_t func, void *args, struct super_block *sb); ++void au_nwt_init(struct au_nowait_tasks *nwt); ++int __init au_wkq_init(void); ++void au_wkq_fin(void); ++ ++/* ---------------------------------------------------------------------- */ ++ ++static inline int au_wkq_wait_pre(au_wkq_func_t func, void *args) ++{ ++ return au_wkq_do_wait(AuWkq_WAIT | AuWkq_PRE, func, args); ++} ++ ++static inline int au_wkq_wait(au_wkq_func_t func, void *args) ++{ ++ return au_wkq_do_wait(AuWkq_WAIT, func, args); ++} ++ ++static inline void au_nwt_done(struct au_nowait_tasks *nwt) ++{ ++ if (atomic_dec_and_test(&nwt->nw_len)) ++ wake_up_all(&nwt->nw_wq); ++} ++ ++static inline int au_nwt_flush(struct au_nowait_tasks *nwt) ++{ ++ wait_event(nwt->nw_wq, !atomic_read(&nwt->nw_len)); ++ return 0; ++} ++ ++#endif /* __KERNEL__ */ ++#endif /* __AUFS_WKQ_H__ */ +diff -urN a/fs/aufs/xino.c b/fs/aufs/xino.c +--- a/fs/aufs/xino.c 1970-01-01 01:00:00.000000000 +0100 ++++ b/fs/aufs/xino.c 2011-03-06 23:28:02.616413258 +0000 +@@ -0,0 +1,1265 @@ ++/* ++ * Copyright (C) 2005-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/* ++ * external inode number translation table and bitmap ++ */ ++ ++#include ++#include ++#include ++#include "aufs.h" ++ ++ssize_t xino_fread(au_readf_t func, struct file *file, void *kbuf, size_t size, ++ loff_t *pos) ++{ ++ ssize_t err; ++ mm_segment_t oldfs; ++ union { ++ void *k; ++ char __user *u; ++ } buf; ++ ++ buf.k = kbuf; ++ oldfs = get_fs(); ++ set_fs(KERNEL_DS); ++ do { ++ /* todo: signal_pending? */ ++ err = func(file, buf.u, size, pos); ++ } while (err == -EAGAIN || err == -EINTR); ++ set_fs(oldfs); ++ ++#if 0 /* reserved for future use */ ++ if (err > 0) ++ fsnotify_access(file->f_dentry); ++#endif ++ ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++static ssize_t do_xino_fwrite(au_writef_t func, struct file *file, void *kbuf, ++ size_t size, loff_t *pos) ++{ ++ ssize_t err; ++ mm_segment_t oldfs; ++ union { ++ void *k; ++ const char __user *u; ++ } buf; ++ ++ buf.k = kbuf; ++ oldfs = get_fs(); ++ set_fs(KERNEL_DS); ++ do { ++ /* todo: signal_pending? */ ++ err = func(file, buf.u, size, pos); ++ } while (err == -EAGAIN || err == -EINTR); ++ set_fs(oldfs); ++ ++#if 0 /* reserved for future use */ ++ if (err > 0) ++ fsnotify_modify(file->f_dentry); ++#endif ++ ++ return err; ++} ++ ++struct do_xino_fwrite_args { ++ ssize_t *errp; ++ au_writef_t func; ++ struct file *file; ++ void *buf; ++ size_t size; ++ loff_t *pos; ++}; ++ ++static void call_do_xino_fwrite(void *args) ++{ ++ struct do_xino_fwrite_args *a = args; ++ *a->errp = do_xino_fwrite(a->func, a->file, a->buf, a->size, a->pos); ++} ++ ++ssize_t xino_fwrite(au_writef_t func, struct file *file, void *buf, size_t size, ++ loff_t *pos) ++{ ++ ssize_t err; ++ ++ /* todo: signal block and no wkq? */ ++ if (rlimit(RLIMIT_FSIZE) == RLIM_INFINITY) { ++ lockdep_off(); ++ err = do_xino_fwrite(func, file, buf, size, pos); ++ lockdep_on(); ++ } else { ++ /* ++ * it breaks RLIMIT_FSIZE and normal user's limit, ++ * users should care about quota and real 'filesystem full.' ++ */ ++ int wkq_err; ++ struct do_xino_fwrite_args args = { ++ .errp = &err, ++ .func = func, ++ .file = file, ++ .buf = buf, ++ .size = size, ++ .pos = pos ++ }; ++ ++ wkq_err = au_wkq_wait(call_do_xino_fwrite, &args); ++ if (unlikely(wkq_err)) ++ err = wkq_err; ++ } ++ ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* ++ * create a new xinofile at the same place/path as @base_file. ++ */ ++struct file *au_xino_create2(struct file *base_file, struct file *copy_src) ++{ ++ struct file *file; ++ struct dentry *base, *parent; ++ struct inode *dir; ++ struct qstr *name; ++ struct path path; ++ int err; ++ ++ base = base_file->f_dentry; ++ parent = base->d_parent; /* dir inode is locked */ ++ dir = parent->d_inode; ++ IMustLock(dir); ++ ++ file = ERR_PTR(-EINVAL); ++ name = &base->d_name; ++ path.dentry = vfsub_lookup_one_len(name->name, parent, name->len); ++ if (IS_ERR(path.dentry)) { ++ file = (void *)path.dentry; ++ pr_err("%.*s lookup err %ld\n", ++ AuLNPair(name), PTR_ERR(path.dentry)); ++ goto out; ++ } ++ ++ /* no need to mnt_want_write() since we call dentry_open() later */ ++ err = vfs_create(dir, path.dentry, S_IRUGO | S_IWUGO, NULL); ++ if (unlikely(err)) { ++ file = ERR_PTR(err); ++ pr_err("%.*s create err %d\n", AuLNPair(name), err); ++ goto out_dput; ++ } ++ ++ path.mnt = base_file->f_vfsmnt; ++ file = vfsub_dentry_open(&path, ++ O_RDWR | O_CREAT | O_EXCL | O_LARGEFILE ++ /* | FMODE_NONOTIFY */); ++ if (IS_ERR(file)) { ++ pr_err("%.*s open err %ld\n", AuLNPair(name), PTR_ERR(file)); ++ goto out_dput; ++ } ++ ++ err = vfsub_unlink(dir, &file->f_path, /*force*/0); ++ if (unlikely(err)) { ++ pr_err("%.*s unlink err %d\n", AuLNPair(name), err); ++ goto out_fput; ++ } ++ ++ if (copy_src) { ++ /* no one can touch copy_src xino */ ++ err = au_copy_file(file, copy_src, ++ i_size_read(copy_src->f_dentry->d_inode)); ++ if (unlikely(err)) { ++ pr_err("%.*s copy err %d\n", AuLNPair(name), err); ++ goto out_fput; ++ } ++ } ++ goto out_dput; /* success */ ++ ++out_fput: ++ fput(file); ++ file = ERR_PTR(err); ++out_dput: ++ dput(path.dentry); ++out: ++ return file; ++} ++ ++struct au_xino_lock_dir { ++ struct au_hinode *hdir; ++ struct dentry *parent; ++ struct mutex *mtx; ++}; ++ ++static void au_xino_lock_dir(struct super_block *sb, struct file *xino, ++ struct au_xino_lock_dir *ldir) ++{ ++ aufs_bindex_t brid, bindex; ++ ++ ldir->hdir = NULL; ++ bindex = -1; ++ brid = au_xino_brid(sb); ++ if (brid >= 0) ++ bindex = au_br_index(sb, brid); ++ if (bindex >= 0) { ++ ldir->hdir = au_hi(sb->s_root->d_inode, bindex); ++ au_hn_imtx_lock_nested(ldir->hdir, AuLsc_I_PARENT); ++ } else { ++ ldir->parent = dget_parent(xino->f_dentry); ++ ldir->mtx = &ldir->parent->d_inode->i_mutex; ++ mutex_lock_nested(ldir->mtx, AuLsc_I_PARENT); ++ } ++} ++ ++static void au_xino_unlock_dir(struct au_xino_lock_dir *ldir) ++{ ++ if (ldir->hdir) ++ au_hn_imtx_unlock(ldir->hdir); ++ else { ++ mutex_unlock(ldir->mtx); ++ dput(ldir->parent); ++ } ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* trucate xino files asynchronously */ ++ ++int au_xino_trunc(struct super_block *sb, aufs_bindex_t bindex) ++{ ++ int err; ++ aufs_bindex_t bi, bend; ++ struct au_branch *br; ++ struct file *new_xino, *file; ++ struct super_block *h_sb; ++ struct au_xino_lock_dir ldir; ++ ++ err = -EINVAL; ++ bend = au_sbend(sb); ++ if (unlikely(bindex < 0 || bend < bindex)) ++ goto out; ++ br = au_sbr(sb, bindex); ++ file = br->br_xino.xi_file; ++ if (!file) ++ goto out; ++ ++ au_xino_lock_dir(sb, file, &ldir); ++ /* mnt_want_write() is unnecessary here */ ++ new_xino = au_xino_create2(file, file); ++ au_xino_unlock_dir(&ldir); ++ err = PTR_ERR(new_xino); ++ if (IS_ERR(new_xino)) ++ goto out; ++ err = 0; ++ fput(file); ++ br->br_xino.xi_file = new_xino; ++ ++ h_sb = br->br_mnt->mnt_sb; ++ for (bi = 0; bi <= bend; bi++) { ++ if (unlikely(bi == bindex)) ++ continue; ++ br = au_sbr(sb, bi); ++ if (br->br_mnt->mnt_sb != h_sb) ++ continue; ++ ++ fput(br->br_xino.xi_file); ++ br->br_xino.xi_file = new_xino; ++ get_file(new_xino); ++ } ++ ++out: ++ return err; ++} ++ ++struct xino_do_trunc_args { ++ struct super_block *sb; ++ struct au_branch *br; ++}; ++ ++static void xino_do_trunc(void *_args) ++{ ++ struct xino_do_trunc_args *args = _args; ++ struct super_block *sb; ++ struct au_branch *br; ++ struct inode *dir; ++ int err; ++ aufs_bindex_t bindex; ++ ++ err = 0; ++ sb = args->sb; ++ dir = sb->s_root->d_inode; ++ br = args->br; ++ ++ si_noflush_write_lock(sb); ++ ii_read_lock_parent(dir); ++ bindex = au_br_index(sb, br->br_id); ++ err = au_xino_trunc(sb, bindex); ++ if (!err ++ && br->br_xino.xi_file->f_dentry->d_inode->i_blocks ++ >= br->br_xino_upper) ++ br->br_xino_upper += AUFS_XINO_TRUNC_STEP; ++ ++ ii_read_unlock(dir); ++ if (unlikely(err)) ++ pr_warning("err b%d, (%d)\n", bindex, err); ++ atomic_dec(&br->br_xino_running); ++ atomic_dec(&br->br_count); ++ si_write_unlock(sb); ++ au_nwt_done(&au_sbi(sb)->si_nowait); ++ kfree(args); ++} ++ ++static void xino_try_trunc(struct super_block *sb, struct au_branch *br) ++{ ++ struct xino_do_trunc_args *args; ++ int wkq_err; ++ ++ if (br->br_xino.xi_file->f_dentry->d_inode->i_blocks ++ < br->br_xino_upper) ++ return; ++ ++ if (atomic_inc_return(&br->br_xino_running) > 1) ++ goto out; ++ ++ /* lock and kfree() will be called in trunc_xino() */ ++ args = kmalloc(sizeof(*args), GFP_NOFS); ++ if (unlikely(!args)) { ++ AuErr1("no memory\n"); ++ goto out_args; ++ } ++ ++ atomic_inc(&br->br_count); ++ args->sb = sb; ++ args->br = br; ++ wkq_err = au_wkq_nowait(xino_do_trunc, args, sb); ++ if (!wkq_err) ++ return; /* success */ ++ ++ pr_err("wkq %d\n", wkq_err); ++ atomic_dec(&br->br_count); ++ ++out_args: ++ kfree(args); ++out: ++ atomic_dec(&br->br_xino_running); ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++static int au_xino_do_write(au_writef_t write, struct file *file, ++ ino_t h_ino, ino_t ino) ++{ ++ loff_t pos; ++ ssize_t sz; ++ ++ pos = h_ino; ++ if (unlikely(au_loff_max / sizeof(ino) - 1 < pos)) { ++ AuIOErr1("too large hi%lu\n", (unsigned long)h_ino); ++ return -EFBIG; ++ } ++ pos *= sizeof(ino); ++ sz = xino_fwrite(write, file, &ino, sizeof(ino), &pos); ++ if (sz == sizeof(ino)) ++ return 0; /* success */ ++ ++ AuIOErr("write failed (%zd)\n", sz); ++ return -EIO; ++} ++ ++/* ++ * write @ino to the xinofile for the specified branch{@sb, @bindex} ++ * at the position of @h_ino. ++ * even if @ino is zero, it is written to the xinofile and means no entry. ++ * if the size of the xino file on a specific filesystem exceeds the watermark, ++ * try truncating it. ++ */ ++int au_xino_write(struct super_block *sb, aufs_bindex_t bindex, ino_t h_ino, ++ ino_t ino) ++{ ++ int err; ++ unsigned int mnt_flags; ++ struct au_branch *br; ++ ++ BUILD_BUG_ON(sizeof(long long) != sizeof(au_loff_max) ++ || ((loff_t)-1) > 0); ++ SiMustAnyLock(sb); ++ ++ mnt_flags = au_mntflags(sb); ++ if (!au_opt_test(mnt_flags, XINO)) ++ return 0; ++ ++ br = au_sbr(sb, bindex); ++ err = au_xino_do_write(au_sbi(sb)->si_xwrite, br->br_xino.xi_file, ++ h_ino, ino); ++ if (!err) { ++ if (au_opt_test(mnt_flags, TRUNC_XINO) ++ && au_test_fs_trunc_xino(br->br_mnt->mnt_sb)) ++ xino_try_trunc(sb, br); ++ return 0; /* success */ ++ } ++ ++ AuIOErr("write failed (%d)\n", err); ++ return -EIO; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* aufs inode number bitmap */ ++ ++static const int page_bits = (int)PAGE_SIZE * BITS_PER_BYTE; ++static ino_t xib_calc_ino(unsigned long pindex, int bit) ++{ ++ ino_t ino; ++ ++ AuDebugOn(bit < 0 || page_bits <= bit); ++ ino = AUFS_FIRST_INO + pindex * page_bits + bit; ++ return ino; ++} ++ ++static void xib_calc_bit(ino_t ino, unsigned long *pindex, int *bit) ++{ ++ AuDebugOn(ino < AUFS_FIRST_INO); ++ ino -= AUFS_FIRST_INO; ++ *pindex = ino / page_bits; ++ *bit = ino % page_bits; ++} ++ ++static int xib_pindex(struct super_block *sb, unsigned long pindex) ++{ ++ int err; ++ loff_t pos; ++ ssize_t sz; ++ struct au_sbinfo *sbinfo; ++ struct file *xib; ++ unsigned long *p; ++ ++ sbinfo = au_sbi(sb); ++ MtxMustLock(&sbinfo->si_xib_mtx); ++ AuDebugOn(pindex > ULONG_MAX / PAGE_SIZE ++ || !au_opt_test(sbinfo->si_mntflags, XINO)); ++ ++ if (pindex == sbinfo->si_xib_last_pindex) ++ return 0; ++ ++ xib = sbinfo->si_xib; ++ p = sbinfo->si_xib_buf; ++ pos = sbinfo->si_xib_last_pindex; ++ pos *= PAGE_SIZE; ++ sz = xino_fwrite(sbinfo->si_xwrite, xib, p, PAGE_SIZE, &pos); ++ if (unlikely(sz != PAGE_SIZE)) ++ goto out; ++ ++ pos = pindex; ++ pos *= PAGE_SIZE; ++ if (i_size_read(xib->f_dentry->d_inode) >= pos + PAGE_SIZE) ++ sz = xino_fread(sbinfo->si_xread, xib, p, PAGE_SIZE, &pos); ++ else { ++ memset(p, 0, PAGE_SIZE); ++ sz = xino_fwrite(sbinfo->si_xwrite, xib, p, PAGE_SIZE, &pos); ++ } ++ if (sz == PAGE_SIZE) { ++ sbinfo->si_xib_last_pindex = pindex; ++ return 0; /* success */ ++ } ++ ++out: ++ AuIOErr1("write failed (%zd)\n", sz); ++ err = sz; ++ if (sz >= 0) ++ err = -EIO; ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++static void au_xib_clear_bit(struct inode *inode) ++{ ++ int err, bit; ++ unsigned long pindex; ++ struct super_block *sb; ++ struct au_sbinfo *sbinfo; ++ ++ AuDebugOn(inode->i_nlink); ++ ++ sb = inode->i_sb; ++ xib_calc_bit(inode->i_ino, &pindex, &bit); ++ AuDebugOn(page_bits <= bit); ++ sbinfo = au_sbi(sb); ++ mutex_lock(&sbinfo->si_xib_mtx); ++ err = xib_pindex(sb, pindex); ++ if (!err) { ++ clear_bit(bit, sbinfo->si_xib_buf); ++ sbinfo->si_xib_next_bit = bit; ++ } ++ mutex_unlock(&sbinfo->si_xib_mtx); ++} ++ ++/* for s_op->delete_inode() */ ++void au_xino_delete_inode(struct inode *inode, const int unlinked) ++{ ++ int err; ++ unsigned int mnt_flags; ++ aufs_bindex_t bindex, bend, bi; ++ unsigned char try_trunc; ++ struct au_iinfo *iinfo; ++ struct super_block *sb; ++ struct au_hinode *hi; ++ struct inode *h_inode; ++ struct au_branch *br; ++ au_writef_t xwrite; ++ ++ sb = inode->i_sb; ++ mnt_flags = au_mntflags(sb); ++ if (!au_opt_test(mnt_flags, XINO) ++ || inode->i_ino == AUFS_ROOT_INO) ++ return; ++ ++ if (unlinked) { ++ au_xigen_inc(inode); ++ au_xib_clear_bit(inode); ++ } ++ ++ iinfo = au_ii(inode); ++ if (!iinfo) ++ return; ++ ++ bindex = iinfo->ii_bstart; ++ if (bindex < 0) ++ return; ++ ++ xwrite = au_sbi(sb)->si_xwrite; ++ try_trunc = !!au_opt_test(mnt_flags, TRUNC_XINO); ++ hi = iinfo->ii_hinode + bindex; ++ bend = iinfo->ii_bend; ++ for (; bindex <= bend; bindex++, hi++) { ++ h_inode = hi->hi_inode; ++ if (!h_inode ++ || (!unlinked && h_inode->i_nlink)) ++ continue; ++ ++ /* inode may not be revalidated */ ++ bi = au_br_index(sb, hi->hi_id); ++ if (bi < 0) ++ continue; ++ ++ br = au_sbr(sb, bi); ++ err = au_xino_do_write(xwrite, br->br_xino.xi_file, ++ h_inode->i_ino, /*ino*/0); ++ if (!err && try_trunc ++ && au_test_fs_trunc_xino(br->br_mnt->mnt_sb)) ++ xino_try_trunc(sb, br); ++ } ++} ++ ++/* get an unused inode number from bitmap */ ++ino_t au_xino_new_ino(struct super_block *sb) ++{ ++ ino_t ino; ++ unsigned long *p, pindex, ul, pend; ++ struct au_sbinfo *sbinfo; ++ struct file *file; ++ int free_bit, err; ++ ++ if (!au_opt_test(au_mntflags(sb), XINO)) ++ return iunique(sb, AUFS_FIRST_INO); ++ ++ sbinfo = au_sbi(sb); ++ mutex_lock(&sbinfo->si_xib_mtx); ++ p = sbinfo->si_xib_buf; ++ free_bit = sbinfo->si_xib_next_bit; ++ if (free_bit < page_bits && !test_bit(free_bit, p)) ++ goto out; /* success */ ++ free_bit = find_first_zero_bit(p, page_bits); ++ if (free_bit < page_bits) ++ goto out; /* success */ ++ ++ pindex = sbinfo->si_xib_last_pindex; ++ for (ul = pindex - 1; ul < ULONG_MAX; ul--) { ++ err = xib_pindex(sb, ul); ++ if (unlikely(err)) ++ goto out_err; ++ free_bit = find_first_zero_bit(p, page_bits); ++ if (free_bit < page_bits) ++ goto out; /* success */ ++ } ++ ++ file = sbinfo->si_xib; ++ pend = i_size_read(file->f_dentry->d_inode) / PAGE_SIZE; ++ for (ul = pindex + 1; ul <= pend; ul++) { ++ err = xib_pindex(sb, ul); ++ if (unlikely(err)) ++ goto out_err; ++ free_bit = find_first_zero_bit(p, page_bits); ++ if (free_bit < page_bits) ++ goto out; /* success */ ++ } ++ BUG(); ++ ++out: ++ set_bit(free_bit, p); ++ sbinfo->si_xib_next_bit = free_bit + 1; ++ pindex = sbinfo->si_xib_last_pindex; ++ mutex_unlock(&sbinfo->si_xib_mtx); ++ ino = xib_calc_ino(pindex, free_bit); ++ AuDbg("i%lu\n", (unsigned long)ino); ++ return ino; ++out_err: ++ mutex_unlock(&sbinfo->si_xib_mtx); ++ AuDbg("i0\n"); ++ return 0; ++} ++ ++/* ++ * read @ino from xinofile for the specified branch{@sb, @bindex} ++ * at the position of @h_ino. ++ * if @ino does not exist and @do_new is true, get new one. ++ */ ++int au_xino_read(struct super_block *sb, aufs_bindex_t bindex, ino_t h_ino, ++ ino_t *ino) ++{ ++ int err; ++ ssize_t sz; ++ loff_t pos; ++ struct file *file; ++ struct au_sbinfo *sbinfo; ++ ++ *ino = 0; ++ if (!au_opt_test(au_mntflags(sb), XINO)) ++ return 0; /* no xino */ ++ ++ err = 0; ++ sbinfo = au_sbi(sb); ++ pos = h_ino; ++ if (unlikely(au_loff_max / sizeof(*ino) - 1 < pos)) { ++ AuIOErr1("too large hi%lu\n", (unsigned long)h_ino); ++ return -EFBIG; ++ } ++ pos *= sizeof(*ino); ++ ++ file = au_sbr(sb, bindex)->br_xino.xi_file; ++ if (i_size_read(file->f_dentry->d_inode) < pos + sizeof(*ino)) ++ return 0; /* no ino */ ++ ++ sz = xino_fread(sbinfo->si_xread, file, ino, sizeof(*ino), &pos); ++ if (sz == sizeof(*ino)) ++ return 0; /* success */ ++ ++ err = sz; ++ if (unlikely(sz >= 0)) { ++ err = -EIO; ++ AuIOErr("xino read error (%zd)\n", sz); ++ } ++ ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* create and set a new xino file */ ++ ++struct file *au_xino_create(struct super_block *sb, char *fname, int silent) ++{ ++ struct file *file; ++ struct dentry *h_parent, *d; ++ struct inode *h_dir; ++ int err; ++ ++ /* ++ * at mount-time, and the xino file is the default path, ++ * hnotify is disabled so we have no notify events to ignore. ++ * when a user specified the xino, we cannot get au_hdir to be ignored. ++ */ ++ file = vfsub_filp_open(fname, O_RDWR | O_CREAT | O_EXCL | O_LARGEFILE ++ /* | FMODE_NONOTIFY */, ++ S_IRUGO | S_IWUGO); ++ if (IS_ERR(file)) { ++ if (!silent) ++ pr_err("open %s(%ld)\n", fname, PTR_ERR(file)); ++ return file; ++ } ++ ++ /* keep file count */ ++ h_parent = dget_parent(file->f_dentry); ++ h_dir = h_parent->d_inode; ++ mutex_lock_nested(&h_dir->i_mutex, AuLsc_I_PARENT); ++ /* mnt_want_write() is unnecessary here */ ++ err = vfsub_unlink(h_dir, &file->f_path, /*force*/0); ++ mutex_unlock(&h_dir->i_mutex); ++ dput(h_parent); ++ if (unlikely(err)) { ++ if (!silent) ++ pr_err("unlink %s(%d)\n", fname, err); ++ goto out; ++ } ++ ++ err = -EINVAL; ++ d = file->f_dentry; ++ if (unlikely(sb == d->d_sb)) { ++ if (!silent) ++ pr_err("%s must be outside\n", fname); ++ goto out; ++ } ++ if (unlikely(au_test_fs_bad_xino(d->d_sb))) { ++ if (!silent) ++ pr_err("xino doesn't support %s(%s)\n", ++ fname, au_sbtype(d->d_sb)); ++ goto out; ++ } ++ return file; /* success */ ++ ++out: ++ fput(file); ++ file = ERR_PTR(err); ++ return file; ++} ++ ++/* ++ * find another branch who is on the same filesystem of the specified ++ * branch{@btgt}. search until @bend. ++ */ ++static int is_sb_shared(struct super_block *sb, aufs_bindex_t btgt, ++ aufs_bindex_t bend) ++{ ++ aufs_bindex_t bindex; ++ struct super_block *tgt_sb = au_sbr_sb(sb, btgt); ++ ++ for (bindex = 0; bindex < btgt; bindex++) ++ if (unlikely(tgt_sb == au_sbr_sb(sb, bindex))) ++ return bindex; ++ for (bindex++; bindex <= bend; bindex++) ++ if (unlikely(tgt_sb == au_sbr_sb(sb, bindex))) ++ return bindex; ++ return -1; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* ++ * initialize the xinofile for the specified branch @br ++ * at the place/path where @base_file indicates. ++ * test whether another branch is on the same filesystem or not, ++ * if @do_test is true. ++ */ ++int au_xino_br(struct super_block *sb, struct au_branch *br, ino_t h_ino, ++ struct file *base_file, int do_test) ++{ ++ int err; ++ ino_t ino; ++ aufs_bindex_t bend, bindex; ++ struct au_branch *shared_br, *b; ++ struct file *file; ++ struct super_block *tgt_sb; ++ ++ shared_br = NULL; ++ bend = au_sbend(sb); ++ if (do_test) { ++ tgt_sb = br->br_mnt->mnt_sb; ++ for (bindex = 0; bindex <= bend; bindex++) { ++ b = au_sbr(sb, bindex); ++ if (tgt_sb == b->br_mnt->mnt_sb) { ++ shared_br = b; ++ break; ++ } ++ } ++ } ++ ++ if (!shared_br || !shared_br->br_xino.xi_file) { ++ struct au_xino_lock_dir ldir; ++ ++ au_xino_lock_dir(sb, base_file, &ldir); ++ /* mnt_want_write() is unnecessary here */ ++ file = au_xino_create2(base_file, NULL); ++ au_xino_unlock_dir(&ldir); ++ err = PTR_ERR(file); ++ if (IS_ERR(file)) ++ goto out; ++ br->br_xino.xi_file = file; ++ } else { ++ br->br_xino.xi_file = shared_br->br_xino.xi_file; ++ get_file(br->br_xino.xi_file); ++ } ++ ++ ino = AUFS_ROOT_INO; ++ err = au_xino_do_write(au_sbi(sb)->si_xwrite, br->br_xino.xi_file, ++ h_ino, ino); ++ if (unlikely(err)) { ++ fput(br->br_xino.xi_file); ++ br->br_xino.xi_file = NULL; ++ } ++ ++out: ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* trucate a xino bitmap file */ ++ ++/* todo: slow */ ++static int do_xib_restore(struct super_block *sb, struct file *file, void *page) ++{ ++ int err, bit; ++ ssize_t sz; ++ unsigned long pindex; ++ loff_t pos, pend; ++ struct au_sbinfo *sbinfo; ++ au_readf_t func; ++ ino_t *ino; ++ unsigned long *p; ++ ++ err = 0; ++ sbinfo = au_sbi(sb); ++ MtxMustLock(&sbinfo->si_xib_mtx); ++ p = sbinfo->si_xib_buf; ++ func = sbinfo->si_xread; ++ pend = i_size_read(file->f_dentry->d_inode); ++ pos = 0; ++ while (pos < pend) { ++ sz = xino_fread(func, file, page, PAGE_SIZE, &pos); ++ err = sz; ++ if (unlikely(sz <= 0)) ++ goto out; ++ ++ err = 0; ++ for (ino = page; sz > 0; ino++, sz -= sizeof(ino)) { ++ if (unlikely(*ino < AUFS_FIRST_INO)) ++ continue; ++ ++ xib_calc_bit(*ino, &pindex, &bit); ++ AuDebugOn(page_bits <= bit); ++ err = xib_pindex(sb, pindex); ++ if (!err) ++ set_bit(bit, p); ++ else ++ goto out; ++ } ++ } ++ ++out: ++ return err; ++} ++ ++static int xib_restore(struct super_block *sb) ++{ ++ int err; ++ aufs_bindex_t bindex, bend; ++ void *page; ++ ++ err = -ENOMEM; ++ page = (void *)__get_free_page(GFP_NOFS); ++ if (unlikely(!page)) ++ goto out; ++ ++ err = 0; ++ bend = au_sbend(sb); ++ for (bindex = 0; !err && bindex <= bend; bindex++) ++ if (!bindex || is_sb_shared(sb, bindex, bindex - 1) < 0) ++ err = do_xib_restore ++ (sb, au_sbr(sb, bindex)->br_xino.xi_file, page); ++ else ++ AuDbg("b%d\n", bindex); ++ free_page((unsigned long)page); ++ ++out: ++ return err; ++} ++ ++int au_xib_trunc(struct super_block *sb) ++{ ++ int err; ++ ssize_t sz; ++ loff_t pos; ++ struct au_xino_lock_dir ldir; ++ struct au_sbinfo *sbinfo; ++ unsigned long *p; ++ struct file *file; ++ ++ SiMustWriteLock(sb); ++ ++ err = 0; ++ sbinfo = au_sbi(sb); ++ if (!au_opt_test(sbinfo->si_mntflags, XINO)) ++ goto out; ++ ++ file = sbinfo->si_xib; ++ if (i_size_read(file->f_dentry->d_inode) <= PAGE_SIZE) ++ goto out; ++ ++ au_xino_lock_dir(sb, file, &ldir); ++ /* mnt_want_write() is unnecessary here */ ++ file = au_xino_create2(sbinfo->si_xib, NULL); ++ au_xino_unlock_dir(&ldir); ++ err = PTR_ERR(file); ++ if (IS_ERR(file)) ++ goto out; ++ fput(sbinfo->si_xib); ++ sbinfo->si_xib = file; ++ ++ p = sbinfo->si_xib_buf; ++ memset(p, 0, PAGE_SIZE); ++ pos = 0; ++ sz = xino_fwrite(sbinfo->si_xwrite, sbinfo->si_xib, p, PAGE_SIZE, &pos); ++ if (unlikely(sz != PAGE_SIZE)) { ++ err = sz; ++ AuIOErr("err %d\n", err); ++ if (sz >= 0) ++ err = -EIO; ++ goto out; ++ } ++ ++ mutex_lock(&sbinfo->si_xib_mtx); ++ /* mnt_want_write() is unnecessary here */ ++ err = xib_restore(sb); ++ mutex_unlock(&sbinfo->si_xib_mtx); ++ ++out: ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* ++ * xino mount option handlers ++ */ ++static au_readf_t find_readf(struct file *h_file) ++{ ++ const struct file_operations *fop = h_file->f_op; ++ ++ if (fop) { ++ if (fop->read) ++ return fop->read; ++ if (fop->aio_read) ++ return do_sync_read; ++ } ++ return ERR_PTR(-ENOSYS); ++} ++ ++static au_writef_t find_writef(struct file *h_file) ++{ ++ const struct file_operations *fop = h_file->f_op; ++ ++ if (fop) { ++ if (fop->write) ++ return fop->write; ++ if (fop->aio_write) ++ return do_sync_write; ++ } ++ return ERR_PTR(-ENOSYS); ++} ++ ++/* xino bitmap */ ++static void xino_clear_xib(struct super_block *sb) ++{ ++ struct au_sbinfo *sbinfo; ++ ++ SiMustWriteLock(sb); ++ ++ sbinfo = au_sbi(sb); ++ sbinfo->si_xread = NULL; ++ sbinfo->si_xwrite = NULL; ++ if (sbinfo->si_xib) ++ fput(sbinfo->si_xib); ++ sbinfo->si_xib = NULL; ++ free_page((unsigned long)sbinfo->si_xib_buf); ++ sbinfo->si_xib_buf = NULL; ++} ++ ++static int au_xino_set_xib(struct super_block *sb, struct file *base) ++{ ++ int err; ++ loff_t pos; ++ struct au_sbinfo *sbinfo; ++ struct file *file; ++ ++ SiMustWriteLock(sb); ++ ++ sbinfo = au_sbi(sb); ++ file = au_xino_create2(base, sbinfo->si_xib); ++ err = PTR_ERR(file); ++ if (IS_ERR(file)) ++ goto out; ++ if (sbinfo->si_xib) ++ fput(sbinfo->si_xib); ++ sbinfo->si_xib = file; ++ sbinfo->si_xread = find_readf(file); ++ sbinfo->si_xwrite = find_writef(file); ++ ++ err = -ENOMEM; ++ if (!sbinfo->si_xib_buf) ++ sbinfo->si_xib_buf = (void *)get_zeroed_page(GFP_NOFS); ++ if (unlikely(!sbinfo->si_xib_buf)) ++ goto out_unset; ++ ++ sbinfo->si_xib_last_pindex = 0; ++ sbinfo->si_xib_next_bit = 0; ++ if (i_size_read(file->f_dentry->d_inode) < PAGE_SIZE) { ++ pos = 0; ++ err = xino_fwrite(sbinfo->si_xwrite, file, sbinfo->si_xib_buf, ++ PAGE_SIZE, &pos); ++ if (unlikely(err != PAGE_SIZE)) ++ goto out_free; ++ } ++ err = 0; ++ goto out; /* success */ ++ ++out_free: ++ free_page((unsigned long)sbinfo->si_xib_buf); ++ sbinfo->si_xib_buf = NULL; ++ if (err >= 0) ++ err = -EIO; ++out_unset: ++ fput(sbinfo->si_xib); ++ sbinfo->si_xib = NULL; ++ sbinfo->si_xread = NULL; ++ sbinfo->si_xwrite = NULL; ++out: ++ return err; ++} ++ ++/* xino for each branch */ ++static void xino_clear_br(struct super_block *sb) ++{ ++ aufs_bindex_t bindex, bend; ++ struct au_branch *br; ++ ++ bend = au_sbend(sb); ++ for (bindex = 0; bindex <= bend; bindex++) { ++ br = au_sbr(sb, bindex); ++ if (!br || !br->br_xino.xi_file) ++ continue; ++ ++ fput(br->br_xino.xi_file); ++ br->br_xino.xi_file = NULL; ++ } ++} ++ ++static int au_xino_set_br(struct super_block *sb, struct file *base) ++{ ++ int err; ++ ino_t ino; ++ aufs_bindex_t bindex, bend, bshared; ++ struct { ++ struct file *old, *new; ++ } *fpair, *p; ++ struct au_branch *br; ++ struct inode *inode; ++ au_writef_t writef; ++ ++ SiMustWriteLock(sb); ++ ++ err = -ENOMEM; ++ bend = au_sbend(sb); ++ fpair = kcalloc(bend + 1, sizeof(*fpair), GFP_NOFS); ++ if (unlikely(!fpair)) ++ goto out; ++ ++ inode = sb->s_root->d_inode; ++ ino = AUFS_ROOT_INO; ++ writef = au_sbi(sb)->si_xwrite; ++ for (bindex = 0, p = fpair; bindex <= bend; bindex++, p++) { ++ br = au_sbr(sb, bindex); ++ bshared = is_sb_shared(sb, bindex, bindex - 1); ++ if (bshared >= 0) { ++ /* shared xino */ ++ *p = fpair[bshared]; ++ get_file(p->new); ++ } ++ ++ if (!p->new) { ++ /* new xino */ ++ p->old = br->br_xino.xi_file; ++ p->new = au_xino_create2(base, br->br_xino.xi_file); ++ err = PTR_ERR(p->new); ++ if (IS_ERR(p->new)) { ++ p->new = NULL; ++ goto out_pair; ++ } ++ } ++ ++ err = au_xino_do_write(writef, p->new, ++ au_h_iptr(inode, bindex)->i_ino, ino); ++ if (unlikely(err)) ++ goto out_pair; ++ } ++ ++ for (bindex = 0, p = fpair; bindex <= bend; bindex++, p++) { ++ br = au_sbr(sb, bindex); ++ if (br->br_xino.xi_file) ++ fput(br->br_xino.xi_file); ++ get_file(p->new); ++ br->br_xino.xi_file = p->new; ++ } ++ ++out_pair: ++ for (bindex = 0, p = fpair; bindex <= bend; bindex++, p++) ++ if (p->new) ++ fput(p->new); ++ else ++ break; ++ kfree(fpair); ++out: ++ return err; ++} ++ ++void au_xino_clr(struct super_block *sb) ++{ ++ struct au_sbinfo *sbinfo; ++ ++ au_xigen_clr(sb); ++ xino_clear_xib(sb); ++ xino_clear_br(sb); ++ sbinfo = au_sbi(sb); ++ /* lvalue, do not call au_mntflags() */ ++ au_opt_clr(sbinfo->si_mntflags, XINO); ++} ++ ++int au_xino_set(struct super_block *sb, struct au_opt_xino *xino, int remount) ++{ ++ int err, skip; ++ struct dentry *parent, *cur_parent; ++ struct qstr *dname, *cur_name; ++ struct file *cur_xino; ++ struct inode *dir; ++ struct au_sbinfo *sbinfo; ++ ++ SiMustWriteLock(sb); ++ ++ err = 0; ++ sbinfo = au_sbi(sb); ++ parent = dget_parent(xino->file->f_dentry); ++ if (remount) { ++ skip = 0; ++ dname = &xino->file->f_dentry->d_name; ++ cur_xino = sbinfo->si_xib; ++ if (cur_xino) { ++ cur_parent = dget_parent(cur_xino->f_dentry); ++ cur_name = &cur_xino->f_dentry->d_name; ++ skip = (cur_parent == parent ++ && dname->len == cur_name->len ++ && !memcmp(dname->name, cur_name->name, ++ dname->len)); ++ dput(cur_parent); ++ } ++ if (skip) ++ goto out; ++ } ++ ++ au_opt_set(sbinfo->si_mntflags, XINO); ++ dir = parent->d_inode; ++ mutex_lock_nested(&dir->i_mutex, AuLsc_I_PARENT); ++ /* mnt_want_write() is unnecessary here */ ++ err = au_xino_set_xib(sb, xino->file); ++ if (!err) ++ err = au_xigen_set(sb, xino->file); ++ if (!err) ++ err = au_xino_set_br(sb, xino->file); ++ mutex_unlock(&dir->i_mutex); ++ if (!err) ++ goto out; /* success */ ++ ++ /* reset all */ ++ AuIOErr("failed creating xino(%d).\n", err); ++ ++out: ++ dput(parent); ++ return err; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* ++ * create a xinofile at the default place/path. ++ */ ++struct file *au_xino_def(struct super_block *sb) ++{ ++ struct file *file; ++ char *page, *p; ++ struct au_branch *br; ++ struct super_block *h_sb; ++ struct path path; ++ aufs_bindex_t bend, bindex, bwr; ++ ++ br = NULL; ++ bend = au_sbend(sb); ++ bwr = -1; ++ for (bindex = 0; bindex <= bend; bindex++) { ++ br = au_sbr(sb, bindex); ++ if (au_br_writable(br->br_perm) ++ && !au_test_fs_bad_xino(br->br_mnt->mnt_sb)) { ++ bwr = bindex; ++ break; ++ } ++ } ++ ++ if (bwr >= 0) { ++ file = ERR_PTR(-ENOMEM); ++ page = __getname_gfp(GFP_NOFS); ++ if (unlikely(!page)) ++ goto out; ++ path.mnt = br->br_mnt; ++ path.dentry = au_h_dptr(sb->s_root, bwr); ++ p = d_path(&path, page, PATH_MAX - sizeof(AUFS_XINO_FNAME)); ++ file = (void *)p; ++ if (!IS_ERR(p)) { ++ strcat(p, "/" AUFS_XINO_FNAME); ++ AuDbg("%s\n", p); ++ file = au_xino_create(sb, p, /*silent*/0); ++ if (!IS_ERR(file)) ++ au_xino_brid_set(sb, br->br_id); ++ } ++ __putname(page); ++ } else { ++ file = au_xino_create(sb, AUFS_XINO_DEFPATH, /*silent*/0); ++ if (IS_ERR(file)) ++ goto out; ++ h_sb = file->f_dentry->d_sb; ++ if (unlikely(au_test_fs_bad_xino(h_sb))) { ++ pr_err("xino doesn't support %s(%s)\n", ++ AUFS_XINO_DEFPATH, au_sbtype(h_sb)); ++ fput(file); ++ file = ERR_PTR(-EINVAL); ++ } ++ if (!IS_ERR(file)) ++ au_xino_brid_set(sb, -1); ++ } ++ ++out: ++ return file; ++} ++ ++/* ---------------------------------------------------------------------- */ ++ ++int au_xino_path(struct seq_file *seq, struct file *file) ++{ ++ int err; ++ ++ err = au_seq_path(seq, &file->f_path); ++ if (unlikely(err < 0)) ++ goto out; ++ ++ err = 0; ++#define Deleted "\\040(deleted)" ++ seq->count -= sizeof(Deleted) - 1; ++ AuDebugOn(memcmp(seq->buf + seq->count, Deleted, ++ sizeof(Deleted) - 1)); ++#undef Deleted ++ ++out: ++ return err; ++} +diff -urN a/include/linux/aufs_type.h b/include/linux/aufs_type.h +--- a/include/linux/aufs_type.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/include/linux/aufs_type.h 2011-03-06 23:28:02.624413046 +0000 +@@ -0,0 +1,206 @@ ++/* ++ * Copyright (C) 2005-2011 Junjiro R. Okajima ++ * ++ * This program, aufs is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#ifndef __AUFS_TYPE_H__ ++#define __AUFS_TYPE_H__ ++ ++#include ++#include ++#include ++#include ++ ++#define AUFS_VERSION "2.1-standalone.tree-38-rcN-20110228" ++ ++/* todo? move this to linux-2.6.19/include/magic.h */ ++#define AUFS_SUPER_MAGIC ('a' << 24 | 'u' << 16 | 'f' << 8 | 's') ++ ++/* ---------------------------------------------------------------------- */ ++ ++#ifdef CONFIG_AUFS_BRANCH_MAX_127 ++typedef __s8 aufs_bindex_t; ++#define AUFS_BRANCH_MAX 127 ++#else ++typedef __s16 aufs_bindex_t; ++#ifdef CONFIG_AUFS_BRANCH_MAX_511 ++#define AUFS_BRANCH_MAX 511 ++#elif defined(CONFIG_AUFS_BRANCH_MAX_1023) ++#define AUFS_BRANCH_MAX 1023 ++#elif defined(CONFIG_AUFS_BRANCH_MAX_32767) ++#define AUFS_BRANCH_MAX 32767 ++#endif ++#endif ++ ++#ifdef __KERNEL__ ++#ifndef AUFS_BRANCH_MAX ++#error unknown CONFIG_AUFS_BRANCH_MAX value ++#endif ++#endif /* __KERNEL__ */ ++ ++/* ---------------------------------------------------------------------- */ ++ ++#define AUFS_NAME "aufs" ++#define AUFS_FSTYPE AUFS_NAME ++ ++#define AUFS_ROOT_INO 2 ++#define AUFS_FIRST_INO 11 ++ ++#define AUFS_WH_PFX ".wh." ++#define AUFS_WH_PFX_LEN ((int)sizeof(AUFS_WH_PFX) - 1) ++#define AUFS_WH_TMP_LEN 4 ++/* a limit for rmdir/rename a dir */ ++#define AUFS_MAX_NAMELEN (NAME_MAX \ ++ - AUFS_WH_PFX_LEN * 2 /* doubly whiteouted */\ ++ - 1 /* dot */\ ++ - AUFS_WH_TMP_LEN) /* hex */ ++#define AUFS_XINO_FNAME "." AUFS_NAME ".xino" ++#define AUFS_XINO_DEFPATH "/tmp/" AUFS_XINO_FNAME ++#define AUFS_XINO_TRUNC_INIT 64 /* blocks */ ++#define AUFS_XINO_TRUNC_STEP 4 /* blocks */ ++#define AUFS_DIRWH_DEF 3 ++#define AUFS_RDCACHE_DEF 10 /* seconds */ ++#define AUFS_RDCACHE_MAX 3600 /* seconds */ ++#define AUFS_RDBLK_DEF 512 /* bytes */ ++#define AUFS_RDHASH_DEF 32 ++#define AUFS_WKQ_NAME AUFS_NAME "d" ++#define AUFS_WKQ_PRE_NAME AUFS_WKQ_NAME "_pre" ++#define AUFS_MFS_DEF_SEC 30 /* seconds */ ++#define AUFS_MFS_MAX_SEC 3600 /* seconds */ ++#define AUFS_PLINK_WARN 100 /* number of plinks */ ++ ++/* pseudo-link maintenace under /proc */ ++#define AUFS_PLINK_MAINT_NAME "plink_maint" ++#define AUFS_PLINK_MAINT_DIR "fs/" AUFS_NAME ++#define AUFS_PLINK_MAINT_PATH AUFS_PLINK_MAINT_DIR "/" AUFS_PLINK_MAINT_NAME ++ ++#define AUFS_DIROPQ_NAME AUFS_WH_PFX ".opq" /* whiteouted doubly */ ++#define AUFS_WH_DIROPQ AUFS_WH_PFX AUFS_DIROPQ_NAME ++ ++#define AUFS_BASE_NAME AUFS_WH_PFX AUFS_NAME ++#define AUFS_PLINKDIR_NAME AUFS_WH_PFX "plnk" ++#define AUFS_ORPHDIR_NAME AUFS_WH_PFX "orph" ++ ++/* doubly whiteouted */ ++#define AUFS_WH_BASE AUFS_WH_PFX AUFS_BASE_NAME ++#define AUFS_WH_PLINKDIR AUFS_WH_PFX AUFS_PLINKDIR_NAME ++#define AUFS_WH_ORPHDIR AUFS_WH_PFX AUFS_ORPHDIR_NAME ++ ++/* branch permission */ ++#define AUFS_BRPERM_RW "rw" ++#define AUFS_BRPERM_RO "ro" ++#define AUFS_BRPERM_RR "rr" ++#define AUFS_BRPERM_WH "wh" ++#define AUFS_BRPERM_NLWH "nolwh" ++#define AUFS_BRPERM_ROWH AUFS_BRPERM_RO "+" AUFS_BRPERM_WH ++#define AUFS_BRPERM_RRWH AUFS_BRPERM_RR "+" AUFS_BRPERM_WH ++#define AUFS_BRPERM_RWNLWH AUFS_BRPERM_RW "+" AUFS_BRPERM_NLWH ++ ++/* ---------------------------------------------------------------------- */ ++ ++/* ioctl */ ++enum { ++ /* readdir in userspace */ ++ AuCtl_RDU, ++ AuCtl_RDU_INO, ++ ++ /* pathconf wrapper */ ++ AuCtl_WBR_FD, ++ ++ /* busy inode */ ++ AuCtl_IBUSY ++}; ++ ++/* borrowed from linux/include/linux/kernel.h */ ++#ifndef ALIGN ++#define ALIGN(x, a) __ALIGN_MASK(x, (typeof(x))(a)-1) ++#define __ALIGN_MASK(x, mask) (((x)+(mask))&~(mask)) ++#endif ++ ++/* borrowed from linux/include/linux/compiler-gcc3.h */ ++#ifndef __aligned ++#define __aligned(x) __attribute__((aligned(x))) ++#define __packed __attribute__((packed)) ++#endif ++ ++struct au_rdu_cookie { ++ __u64 h_pos; ++ __s16 bindex; ++ __u8 flags; ++ __u8 pad; ++ __u32 generation; ++} __aligned(8); ++ ++struct au_rdu_ent { ++ __u64 ino; ++ __s16 bindex; ++ __u8 type; ++ __u8 nlen; ++ __u8 wh; ++ char name[0]; ++} __aligned(8); ++ ++static inline int au_rdu_len(int nlen) ++{ ++ /* include the terminating NULL */ ++ return ALIGN(sizeof(struct au_rdu_ent) + nlen + 1, ++ sizeof(__u64)); ++} ++ ++union au_rdu_ent_ul { ++ struct au_rdu_ent __user *e; ++ __u64 ul; ++}; ++ ++enum { ++ AufsCtlRduV_SZ, ++ AufsCtlRduV_End ++}; ++ ++struct aufs_rdu { ++ /* input */ ++ union { ++ __u64 sz; /* AuCtl_RDU */ ++ __u64 nent; /* AuCtl_RDU_INO */ ++ }; ++ union au_rdu_ent_ul ent; ++ __u16 verify[AufsCtlRduV_End]; ++ ++ /* input/output */ ++ __u32 blk; ++ ++ /* output */ ++ union au_rdu_ent_ul tail; ++ /* number of entries which were added in a single call */ ++ __u64 rent; ++ __u8 full; ++ __u8 shwh; ++ ++ struct au_rdu_cookie cookie; ++} __aligned(8); ++ ++struct aufs_ibusy { ++ __u64 ino, h_ino; ++ __s16 bindex; ++} __aligned(8); ++ ++#define AuCtlType 'A' ++#define AUFS_CTL_RDU _IOWR(AuCtlType, AuCtl_RDU, struct aufs_rdu) ++#define AUFS_CTL_RDU_INO _IOWR(AuCtlType, AuCtl_RDU_INO, struct aufs_rdu) ++#define AUFS_CTL_WBR_FD _IO(AuCtlType, AuCtl_WBR_FD) ++#define AUFS_CTL_IBUSY _IOWR(AuCtlType, AuCtl_IBUSY, struct aufs_ibusy) ++ ++#endif /* __AUFS_TYPE_H__ */ --- linux-2.6-3.0.0~rc6.orig/debian/patches/features/all/aufs2/aufs2-kbuild.patch +++ linux-2.6-3.0.0~rc6/debian/patches/features/all/aufs2/aufs2-kbuild.patch @@ -0,0 +1,35 @@ +aufs2.1 kbuild patch for linux-2.6. + +diff --git a/fs/Kconfig b/fs/Kconfig +index 3db9caa..c9e1f11 100644 +--- a/fs/Kconfig ++++ b/fs/Kconfig +@@ -190,6 +190,7 @@ source "fs/romfs/Kconfig" + source "fs/sysv/Kconfig" + source "fs/ufs/Kconfig" + source "fs/exofs/Kconfig" ++source "fs/aufs/Kconfig" + + endif # MISC_FILESYSTEMS + +diff --git a/fs/Makefile b/fs/Makefile +index a7f7cef..95dd4d3 100644 +--- a/fs/Makefile ++++ b/fs/Makefile +@@ -121,3 +121,4 @@ obj-$(CONFIG_BTRFS_FS) += btrfs/ + obj-$(CONFIG_GFS2_FS) += gfs2/ + obj-$(CONFIG_EXOFS_FS) += exofs/ + obj-$(CONFIG_CEPH_FS) += ceph/ ++obj-$(CONFIG_AUFS_FS) += aufs/ +diff --git a/include/linux/Kbuild b/include/linux/Kbuild +index b0ada6f..5cb5837 100644 +--- a/include/linux/Kbuild ++++ b/include/linux/Kbuild +@@ -64,6 +64,7 @@ header-y += atmppp.h + header-y += atmsap.h + header-y += atmsvc.h + header-y += audit.h ++header-y += aufs_type.h + header-y += auto_fs.h + header-y += auto_fs4.h + header-y += auxvec.h --- linux-2.6-3.0.0~rc6.orig/debian/patches/features/all/aufs2/aufs2-standalone.patch +++ linux-2.6-3.0.0~rc6/debian/patches/features/all/aufs2/aufs2-standalone.patch @@ -0,0 +1,289 @@ +aufs2.1 standalone patch for linux-2.6. + +diff --git a/fs/file_table.c b/fs/file_table.c +index eb36b6b..12f2809 100644 +--- a/fs/file_table.c ++++ b/fs/file_table.c +@@ -393,6 +393,8 @@ void file_sb_list_del(struct file *file) + } + } + ++EXPORT_SYMBOL_GPL(file_sb_list_del); ++ + #ifdef CONFIG_SMP + + /* +diff --git a/fs/inode.c b/fs/inode.c +index da85e56..b3dc5d8 100644 +--- a/fs/inode.c ++++ b/fs/inode.c +@@ -82,6 +82,7 @@ static struct hlist_head *inode_hashtable __read_mostly; + * the i_state of an inode while it is in use.. + */ + DEFINE_SPINLOCK(inode_lock); ++EXPORT_SYMBOL_GPL(inode_lock); + + /* + * iprune_sem provides exclusion between the kswapd or try_to_free_pages +diff --git a/fs/namei.c b/fs/namei.c +index cd39cdf..db4290c 100644 +--- a/fs/namei.c ++++ b/fs/namei.c +@@ -353,6 +353,7 @@ int deny_write_access(struct file * file) + + return 0; + } ++EXPORT_SYMBOL_GPL(deny_write_access); + + /** + * path_get - get a reference to a path +@@ -1845,6 +1846,7 @@ struct dentry *lookup_hash(struct nameidata *nd) + { + return __lookup_hash(&nd->last, nd->path.dentry, nd); + } ++EXPORT_SYMBOL_GPL(lookup_hash); + + int __lookup_one_len(const char *name, struct qstr *this, + struct dentry *base, int len) +@@ -1867,6 +1869,7 @@ int __lookup_one_len(const char *name, struct qstr *this, + this->hash = end_name_hash(hash); + return 0; + } ++EXPORT_SYMBOL_GPL(__lookup_one_len); + + /** + * lookup_one_len - filesystem helper to lookup single pathname component +diff --git a/fs/namespace.c b/fs/namespace.c +index 7b0b953..b304f68 100644 +--- a/fs/namespace.c ++++ b/fs/namespace.c +@@ -1465,6 +1465,7 @@ int iterate_mounts(int (*f)(struct vfsmount *, void *), void *arg, + } + return 0; + } ++EXPORT_SYMBOL_GPL(iterate_mounts); + + static void cleanup_group_ids(struct vfsmount *mnt, struct vfsmount *end) + { +diff --git a/fs/notify/group.c b/fs/notify/group.c +index d309f38..f0e9568 100644 +--- a/fs/notify/group.c ++++ b/fs/notify/group.c +@@ -22,6 +22,7 @@ + #include + #include + #include ++#include + + #include + #include "fsnotify.h" +@@ -70,6 +71,7 @@ void fsnotify_put_group(struct fsnotify_group *group) + if (atomic_dec_and_test(&group->refcnt)) + fsnotify_destroy_group(group); + } ++EXPORT_SYMBOL_GPL(fsnotify_put_group); + + /* + * Create a new fsnotify_group and hold a reference for the group returned. +@@ -102,3 +104,4 @@ struct fsnotify_group *fsnotify_alloc_group(const struct fsnotify_ops *ops) + + return group; + } ++EXPORT_SYMBOL_GPL(fsnotify_alloc_group); +diff --git a/fs/notify/mark.c b/fs/notify/mark.c +index 325185e..adede09 100644 +--- a/fs/notify/mark.c ++++ b/fs/notify/mark.c +@@ -113,6 +113,7 @@ void fsnotify_put_mark(struct fsnotify_mark *mark) + if (atomic_dec_and_test(&mark->refcnt)) + mark->free_mark(mark); + } ++EXPORT_SYMBOL_GPL(fsnotify_put_mark); + + /* + * Any time a mark is getting freed we end up here. +@@ -190,6 +191,7 @@ void fsnotify_destroy_mark(struct fsnotify_mark *mark) + if (unlikely(atomic_dec_and_test(&group->num_marks))) + fsnotify_final_destroy_group(group); + } ++EXPORT_SYMBOL_GPL(fsnotify_destroy_mark); + + void fsnotify_set_mark_mask_locked(struct fsnotify_mark *mark, __u32 mask) + { +@@ -277,6 +279,7 @@ err: + + return ret; + } ++EXPORT_SYMBOL_GPL(fsnotify_add_mark); + + /* + * clear any marks in a group in which mark->flags & flags is true +@@ -332,6 +335,7 @@ void fsnotify_init_mark(struct fsnotify_mark *mark, + atomic_set(&mark->refcnt, 1); + mark->free_mark = free_mark; + } ++EXPORT_SYMBOL_GPL(fsnotify_init_mark); + + static int fsnotify_mark_destroy(void *ignored) + { +diff --git a/fs/open.c b/fs/open.c +index 5a2c6eb..f0fa5b2 100644 +--- a/fs/open.c ++++ b/fs/open.c +@@ -60,6 +60,7 @@ int do_truncate(struct dentry *dentry, loff_t length, unsigned int time_attrs, + mutex_unlock(&dentry->d_inode->i_mutex); + return ret; + } ++EXPORT_SYMBOL_GPL(do_truncate); + + static long do_sys_truncate(const char __user *pathname, loff_t length) + { +diff --git a/fs/splice.c b/fs/splice.c +index 886e942..9a77a3e 100644 +--- a/fs/splice.c ++++ b/fs/splice.c +@@ -1105,6 +1105,7 @@ long do_splice_from(struct pipe_inode_info *pipe, struct file *out, + + return splice_write(pipe, out, ppos, len, flags); + } ++EXPORT_SYMBOL_GPL(do_splice_from); + + /* + * Attempt to initiate a splice from a file to a pipe. +@@ -1131,6 +1132,7 @@ long do_splice_to(struct file *in, loff_t *ppos, + + return splice_read(in, ppos, pipe, len, flags); + } ++EXPORT_SYMBOL_GPL(do_splice_to); + + /** + * splice_direct_to_actor - splices data directly between two non-pipes +diff --git a/security/commoncap.c b/security/commoncap.c +index 64c2ed9..e58b5d8 100644 +--- a/security/commoncap.c ++++ b/security/commoncap.c +@@ -929,3 +929,4 @@ int cap_file_mmap(struct file *file, unsigned long reqprot, + } + return ret; + } ++EXPORT_SYMBOL_GPL(cap_file_mmap); +diff --git a/security/device_cgroup.c b/security/device_cgroup.c +index 8d9c48f..29108aa 100644 +--- a/security/device_cgroup.c ++++ b/security/device_cgroup.c +@@ -515,6 +515,7 @@ found: + + return -EPERM; + } ++EXPORT_SYMBOL_GPL(devcgroup_inode_permission); + + int devcgroup_inode_mknod(int mode, dev_t dev) + { +diff --git a/security/security.c b/security/security.c +index 7b7308a..140afc7 100644 +--- a/security/security.c ++++ b/security/security.c +@@ -359,6 +359,7 @@ int security_path_mkdir(struct path *dir, struct dentry *dentry, int mode) + return 0; + return security_ops->path_mkdir(dir, dentry, mode); + } ++EXPORT_SYMBOL_GPL(security_path_mkdir); + + int security_path_rmdir(struct path *dir, struct dentry *dentry) + { +@@ -366,6 +367,7 @@ int security_path_rmdir(struct path *dir, struct dentry *dentry) + return 0; + return security_ops->path_rmdir(dir, dentry); + } ++EXPORT_SYMBOL_GPL(security_path_rmdir); + + int security_path_unlink(struct path *dir, struct dentry *dentry) + { +@@ -373,6 +375,7 @@ int security_path_unlink(struct path *dir, struct dentry *dentry) + return 0; + return security_ops->path_unlink(dir, dentry); + } ++EXPORT_SYMBOL_GPL(security_path_unlink); + + int security_path_symlink(struct path *dir, struct dentry *dentry, + const char *old_name) +@@ -381,6 +384,7 @@ int security_path_symlink(struct path *dir, struct dentry *dentry, + return 0; + return security_ops->path_symlink(dir, dentry, old_name); + } ++EXPORT_SYMBOL_GPL(security_path_symlink); + + int security_path_link(struct dentry *old_dentry, struct path *new_dir, + struct dentry *new_dentry) +@@ -389,6 +393,7 @@ int security_path_link(struct dentry *old_dentry, struct path *new_dir, + return 0; + return security_ops->path_link(old_dentry, new_dir, new_dentry); + } ++EXPORT_SYMBOL_GPL(security_path_link); + + int security_path_rename(struct path *old_dir, struct dentry *old_dentry, + struct path *new_dir, struct dentry *new_dentry) +@@ -399,6 +404,7 @@ int security_path_rename(struct path *old_dir, struct dentry *old_dentry, + return security_ops->path_rename(old_dir, old_dentry, new_dir, + new_dentry); + } ++EXPORT_SYMBOL_GPL(security_path_rename); + + int security_path_truncate(struct path *path) + { +@@ -406,6 +412,7 @@ int security_path_truncate(struct path *path) + return 0; + return security_ops->path_truncate(path); + } ++EXPORT_SYMBOL_GPL(security_path_truncate); + + int security_path_chmod(struct dentry *dentry, struct vfsmount *mnt, + mode_t mode) +@@ -414,6 +421,7 @@ int security_path_chmod(struct dentry *dentry, struct vfsmount *mnt, + return 0; + return security_ops->path_chmod(dentry, mnt, mode); + } ++EXPORT_SYMBOL_GPL(security_path_chmod); + + int security_path_chown(struct path *path, uid_t uid, gid_t gid) + { +@@ -421,6 +429,7 @@ int security_path_chown(struct path *path, uid_t uid, gid_t gid) + return 0; + return security_ops->path_chown(path, uid, gid); + } ++EXPORT_SYMBOL_GPL(security_path_chown); + + int security_path_chroot(struct path *path) + { +@@ -497,6 +506,7 @@ int security_inode_readlink(struct dentry *dentry) + return 0; + return security_ops->inode_readlink(dentry); + } ++EXPORT_SYMBOL_GPL(security_inode_readlink); + + int security_inode_follow_link(struct dentry *dentry, struct nameidata *nd) + { +@@ -511,6 +521,7 @@ int security_inode_permission(struct inode *inode, int mask) + return 0; + return security_ops->inode_permission(inode, mask); + } ++EXPORT_SYMBOL_GPL(security_inode_permission); + + int security_inode_exec_permission(struct inode *inode, unsigned int flags) + { +@@ -619,6 +630,7 @@ int security_file_permission(struct file *file, int mask) + + return fsnotify_perm(file, mask); + } ++EXPORT_SYMBOL_GPL(security_file_permission); + + int security_file_alloc(struct file *file) + { +@@ -646,6 +658,7 @@ int security_file_mmap(struct file *file, unsigned long reqprot, + return ret; + return ima_file_mmap(file, prot); + } ++EXPORT_SYMBOL_GPL(security_file_mmap); + + int security_file_mprotect(struct vm_area_struct *vma, unsigned long reqprot, + unsigned long prot) --- linux-2.6-3.0.0~rc6.orig/debian/patches/features/all/aufs2/mark-as-staging.patch +++ linux-2.6-3.0.0~rc6/debian/patches/features/all/aufs2/mark-as-staging.patch @@ -0,0 +1,15 @@ +From: Ben Hutchings +Subject: [PATCH] aufs: mark as staging + +I really don't want to support this. + +--- a/fs/aufs/module.c ++++ b/fs/aufs/module.c +@@ -89,6 +89,7 @@ + MODULE_DESCRIPTION(AUFS_NAME + " -- Advanced multi layered unification filesystem"); + MODULE_VERSION(AUFS_VERSION); ++MODULE_INFO(staging, "Y"); + + /* this module parameter has no meaning when SYSFS is disabled */ + int sysaufs_brs = 1; --- linux-2.6-3.0.0~rc6.orig/debian/patches/features/all/aufs2/aufs2-base.patch +++ linux-2.6-3.0.0~rc6/debian/patches/features/all/aufs2/aufs2-base.patch @@ -0,0 +1,78 @@ +aufs2.1 base patch for linux-2.6. + +diff --git a/fs/namei.c b/fs/namei.c +index 0087cf9..cd39cdf 100644 +--- a/fs/namei.c ++++ b/fs/namei.c +@@ -1841,12 +1841,12 @@ out: + * needs parent already locked. Doesn't follow mounts. + * SMP-safe. + */ +-static struct dentry *lookup_hash(struct nameidata *nd) ++struct dentry *lookup_hash(struct nameidata *nd) + { + return __lookup_hash(&nd->last, nd->path.dentry, nd); + } + +-static int __lookup_one_len(const char *name, struct qstr *this, ++int __lookup_one_len(const char *name, struct qstr *this, + struct dentry *base, int len) + { + unsigned long hash; +diff --git a/fs/splice.c b/fs/splice.c +index 50a5d97..886e942 100644 +--- a/fs/splice.c ++++ b/fs/splice.c +@@ -1081,8 +1081,8 @@ EXPORT_SYMBOL_GPL(generic_splice_sendpage); + /* + * Attempt to initiate a splice from pipe to file. + */ +-static long do_splice_from(struct pipe_inode_info *pipe, struct file *out, +- loff_t *ppos, size_t len, unsigned int flags) ++long do_splice_from(struct pipe_inode_info *pipe, struct file *out, ++ loff_t *ppos, size_t len, unsigned int flags) + { + ssize_t (*splice_write)(struct pipe_inode_info *, struct file *, + loff_t *, size_t, unsigned int); +@@ -1109,9 +1109,9 @@ static long do_splice_from(struct pipe_inode_info *pipe, struct file *out, + /* + * Attempt to initiate a splice from a file to a pipe. + */ +-static long do_splice_to(struct file *in, loff_t *ppos, +- struct pipe_inode_info *pipe, size_t len, +- unsigned int flags) ++long do_splice_to(struct file *in, loff_t *ppos, ++ struct pipe_inode_info *pipe, size_t len, ++ unsigned int flags) + { + ssize_t (*splice_read)(struct file *, loff_t *, + struct pipe_inode_info *, size_t, unsigned int); +diff --git a/include/linux/namei.h b/include/linux/namei.h +index f276d4f..4eb5fcb 100644 +--- a/include/linux/namei.h ++++ b/include/linux/namei.h +@@ -79,6 +79,9 @@ extern int vfs_path_lookup(struct dentry *, struct vfsmount *, + extern struct file *lookup_instantiate_filp(struct nameidata *nd, struct dentry *dentry, + int (*open)(struct inode *, struct file *)); + ++extern struct dentry *lookup_hash(struct nameidata *nd); ++extern int __lookup_one_len(const char *name, struct qstr *this, ++ struct dentry *base, int len); + extern struct dentry *lookup_one_len(const char *, struct dentry *, int); + + extern int follow_down_one(struct path *); +diff --git a/include/linux/splice.h b/include/linux/splice.h +index 997c3b4..be9a153 100644 +--- a/include/linux/splice.h ++++ b/include/linux/splice.h +@@ -89,4 +89,10 @@ extern int splice_grow_spd(struct pipe_inode_info *, struct splice_pipe_desc *); + extern void splice_shrink_spd(struct pipe_inode_info *, + struct splice_pipe_desc *); + ++extern long do_splice_from(struct pipe_inode_info *pipe, struct file *out, ++ loff_t *ppos, size_t len, unsigned int flags); ++extern long do_splice_to(struct file *in, loff_t *ppos, ++ struct pipe_inode_info *pipe, size_t len, ++ unsigned int flags); ++ + #endif --- linux-2.6-3.0.0~rc6.orig/debian/patches/features/all/aufs2/gen-patch +++ linux-2.6-3.0.0~rc6/debian/patches/features/all/aufs2/gen-patch @@ -0,0 +1,17 @@ +#!/bin/bash -e + +aufs_dir="$1" + +for patch in aufs2-{base,kbuild,standalone}.patch; do + sed 's/^+.*EXPORT_SYMBOL\b/&_GPL/' < "$aufs_dir"/"$patch" \ + > debian/patches/features/all/aufs2/"$patch" +done + +{ + cd "$aufs_dir" && \ + { find fs -type f; echo include/linux/aufs_type.h; } | \ + LC_ALL=C sort | \ + while read file; do + diff -uN a/"$file" "$file" | filterdiff --addnewprefix=b/ + done +} > debian/patches/features/all/aufs2/aufs2-add.patch --- linux-2.6-3.0.0~rc6.orig/debian/patches/features/all/aufs2/Fix-aufs-calling-of-security_path_mknod.patch +++ linux-2.6-3.0.0~rc6/debian/patches/features/all/aufs2/Fix-aufs-calling-of-security_path_mknod.patch @@ -0,0 +1,31 @@ +Date: Thu, 24 Feb 2011 09:40:31 -0800 +From: John Johansen +Subject: [natty] Fix aufs calling of security_path_mknod + +Fix aufs calling of security_path_mknod + +BugLink: http://launchpad.net/bugs/724456 + +The security_path_mknod hook requires an encoded 'dev' for its 'dev' paramet +but aufs is calling security_path_mknod with a 'dev' that was already +converted by 'new_decode_dev(dev)'. However security_path_mknod and its +consumer TOMOYO is expecting 'dev' rather than 'new_decode_dev(dev)'. + +This will result in TOMOYO doing new_decode_dev(new_decode_dev(dev)) +(which is wrong) when security_path_mknod() is called from aufs' vfsub_mknod + +Signed-off-by: Tetsuo Handa +Signed-off-by: John Johansen +[bwh: Change source paths for Debian] + +--- a/fs/aufs/vfsub.c ++++ b/fs/aufs/vfsub.c +@@ -276,7 +276,7 @@ int vfsub_mknod(struct inode *dir, struct path *path, int mo + + d = path->dentry; + path->dentry = d->d_parent; +- err = security_path_mknod(path, d, mode, dev); ++ err = security_path_mknod(path, d, mode, new_encode_dev(dev)); + path->dentry = d; + if (unlikely(err)) + goto out; --- linux-2.6-3.0.0~rc6.orig/debian/patches/features/all/vserver/gen-patch +++ linux-2.6-3.0.0~rc6/debian/patches/features/all/vserver/gen-patch @@ -0,0 +1,14 @@ +#!/bin/sh +patch="$1" + +error() { + echo "$@"; + exit 1 +} + +version=$(filterdiff -p 1 -i Makefile "$patch" | grep "+EXTRAVERSION" | sed -e 's,.*-vs,vs,') +[ "$version" ] || error "can't find version!" + +file="$(dirname $0)/$version.patch" + +filterdiff -p 1 --strip 1 --addprefix=a/ -x Makefile -x include/linux/Kbuild -x include/linux/vserver/Kbuild "$patch" | grep -v "^diff" > "$file" --- linux-2.6-3.0.0~rc6.orig/debian/patches/series/base +++ linux-2.6-3.0.0~rc6/debian/patches/series/base @@ -0,0 +1,52 @@ ++ debian/version.patch ++ debian/kernelvariables.patch ++ debian/doc-build-parallel.patch + ++ features/all/drivers-media-dvb-usb-af9005-request_firmware.patch + ++ features/all/sound-pci-cs46xx-request_firmware.patch + +# Patches and source files from aufs2 repository, imported with +# debian/patches/features/all/aufs2/gen-patch. +#+ features/all/aufs2/aufs2-base.patch +#+ features/all/aufs2/aufs2-standalone.patch +#+ features/all/aufs2/aufs2-kbuild.patch +#+ features/all/aufs2/aufs2-add.patch +# mark as staging/crap +#+ features/all/aufs2/mark-as-staging.patch +# fix not upstream yet +#+ features/all/aufs2/Fix-aufs-calling-of-security_path_mknod.patch + ++ bugfix/ia64/hardcode-arch-script-output.patch ++ bugfix/mips/disable-advansys.patch ++ bugfix/arm/disable-scsi_acard.patch ++ debian/mips-disable-werror.patch ++ bugfix/powerpc/lpar-console.patch +#+ bugfix/all/wireless-regulatory-default-EU.patch + ++ debian/sysrq-mask.patch ++ debian/module-bug-Add-TAINT_OOT_MODULE-flag.patch + ++ debian/arch-sh4-fix-uimage-build.patch + ++ debian/af_802154-Disable-auto-loading-as-mitigation-against.patch ++ debian/rds-Disable-auto-loading-as-mitigation-against-local.patch ++ debian/decnet-Disable-auto-loading-as-mitigation-against-lo.patch + ++ bugfix/mips/mips-ide-flush-dcache.patch ++ bugfix/x86/Skip-looking-for-ioapic-overrides-when-ioapics-are-not-present.patch ++ bugfix/all/dm-Deal-with-merge_bvec_fn-in-component-devices-bett.patch ++ features/all/Kbuild-kconfig-Verbose-version-of-listnewconfig.patch + ++ debian/sched-autogroup-disabled.patch ++ bugfix/all/rt2800-disable-powersaving-as-default.patch ++ features/all/cgroups-Allow-memory-cgroup-support-to-be-included-b.patch ++ debian/cgroups-Document-the-Debian-memory-resource-controll.patch ++ bugfix/mips/mips-i8259-use-struct-syscore_ops-instead-of-sysdevs.patch ++ bugfix/ia64/nouveau-ACPI-support-is-dependent-on-X86.patch ++ features/all/rt2x00-Add-device-ID-for-RT539F-device.patch ++ bugfix/all/Add-KEY_MICMUTE-and-enable-it-on-Lenovo-X220.patch ++ bugfix/all/resources-Add-lookup_resource.patch ++ bugfix/all/m68k-atari-Reserve-some-ST-RAM-early-on-for-device-b.patch ++ bugfix/all/ALSA-hda-Handle-1-as-invalid-position-too.patch ++ bugfix/all/ALSA-hda-Judge-playback-stream-from-stream-id-in-azx.patch --- linux-2.6-3.0.0~rc6.orig/debian/patches/series/base-extra +++ linux-2.6-3.0.0~rc6/debian/patches/series/base-extra @@ -0,0 +1 @@ + --- linux-2.6-3.0.0~rc6.orig/debian/patches/series/orig-0 +++ linux-2.6-3.0.0~rc6/debian/patches/series/orig-0 @@ -0,0 +1,8 @@ ++ debian/dfsg/arch-powerpc-platforms-8xx-ucode-disable.patch ++ debian/dfsg/drivers-media-dvb-dvb-usb-af9005-disable.patch ++ debian/dfsg/drivers-net-appletalk-cops.patch ++ debian/dfsg/drivers-staging-wlags49_h2-disable.patch ++ debian/dfsg/drivers-staging-wlags49_h25-disable.patch ++ debian/dfsg/firmware-cleanup.patch ++ debian/dfsg/sound-pci.patch +X debian/dfsg/files-1 --- linux-2.6-3.0.0~rc6.orig/debian/patches/bugfix/arm/disable-scsi_acard.patch +++ linux-2.6-3.0.0~rc6/debian/patches/bugfix/arm/disable-scsi_acard.patch @@ -0,0 +1,16 @@ +ERROR: "__bad_udelay" [drivers/scsi/atp870u.ko] undefined! +make[1]: *** [__modpost] Error 1 + +diff --git a/drivers/scsi/Kconfig b/drivers/scsi/Kconfig +index a7a0813..fa6a4fe 100644 +--- a/drivers/scsi/Kconfig ++++ b/drivers/scsi/Kconfig +@@ -396,7 +396,7 @@ config SCSI_7000FASST + + config SCSI_ACARD + tristate "ACARD SCSI support" +- depends on PCI && SCSI ++ depends on PCI && SCSI && (!ARM || BROKEN) + help + This driver supports the ACARD SCSI host adapter. + Support Chip --- linux-2.6-3.0.0~rc6.orig/debian/patches/bugfix/ia64/hardcode-arch-script-output.patch +++ linux-2.6-3.0.0~rc6/debian/patches/bugfix/ia64/hardcode-arch-script-output.patch @@ -0,0 +1,49 @@ +diff --git a/arch/ia64/Makefile b/arch/ia64/Makefile +index e7cbaa0..c8af869 100644 +--- a/arch/ia64/Makefile ++++ b/arch/ia64/Makefile +@@ -30,16 +30,7 @@ cflags-y := -pipe $(EXTRA) -ffixed-r13 -mfixed-range=f12-f15,f32-f127 \ + -falign-functions=32 -frename-registers -fno-optimize-sibling-calls + KBUILD_CFLAGS_KERNEL := -mconstant-gp + +-GAS_STATUS = $(shell $(srctree)/arch/ia64/scripts/check-gas "$(CC)" "$(OBJDUMP)") +-KBUILD_CPPFLAGS += $(shell $(srctree)/arch/ia64/scripts/toolchain-flags "$(CC)" "$(OBJDUMP)" "$(READELF)") +- +-ifeq ($(GAS_STATUS),buggy) +-$(error Sorry, you need a newer version of the assember, one that is built from \ +- a source-tree that post-dates 18-Dec-2002. You can find a pre-compiled \ +- static binary of such an assembler at: \ +- \ +- ftp://ftp.hpl.hp.com/pub/linux-ia64/gas-030124.tar.gz) +-endif ++KBUILD_CPPFLAGS += -DHAVE_WORKING_TEXT_ALIGN -DHAVE_MODEL_SMALL_ATTRIBUTE -DHAVE_SERIALIZE_DIRECTIVE + + KBUILD_CFLAGS += $(cflags-y) + head-y := arch/ia64/kernel/head.o arch/ia64/kernel/init_task.o +@@ -69,7 +60,7 @@ boot := arch/ia64/hp/sim/boot + + PHONY += boot compressed check + +-all: compressed unwcheck ++all: compressed + + compressed: vmlinux.gz + +@@ -78,9 +69,6 @@ vmlinuz: vmlinux.gz + vmlinux.gz: vmlinux + $(Q)$(MAKE) $(build)=$(boot) $@ + +-unwcheck: vmlinux +- -$(Q)READELF=$(READELF) python $(srctree)/arch/ia64/scripts/unwcheck.py $< +- + archclean: + $(Q)$(MAKE) $(clean)=$(boot) + +@@ -96,7 +84,6 @@ define archhelp + echo '* compressed - Build compressed kernel image' + echo ' install - Install compressed kernel image' + echo ' boot - Build vmlinux and bootloader for Ski simulator' +- echo '* unwcheck - Check vmlinux for invalid unwind info' + endef + + archprepare: make_nr_irqs_h FORCE --- linux-2.6-3.0.0~rc6.orig/debian/patches/bugfix/ia64/nouveau-ACPI-support-is-dependent-on-X86.patch +++ linux-2.6-3.0.0~rc6/debian/patches/bugfix/ia64/nouveau-ACPI-support-is-dependent-on-X86.patch @@ -0,0 +1,59 @@ +From 25d4d4e2d243622dfbd35a29e3fee9ce5f099fd2 Mon Sep 17 00:00:00 2001 +From: Ben Hutchings +Date: Mon, 6 Jun 2011 00:58:46 +0100 +Subject: [PATCH] nouveau: ACPI support is dependent on X86 + +The ACPI support code probably wasn't very useful on ia64, and now +depends on mxm-wmi which is definitely x86-only. + +Signed-off-by: Ben Hutchings +--- + drivers/gpu/drm/nouveau/Kconfig | 4 ++-- + drivers/gpu/drm/nouveau/Makefile | 2 ++ + drivers/gpu/drm/nouveau/nouveau_drv.h | 2 +- + 3 files changed, 5 insertions(+), 3 deletions(-) + +diff --git a/drivers/gpu/drm/nouveau/Kconfig b/drivers/gpu/drm/nouveau/Kconfig +index ca16399..5a85697 100644 +--- a/drivers/gpu/drm/nouveau/Kconfig ++++ b/drivers/gpu/drm/nouveau/Kconfig +@@ -11,8 +11,8 @@ config DRM_NOUVEAU + select FRAMEBUFFER_CONSOLE if !EXPERT + select FB_BACKLIGHT if DRM_NOUVEAU_BACKLIGHT + select ACPI_VIDEO if ACPI && X86 && BACKLIGHT_CLASS_DEVICE && VIDEO_OUTPUT_CONTROL && INPUT +- select ACPI_WMI if ACPI +- select MXM_WMI if ACPI ++ select ACPI_WMI if ACPI && X86 ++ select MXM_WMI if ACPI && X86 + help + Choose this option for open-source nVidia support. + +diff --git a/drivers/gpu/drm/nouveau/Makefile b/drivers/gpu/drm/nouveau/Makefile +index 0583677..797b808 100644 +--- a/drivers/gpu/drm/nouveau/Makefile ++++ b/drivers/gpu/drm/nouveau/Makefile +@@ -37,6 +37,8 @@ nouveau-y := nouveau_drv.o nouveau_state.o nouveau_channel.o nouveau_mem.o \ + nouveau-$(CONFIG_DRM_NOUVEAU_DEBUG) += nouveau_debugfs.o + nouveau-$(CONFIG_COMPAT) += nouveau_ioc32.o + nouveau-$(CONFIG_DRM_NOUVEAU_BACKLIGHT) += nouveau_backlight.o ++ifdef CONFIG_X86 + nouveau-$(CONFIG_ACPI) += nouveau_acpi.o ++endif + + obj-$(CONFIG_DRM_NOUVEAU)+= nouveau.o +diff --git a/drivers/gpu/drm/nouveau/nouveau_drv.h b/drivers/gpu/drm/nouveau/nouveau_drv.h +index 9c56331..9ea5a17 100644 +--- a/drivers/gpu/drm/nouveau/nouveau_drv.h ++++ b/drivers/gpu/drm/nouveau/nouveau_drv.h +@@ -968,7 +968,7 @@ extern int nouveau_dma_wait(struct nouveau_channel *, int slots, int size); + + /* nouveau_acpi.c */ + #define ROM_BIOS_PAGE 4096 +-#if defined(CONFIG_ACPI) ++#if defined(CONFIG_ACPI) && defined(CONFIG_X86) + void nouveau_register_dsm_handler(void); + void nouveau_unregister_dsm_handler(void); + int nouveau_acpi_get_bios_chunk(uint8_t *bios, int offset, int len); +-- +1.7.5.3 + --- linux-2.6-3.0.0~rc6.orig/debian/patches/bugfix/ia64/ia64-Include-linux-personality.h-header-in-asm-fcntl.patch +++ linux-2.6-3.0.0~rc6/debian/patches/bugfix/ia64/ia64-Include-linux-personality.h-header-in-asm-fcntl.patch @@ -0,0 +1,29 @@ +From 566d4fd4a07a92fa0023d29d2ad5477bad537288 Mon Sep 17 00:00:00 2001 +From: Ben Hutchings +Date: Sat, 19 Dec 2009 14:51:09 +0000 +Subject: [PATCH] ia64: Include header in + +The definition of force_o_largefile() references personality, but this +header does not include . This happens to work +for sys_open(), but may not for any other users. In particular, aufs2 +now uses this macro and so fails to build on ia64. +--- + arch/ia64/include/asm/fcntl.h | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +diff --git a/arch/ia64/include/asm/fcntl.h b/arch/ia64/include/asm/fcntl.h +index 1dd275d..3cac8f9 100644 +--- a/arch/ia64/include/asm/fcntl.h ++++ b/arch/ia64/include/asm/fcntl.h +@@ -5,6 +5,8 @@ + * David Mosberger-Tang , Hewlett-Packard Co. + */ + ++#include ++ + #define force_o_largefile() \ + (personality(current->personality) != PER_LINUX32) + +-- +1.6.5.7 + --- linux-2.6-3.0.0~rc6.orig/debian/patches/bugfix/x86/Skip-looking-for-ioapic-overrides-when-ioapics-are-not-present.patch +++ linux-2.6-3.0.0~rc6/debian/patches/bugfix/x86/Skip-looking-for-ioapic-overrides-when-ioapics-are-not-present.patch @@ -0,0 +1,47 @@ +Subject: Skip looking for ioapic overrides when ioapics are not present +Date: Sun, 06 Jun 2010 03:56:05 -0000 +From: Eric W. Biederman + +Avinash Kurup writes: + +> Hi Eric, +>     I get the following errors while booting into 2.6.35-rc1. I did not +> get these in 2.6.34 . The computer however boots and works fine, So its not +> serious but the following errors are displayed in dmesg. +> +> [    0.089969] ERROR: Unable to locate IOAPIC for GSI 13 +> [    0.090556] ERROR: Unable to locate IOAPIC for GSI 8 +> [    0.091104] ERROR: Unable to locate IOAPIC for GSI 12 +> [    0.091375] ERROR: Unable to locate IOAPIC for GSI 1 +> [    0.093195] ERROR: Unable to locate IOAPIC for GSI 4 +> [    0.094342] ERROR: Unable to locate IOAPIC for GSI 10 +> [    0.096335] ERROR: Unable to locate IOAPIC for GSI 6 + +The new warning originates from acpi_get_override_irq, which I changed to +use helper functions that warn when they fail. + +When IOAPICs and ACPI are enabled in a kernel and run on ACPI hardware +that doesn't use the ioapics the pnp acpi code calls this function, +looking for ACPI irq overrides. ACPI irq overrides exist only in the +ioapic case so this function will never succeed. So make the function +fail fast so we don't call into help functions that legitimately +complain when they fail. + +Tested-by: Avinash Kurup +Signed-off-by: "Eric W. Biederman" +[bwh: Add config condition] +--- +--- a/arch/x86/kernel/apic/io_apic.c ++++ b/arch/x86/kernel/apic/io_apic.c +@@ -4066,6 +4066,11 @@ int acpi_get_override_irq(u32 gsi, int *trigger, int *polarity) + { + int ioapic, pin, idx; + ++#ifdef CONFIG_ACPI ++ if (acpi_irq_model != ACPI_IRQ_MODEL_IOAPIC) ++ return -1; ++#endif ++ + if (skip_ioapic_setup) + return -1; + --- linux-2.6-3.0.0~rc6.orig/debian/patches/bugfix/mips/mips-i8259-use-struct-syscore_ops-instead-of-sysdevs.patch +++ linux-2.6-3.0.0~rc6/debian/patches/bugfix/mips/mips-i8259-use-struct-syscore_ops-instead-of-sysdevs.patch @@ -0,0 +1,74 @@ +From: Yoichi Yuasa +Date: Fri, 20 May 2011 13:41:41 +0000 (+0900) +Subject: MIPS: i8259: Use struct syscore_ops instead of sysdevs +X-Git-Tag: linux-3.0-rc1~12 +X-Git-Url: http://git.linux-mips.org/?p=linux.git;a=commitdiff_plain;h=297b7fdeac2d202c86e4b731d6e2ba03490ce3dd + +MIPS: i8259: Use struct syscore_ops instead of sysdevs + +Signed-off-by: Yoichi Yuasa +Cc: linux-mips +Patchwork: https://patchwork.linux-mips.org/patch/2394/ +Signed-off-by: Ralf Baechle +--- + +diff --git a/arch/mips/kernel/i8259.c b/arch/mips/kernel/i8259.c +index c018696..5c74eb7 100644 +--- a/arch/mips/kernel/i8259.c ++++ b/arch/mips/kernel/i8259.c +@@ -14,7 +14,7 @@ + #include + #include + #include +-#include ++#include + #include + + #include +@@ -215,14 +215,13 @@ spurious_8259A_irq: + } + } + +-static int i8259A_resume(struct sys_device *dev) ++static void i8259A_resume(void) + { + if (i8259A_auto_eoi >= 0) + init_8259A(i8259A_auto_eoi); +- return 0; + } + +-static int i8259A_shutdown(struct sys_device *dev) ++static void i8259A_shutdown(void) + { + /* Put the i8259A into a quiescent state that + * the kernel initialization code can get it +@@ -232,26 +231,17 @@ static int i8259A_shutdown(struct sys_device *dev) + outb(0xff, PIC_MASTER_IMR); /* mask all of 8259A-1 */ + outb(0xff, PIC_SLAVE_IMR); /* mask all of 8259A-1 */ + } +- return 0; + } + +-static struct sysdev_class i8259_sysdev_class = { +- .name = "i8259", ++static struct syscore_ops i8259_syscore_ops = { + .resume = i8259A_resume, + .shutdown = i8259A_shutdown, + }; + +-static struct sys_device device_i8259A = { +- .id = 0, +- .cls = &i8259_sysdev_class, +-}; +- + static int __init i8259A_init_sysfs(void) + { +- int error = sysdev_class_register(&i8259_sysdev_class); +- if (!error) +- error = sysdev_register(&device_i8259A); +- return error; ++ register_syscore_ops(&i8259_syscore_ops); ++ return 0; + } + + device_initcall(i8259A_init_sysfs); --- linux-2.6-3.0.0~rc6.orig/debian/patches/bugfix/mips/disable-advansys.patch +++ linux-2.6-3.0.0~rc6/debian/patches/bugfix/mips/disable-advansys.patch @@ -0,0 +1,19 @@ +Florian Lohoff reports the following build failure on IP32: + + MODPOST 552 modules +ERROR: "free_dma" [drivers/scsi/advansys.ko] undefined! +make[5]: *** [__modpost] Error 1 + +But report: +http://www.mail-archive.com/linux-scsi@vger.kernel.org/msg12773.html + +--- a/drivers/scsi/Kconfig 2007-12-27 19:16:18.000000000 +0000 ++++ b/drivers/scsi/Kconfig 2007-12-27 19:16:58.000000000 +0000 +@@ -523,6 +523,7 @@ + tristate "AdvanSys SCSI support" + depends on SCSI && VIRT_TO_BUS + depends on ISA || EISA || PCI ++ depends on (!MIPS && !ARM) || BROKEN + help + This is a driver for all SCSI host adapters manufactured by + AdvanSys. It is documented in the kernel source in --- linux-2.6-3.0.0~rc6.orig/debian/patches/bugfix/mips/mips-ide-flush-dcache.patch +++ linux-2.6-3.0.0~rc6/debian/patches/bugfix/mips/mips-ide-flush-dcache.patch @@ -0,0 +1,46 @@ +From: Sebastian Andrzej Siewior +Subject: mips/ide: flush dcache also if icache does not snoop dcache + +If this is not done then the new just read data which remains in dcache +will not make it into icache on time. Thus the CPU loads invalid data +and executes crap. The result is that the user is not able to execute +anything from its IDE based media while reading plain data is still +working well. +This problem has been reported as Debian #404951. + +Cc: stable@kernel.org +Signed-off-by: Sebastian Andrzej Siewior +--- + arch/mips/include/asm/mach-generic/ide.h | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/arch/mips/include/asm/mach-generic/ide.h b/arch/mips/include/asm/mach-generic/ide.h +index 9c93a5b..e80e47f 100644 +--- a/arch/mips/include/asm/mach-generic/ide.h ++++ b/arch/mips/include/asm/mach-generic/ide.h +@@ -23,7 +23,7 @@ + static inline void __ide_flush_prologue(void) + { + #ifdef CONFIG_SMP +- if (cpu_has_dc_aliases) ++ if (cpu_has_dc_aliases || !cpu_has_ic_fills_f_dc) + preempt_disable(); + #endif + } +@@ -31,14 +31,14 @@ static inline void __ide_flush_prologue(void) + static inline void __ide_flush_epilogue(void) + { + #ifdef CONFIG_SMP +- if (cpu_has_dc_aliases) ++ if (cpu_has_dc_aliases || !cpu_has_ic_fills_f_dc) + preempt_enable(); + #endif + } + + static inline void __ide_flush_dcache_range(unsigned long addr, unsigned long size) + { +- if (cpu_has_dc_aliases) { ++ if (cpu_has_dc_aliases || !cpu_has_ic_fills_f_dc) { + unsigned long end = addr + size; + + while (addr < end) { --- linux-2.6-3.0.0~rc6.orig/debian/patches/bugfix/all/ALSA-hda-Handle-1-as-invalid-position-too.patch +++ linux-2.6-3.0.0~rc6/debian/patches/bugfix/all/ALSA-hda-Handle-1-as-invalid-position-too.patch @@ -0,0 +1,55 @@ +From a810364a0424c297242c6c66071a42f7675a5568 Mon Sep 17 00:00:00 2001 +From: Takashi Iwai +Date: Tue, 7 Jun 2011 12:23:23 +0200 +Subject: [PATCH] ALSA: hda - Handle -1 as invalid position, too + +When reading from the position-buffer results in -1, handle as it's +invalid and falls back to LPIB mode as well as 0. + +Signed-off-by: Takashi Iwai +--- + sound/pci/hda/hda_intel.c | 21 +++++++++++---------- + 1 files changed, 11 insertions(+), 10 deletions(-) + +diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c +index 966f401..45cd02f 100644 +--- a/sound/pci/hda/hda_intel.c ++++ b/sound/pci/hda/hda_intel.c +@@ -1930,6 +1930,17 @@ static unsigned int azx_get_position(struct azx *chip, + default: + /* use the position buffer */ + pos = le32_to_cpu(*azx_dev->posbuf); ++ if (chip->position_fix[stream] == POS_FIX_AUTO) { ++ if (!pos || pos == (u32)-1) { ++ printk(KERN_WARNING ++ "hda-intel: Invalid position buffer, " ++ "using LPIB read method instead.\n"); ++ chip->position_fix[stream] = POS_FIX_LPIB; ++ pos = azx_sd_readl(azx_dev, SD_LPIB); ++ } else ++ chip->position_fix[stream] = POS_FIX_POSBUF; ++ } ++ break; + } + + if (pos >= azx_dev->bufsize) +@@ -1967,16 +1978,6 @@ static int azx_position_ok(struct azx *chip, struct azx_dev *azx_dev) + + stream = azx_dev->substream->stream; + pos = azx_get_position(chip, azx_dev); +- if (chip->position_fix[stream] == POS_FIX_AUTO) { +- if (!pos) { +- printk(KERN_WARNING +- "hda-intel: Invalid position buffer, " +- "using LPIB read method instead.\n"); +- chip->position_fix[stream] = POS_FIX_LPIB; +- pos = azx_get_position(chip, azx_dev); +- } else +- chip->position_fix[stream] = POS_FIX_POSBUF; +- } + + if (WARN_ONCE(!azx_dev->period_bytes, + "hda-intel: zero azx_dev->period_bytes")) +-- +1.7.2.5 + --- linux-2.6-3.0.0~rc6.orig/debian/patches/bugfix/all/resources-Add-lookup_resource.patch +++ linux-2.6-3.0.0~rc6/debian/patches/bugfix/all/resources-Add-lookup_resource.patch @@ -0,0 +1,62 @@ +From 1789c38726c2805563e9049dbc5d5253251761a7 Mon Sep 17 00:00:00 2001 +From: Geert Uytterhoeven +Date: Sat, 7 May 2011 20:53:16 +0200 +Subject: [PATCH] resources: Add lookup_resource() + +Add a function to find an existing resource by a resource start address. +This allows to implement simple allocators (with a malloc/free-alike API) +on top of the resource system. + +Signed-off-by: Geert Uytterhoeven +--- + include/linux/ioport.h | 1 + + kernel/resource.c | 21 +++++++++++++++++++++ + 2 files changed, 22 insertions(+), 0 deletions(-) + +diff --git a/include/linux/ioport.h b/include/linux/ioport.h +index e9bb22c..63eb429 100644 +--- a/include/linux/ioport.h ++++ b/include/linux/ioport.h +@@ -132,6 +132,7 @@ extern int allocate_resource(struct resource *root, struct resource *new, + resource_size_t, + resource_size_t), + void *alignf_data); ++struct resource *lookup_resource(struct resource *root, resource_size_t start); + int adjust_resource(struct resource *res, resource_size_t start, + resource_size_t size); + resource_size_t resource_alignment(struct resource *res); +diff --git a/kernel/resource.c b/kernel/resource.c +index 798e2fa..8d0b479 100644 +--- a/kernel/resource.c ++++ b/kernel/resource.c +@@ -473,6 +473,27 @@ int allocate_resource(struct resource *root, struct resource *new, + + EXPORT_SYMBOL(allocate_resource); + ++/** ++ * lookup_resource - find an existing resource by a resource start address ++ * @root: root resource descriptor ++ * @start: resource start address ++ * ++ * Returns a pointer to the resource if found, NULL otherwise ++ */ ++struct resource *lookup_resource(struct resource *root, resource_size_t start) ++{ ++ struct resource *res; ++ ++ read_lock(&resource_lock); ++ for (res = root->child; res; res = res->sibling) { ++ if (res->start == start) ++ break; ++ } ++ read_unlock(&resource_lock); ++ ++ return res; ++} ++ + /* + * Insert a resource into the resource tree. If successful, return NULL, + * otherwise return the conflicting resource (compare to __request_resource()) +-- +1.7.2.5 + --- linux-2.6-3.0.0~rc6.orig/debian/patches/bugfix/all/m68k-atari-Reserve-some-ST-RAM-early-on-for-device-b.patch +++ linux-2.6-3.0.0~rc6/debian/patches/bugfix/all/m68k-atari-Reserve-some-ST-RAM-early-on-for-device-b.patch @@ -0,0 +1,524 @@ +From 10b2495b79eb8c2b6ec92b3ce1e5577f892f7821 Mon Sep 17 00:00:00 2001 +From: Michael Schmitz +Date: Mon, 1 Nov 2010 19:54:00 +0100 +Subject: [PATCH] m68k/atari: Reserve some ST-RAM early on for device buffer use + +Based on an original patch from Michael Schmitz: + +Because mem_init() is now called before device init, devices that rely on +ST-RAM may find all ST-RAM already allocated to other users by the time +device init happens. In particular, a large initrd RAM disk may use up +enough of ST-RAM to cause atari_stram_alloc() to resort to +__get_dma_pages() allocation. + +In the current state of Atari memory management, all of RAM is marked +DMA capable, so __get_dma_pages() may well return RAM that is not in actual +fact DMA capable. Using this for frame buffer or SCSI DMA buffer causes +subtle failure. + +The ST-RAM allocator has been changed to allocate memory from a pool of +reserved ST-RAM of configurable size, set aside on ST-RAM init (i.e. +before mem_init()). As long as this pool is not exhausted, allocation of +real ST-RAM can be guaranteed. + +Other changes: + - Replace the custom allocator in the ST-RAM pool by the existing allocator + in the resource subsystem, + - Remove mem_init_done and its hook, as memory init is now done before + device init, + - Remove /proc/stram, as ST-RAM usage now shows up under /proc/iomem, e.g. + + 005f2000-006f1fff : ST-RAM Pool + 005f2000-0063dfff : atafb + 0063e000-00641fff : ataflop + 00642000-00642fff : SCSI + +Signed-off-by: Michael Schmitz +[Andreas Schwab : Use memparse()] +[Geert: Use the resource subsystem instead of a custom allocator] +Signed-off-by: Geert Uytterhoeven +--- + arch/m68k/Kconfig.mmu | 6 - + arch/m68k/atari/stram.c | 354 +++++++---------------------------- + arch/m68k/include/asm/atari_stram.h | 3 +- + arch/m68k/mm/init_mm.c | 5 - + 4 files changed, 70 insertions(+), 298 deletions(-) + +diff --git a/arch/m68k/Kconfig.mmu b/arch/m68k/Kconfig.mmu +index 16539b1..13e20bb 100644 +--- a/arch/m68k/Kconfig.mmu ++++ b/arch/m68k/Kconfig.mmu +@@ -372,12 +372,6 @@ config AMIGA_PCMCIA + Include support in the kernel for pcmcia on Amiga 1200 and Amiga + 600. If you intend to use pcmcia cards say Y; otherwise say N. + +-config STRAM_PROC +- bool "ST-RAM statistics in /proc" +- depends on ATARI +- help +- Say Y here to report ST-RAM usage statistics in /proc/stram. +- + config HEARTBEAT + bool "Use power LED as a heartbeat" if AMIGA || APOLLO || ATARI || MAC ||Q40 + default y if !AMIGA && !APOLLO && !ATARI && !MAC && !Q40 && HP300 +diff --git a/arch/m68k/atari/stram.c b/arch/m68k/atari/stram.c +index 6ec3b7f..0810c8d 100644 +--- a/arch/m68k/atari/stram.c ++++ b/arch/m68k/atari/stram.c +@@ -1,5 +1,5 @@ + /* +- * arch/m68k/atari/stram.c: Functions for ST-RAM allocations ++ * Functions for ST-RAM allocations + * + * Copyright 1994-97 Roman Hodek + * +@@ -30,91 +30,35 @@ + #include + #include + +-#undef DEBUG +- +-#ifdef DEBUG +-#define DPRINTK(fmt,args...) printk( fmt, ##args ) +-#else +-#define DPRINTK(fmt,args...) +-#endif +- +-#if defined(CONFIG_PROC_FS) && defined(CONFIG_STRAM_PROC) +-/* abbrev for the && above... */ +-#define DO_PROC +-#include +-#include +-#endif + + /* +- * ++roman: +- * +- * New version of ST-Ram buffer allocation. Instead of using the +- * 1 MB - 4 KB that remain when the ST-Ram chunk starts at $1000 +- * (1 MB granularity!), such buffers are reserved like this: +- * +- * - If the kernel resides in ST-Ram anyway, we can take the buffer +- * from behind the current kernel data space the normal way +- * (incrementing start_mem). +- * +- * - If the kernel is in TT-Ram, stram_init() initializes start and +- * end of the available region. Buffers are allocated from there +- * and mem_init() later marks the such used pages as reserved. +- * Since each TT-Ram chunk is at least 4 MB in size, I hope there +- * won't be an overrun of the ST-Ram region by normal kernel data +- * space. +- * +- * For that, ST-Ram may only be allocated while kernel initialization +- * is going on, or exactly: before mem_init() is called. There is also +- * no provision now for freeing ST-Ram buffers. It seems that isn't +- * really needed. +- * ++ * The ST-RAM allocator allocates memory from a pool of reserved ST-RAM of ++ * configurable size, set aside on ST-RAM init. ++ * As long as this pool is not exhausted, allocation of real ST-RAM can be ++ * guaranteed. + */ + +-/* Start and end (virtual) of ST-RAM */ +-static void *stram_start, *stram_end; +- +-/* set after memory_init() executed and allocations via start_mem aren't +- * possible anymore */ +-static int mem_init_done; +- + /* set if kernel is in ST-RAM */ + static int kernel_in_stram; + +-typedef struct stram_block { +- struct stram_block *next; +- void *start; +- unsigned long size; +- unsigned flags; +- const char *owner; +-} BLOCK; +- +-/* values for flags field */ +-#define BLOCK_FREE 0x01 /* free structure in the BLOCKs pool */ +-#define BLOCK_KMALLOCED 0x02 /* structure allocated by kmalloc() */ +-#define BLOCK_GFP 0x08 /* block allocated with __get_dma_pages() */ ++static struct resource stram_pool = { ++ .name = "ST-RAM Pool" ++}; + +-/* list of allocated blocks */ +-static BLOCK *alloc_list; ++static unsigned long pool_size = 1024*1024; + +-/* We can't always use kmalloc() to allocate BLOCK structures, since +- * stram_alloc() can be called rather early. So we need some pool of +- * statically allocated structures. 20 of them is more than enough, so in most +- * cases we never should need to call kmalloc(). */ +-#define N_STATIC_BLOCKS 20 +-static BLOCK static_blocks[N_STATIC_BLOCKS]; + +-/***************************** Prototypes *****************************/ ++static int __init atari_stram_setup(char *arg) ++{ ++ if (!MACH_IS_ATARI) ++ return 0; + +-static BLOCK *add_region( void *addr, unsigned long size ); +-static BLOCK *find_region( void *addr ); +-static int remove_region( BLOCK *block ); ++ pool_size = memparse(arg, NULL); ++ return 0; ++} + +-/************************* End of Prototypes **************************/ ++early_param("stram_pool", atari_stram_setup); + +- +-/* ------------------------------------------------------------------------ */ +-/* Public Interface */ +-/* ------------------------------------------------------------------------ */ + + /* + * This init function is called very early by atari/config.c +@@ -123,25 +67,23 @@ static int remove_region( BLOCK *block ); + void __init atari_stram_init(void) + { + int i; ++ void *stram_start; + +- /* initialize static blocks */ +- for( i = 0; i < N_STATIC_BLOCKS; ++i ) +- static_blocks[i].flags = BLOCK_FREE; +- +- /* determine whether kernel code resides in ST-RAM (then ST-RAM is the +- * first memory block at virtual 0x0) */ ++ /* ++ * determine whether kernel code resides in ST-RAM ++ * (then ST-RAM is the first memory block at virtual 0x0) ++ */ + stram_start = phys_to_virt(0); + kernel_in_stram = (stram_start == 0); + +- for( i = 0; i < m68k_num_memory; ++i ) { ++ for (i = 0; i < m68k_num_memory; ++i) { + if (m68k_memory[i].addr == 0) { +- /* skip first 2kB or page (supervisor-only!) */ +- stram_end = stram_start + m68k_memory[i].size; + return; + } + } ++ + /* Should never come here! (There is always ST-Ram!) */ +- panic( "atari_stram_init: no ST-RAM found!" ); ++ panic("atari_stram_init: no ST-RAM found!"); + } + + +@@ -151,226 +93,68 @@ void __init atari_stram_init(void) + */ + void __init atari_stram_reserve_pages(void *start_mem) + { +- /* always reserve first page of ST-RAM, the first 2 kB are +- * supervisor-only! */ ++ /* ++ * always reserve first page of ST-RAM, the first 2 KiB are ++ * supervisor-only! ++ */ + if (!kernel_in_stram) + reserve_bootmem(0, PAGE_SIZE, BOOTMEM_DEFAULT); + +-} ++ stram_pool.start = (resource_size_t)alloc_bootmem_low_pages(pool_size); ++ stram_pool.end = stram_pool.start + pool_size - 1; ++ request_resource(&iomem_resource, &stram_pool); + +-void atari_stram_mem_init_hook (void) +-{ +- mem_init_done = 1; ++ pr_debug("atari_stram pool: size = %lu bytes, resource = %pR\n", ++ pool_size, &stram_pool); + } + + +-/* +- * This is main public interface: somehow allocate a ST-RAM block +- * +- * - If we're before mem_init(), we have to make a static allocation. The +- * region is taken in the kernel data area (if the kernel is in ST-RAM) or +- * from the start of ST-RAM (if the kernel is in TT-RAM) and added to the +- * rsvd_stram_* region. The ST-RAM is somewhere in the middle of kernel +- * address space in the latter case. +- * +- * - If mem_init() already has been called, try with __get_dma_pages(). +- * This has the disadvantage that it's very hard to get more than 1 page, +- * and it is likely to fail :-( +- * +- */ +-void *atari_stram_alloc(long size, const char *owner) ++void *atari_stram_alloc(unsigned long size, const char *owner) + { +- void *addr = NULL; +- BLOCK *block; +- int flags; +- +- DPRINTK("atari_stram_alloc(size=%08lx,owner=%s)\n", size, owner); +- +- if (!mem_init_done) +- return alloc_bootmem_low(size); +- else { +- /* After mem_init(): can only resort to __get_dma_pages() */ +- addr = (void *)__get_dma_pages(GFP_KERNEL, get_order(size)); +- flags = BLOCK_GFP; +- DPRINTK( "atari_stram_alloc: after mem_init, " +- "get_pages=%p\n", addr ); ++ struct resource *res; ++ int error; ++ ++ pr_debug("atari_stram_alloc: allocate %lu bytes\n", size); ++ ++ /* round up */ ++ size = PAGE_ALIGN(size); ++ ++ res = kzalloc(sizeof(struct resource), GFP_KERNEL); ++ if (!res) ++ return NULL; ++ ++ res->name = owner; ++ error = allocate_resource(&stram_pool, res, size, 0, UINT_MAX, ++ PAGE_SIZE, NULL, NULL); ++ if (error < 0) { ++ pr_err("atari_stram_alloc: allocate_resource() failed %d!\n", ++ error); ++ kfree(res); ++ return NULL; + } + +- if (addr) { +- if (!(block = add_region( addr, size ))) { +- /* out of memory for BLOCK structure :-( */ +- DPRINTK( "atari_stram_alloc: out of mem for BLOCK -- " +- "freeing again\n" ); +- free_pages((unsigned long)addr, get_order(size)); +- return( NULL ); +- } +- block->owner = owner; +- block->flags |= flags; +- } +- return( addr ); ++ pr_debug("atari_stram_alloc: returning %pR\n", res); ++ return (void *)res->start; + } + EXPORT_SYMBOL(atari_stram_alloc); + +-void atari_stram_free( void *addr ) + ++void atari_stram_free(void *addr) + { +- BLOCK *block; +- +- DPRINTK( "atari_stram_free(addr=%p)\n", addr ); ++ unsigned long start = (unsigned long)addr; ++ struct resource *res; ++ unsigned long size; + +- if (!(block = find_region( addr ))) { +- printk( KERN_ERR "Attempt to free non-allocated ST-RAM block at %p " +- "from %p\n", addr, __builtin_return_address(0) ); ++ res = lookup_resource(&stram_pool, start); ++ if (!res) { ++ pr_err("atari_stram_free: trying to free nonexistent region " ++ "at %p\n", addr); + return; + } +- DPRINTK( "atari_stram_free: found block (%p): size=%08lx, owner=%s, " +- "flags=%02x\n", block, block->size, block->owner, block->flags ); +- +- if (!(block->flags & BLOCK_GFP)) +- goto fail; + +- DPRINTK("atari_stram_free: is kmalloced, order_size=%d\n", +- get_order(block->size)); +- free_pages((unsigned long)addr, get_order(block->size)); +- remove_region( block ); +- return; +- +- fail: +- printk( KERN_ERR "atari_stram_free: cannot free block at %p " +- "(called from %p)\n", addr, __builtin_return_address(0) ); ++ size = resource_size(res); ++ pr_debug("atari_stram_free: free %lu bytes at %p\n", size, addr); ++ release_resource(res); ++ kfree(res); + } + EXPORT_SYMBOL(atari_stram_free); +- +- +-/* ------------------------------------------------------------------------ */ +-/* Region Management */ +-/* ------------------------------------------------------------------------ */ +- +- +-/* insert a region into the alloced list (sorted) */ +-static BLOCK *add_region( void *addr, unsigned long size ) +-{ +- BLOCK **p, *n = NULL; +- int i; +- +- for( i = 0; i < N_STATIC_BLOCKS; ++i ) { +- if (static_blocks[i].flags & BLOCK_FREE) { +- n = &static_blocks[i]; +- n->flags = 0; +- break; +- } +- } +- if (!n && mem_init_done) { +- /* if statics block pool exhausted and we can call kmalloc() already +- * (after mem_init()), try that */ +- n = kmalloc( sizeof(BLOCK), GFP_KERNEL ); +- if (n) +- n->flags = BLOCK_KMALLOCED; +- } +- if (!n) { +- printk( KERN_ERR "Out of memory for ST-RAM descriptor blocks\n" ); +- return( NULL ); +- } +- n->start = addr; +- n->size = size; +- +- for( p = &alloc_list; *p; p = &((*p)->next) ) +- if ((*p)->start > addr) break; +- n->next = *p; +- *p = n; +- +- return( n ); +-} +- +- +-/* find a region (by start addr) in the alloced list */ +-static BLOCK *find_region( void *addr ) +-{ +- BLOCK *p; +- +- for( p = alloc_list; p; p = p->next ) { +- if (p->start == addr) +- return( p ); +- if (p->start > addr) +- break; +- } +- return( NULL ); +-} +- +- +-/* remove a block from the alloced list */ +-static int remove_region( BLOCK *block ) +-{ +- BLOCK **p; +- +- for( p = &alloc_list; *p; p = &((*p)->next) ) +- if (*p == block) break; +- if (!*p) +- return( 0 ); +- +- *p = block->next; +- if (block->flags & BLOCK_KMALLOCED) +- kfree( block ); +- else +- block->flags |= BLOCK_FREE; +- return( 1 ); +-} +- +- +- +-/* ------------------------------------------------------------------------ */ +-/* /proc statistics file stuff */ +-/* ------------------------------------------------------------------------ */ +- +-#ifdef DO_PROC +- +-#define PRINT_PROC(fmt,args...) seq_printf( m, fmt, ##args ) +- +-static int stram_proc_show(struct seq_file *m, void *v) +-{ +- BLOCK *p; +- +- PRINT_PROC("Total ST-RAM: %8u kB\n", +- (stram_end - stram_start) >> 10); +- PRINT_PROC( "Allocated regions:\n" ); +- for( p = alloc_list; p; p = p->next ) { +- PRINT_PROC("0x%08lx-0x%08lx: %s (", +- virt_to_phys(p->start), +- virt_to_phys(p->start+p->size-1), +- p->owner); +- if (p->flags & BLOCK_GFP) +- PRINT_PROC( "page-alloced)\n" ); +- else +- PRINT_PROC( "??)\n" ); +- } +- +- return 0; +-} +- +-static int stram_proc_open(struct inode *inode, struct file *file) +-{ +- return single_open(file, stram_proc_show, NULL); +-} +- +-static const struct file_operations stram_proc_fops = { +- .open = stram_proc_open, +- .read = seq_read, +- .llseek = seq_lseek, +- .release = single_release, +-}; +- +-static int __init proc_stram_init(void) +-{ +- proc_create("stram", 0, NULL, &stram_proc_fops); +- return 0; +-} +-module_init(proc_stram_init); +-#endif +- +- +-/* +- * Local variables: +- * c-indent-level: 4 +- * tab-width: 4 +- * End: +- */ +diff --git a/arch/m68k/include/asm/atari_stram.h b/arch/m68k/include/asm/atari_stram.h +index 7546d13..62e2759 100644 +--- a/arch/m68k/include/asm/atari_stram.h ++++ b/arch/m68k/include/asm/atari_stram.h +@@ -6,12 +6,11 @@ + */ + + /* public interface */ +-void *atari_stram_alloc(long size, const char *owner); ++void *atari_stram_alloc(unsigned long size, const char *owner); + void atari_stram_free(void *); + + /* functions called internally by other parts of the kernel */ + void atari_stram_init(void); + void atari_stram_reserve_pages(void *start_mem); +-void atari_stram_mem_init_hook (void); + + #endif /*_M68K_ATARI_STRAM_H */ +diff --git a/arch/m68k/mm/init_mm.c b/arch/m68k/mm/init_mm.c +index 9113c2f..bbe5254 100644 +--- a/arch/m68k/mm/init_mm.c ++++ b/arch/m68k/mm/init_mm.c +@@ -83,11 +83,6 @@ void __init mem_init(void) + int initpages = 0; + int i; + +-#ifdef CONFIG_ATARI +- if (MACH_IS_ATARI) +- atari_stram_mem_init_hook(); +-#endif +- + /* this will put all memory onto the freelists */ + totalram_pages = num_physpages = 0; + for_each_online_pgdat(pgdat) { +-- +1.7.2.5 + --- linux-2.6-3.0.0~rc6.orig/debian/patches/bugfix/all/ALSA-hda-Judge-playback-stream-from-stream-id-in-azx.patch +++ linux-2.6-3.0.0~rc6/debian/patches/bugfix/all/ALSA-hda-Judge-playback-stream-from-stream-id-in-azx.patch @@ -0,0 +1,29 @@ +From b4a655e81d4d1d12abc92d29dfb7550e66a08799 Mon Sep 17 00:00:00 2001 +From: Takashi Iwai +Date: Tue, 7 Jun 2011 12:26:56 +0200 +Subject: [PATCH] ALSA: hda - Judge playback stream from stream id in azx_via_get_position() + +Instead of checking the azx_dev index with a fixed number (4), check +the stream direction of the assigned substream. + +Signed-off-by: Takashi Iwai +--- + sound/pci/hda/hda_intel.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c +index 45cd02f..5f2d05a 100644 +--- a/sound/pci/hda/hda_intel.c ++++ b/sound/pci/hda/hda_intel.c +@@ -1866,7 +1866,7 @@ static unsigned int azx_via_get_position(struct azx *chip, + unsigned int fifo_size; + + link_pos = azx_sd_readl(azx_dev, SD_LPIB); +- if (azx_dev->index >= 4) { ++ if (azx_dev->substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { + /* Playback, no problem using link position */ + return link_pos; + } +-- +1.7.2.5 + --- linux-2.6-3.0.0~rc6.orig/debian/patches/bugfix/all/Add-KEY_MICMUTE-and-enable-it-on-Lenovo-X220.patch +++ linux-2.6-3.0.0~rc6/debian/patches/bugfix/all/Add-KEY_MICMUTE-and-enable-it-on-Lenovo-X220.patch @@ -0,0 +1,53 @@ +From 0198af5884040ec6ded1558f5f3d4e696898a19f Mon Sep 17 00:00:00 2001 +From: Andy Lutomirski +Date: Tue, 24 May 2011 15:16:43 -0400 +Subject: [PATCH] Add KEY_MICMUTE and enable it on Lenovo X220 + +I suspect that this works on T410. + +Signed-off-by: Andy Lutomirski +Signed-off-by: Matthew Garrett +--- + drivers/platform/x86/thinkpad_acpi.c | 11 ++++++++++- + include/linux/input.h | 2 ++ + 2 files changed, 12 insertions(+), 1 deletions(-) + +diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c +index 26c5b11..7bd829f 100644 +--- a/drivers/platform/x86/thinkpad_acpi.c ++++ b/drivers/platform/x86/thinkpad_acpi.c +@@ -3186,8 +3186,17 @@ static int __init hotkey_init(struct ibm_init_struct *iibm) + KEY_VENDOR, /* 0x17: Thinkpad/AccessIBM/Lenovo */ + + /* (assignments unknown, please report if found) */ ++ KEY_UNKNOWN, KEY_UNKNOWN, ++ ++ /* ++ * The mic mute button only sends 0x1a. It does not ++ * automatically mute the mic or change the mute light. ++ */ ++ KEY_MICMUTE, /* 0x1a: Mic mute (since ?400 or so) */ ++ ++ /* (assignments unknown, please report if found) */ + KEY_UNKNOWN, KEY_UNKNOWN, KEY_UNKNOWN, KEY_UNKNOWN, +- KEY_UNKNOWN, KEY_UNKNOWN, KEY_UNKNOWN, KEY_UNKNOWN, ++ KEY_UNKNOWN, + }, + }; + +diff --git a/include/linux/input.h b/include/linux/input.h +index 771d6d8..f26d3b7 100644 +--- a/include/linux/input.h ++++ b/include/linux/input.h +@@ -438,6 +438,8 @@ struct input_keymap_entry { + #define KEY_WIMAX 246 + #define KEY_RFKILL 247 /* Key that controls all radios */ + ++#define KEY_MICMUTE 248 /* Mute / unmute the microphone */ ++ + /* Code 255 is reserved for special needs of AT keyboard driver */ + + #define BTN_MISC 0x100 +-- +1.7.2.5 + --- linux-2.6-3.0.0~rc6.orig/debian/patches/bugfix/all/dm-Deal-with-merge_bvec_fn-in-component-devices-bett.patch +++ linux-2.6-3.0.0~rc6/debian/patches/bugfix/all/dm-Deal-with-merge_bvec_fn-in-component-devices-bett.patch @@ -0,0 +1,47 @@ +From: Ben Hutchings +Date: Sun, 28 Nov 2010 23:46:46 +0000 +Subject: [PATCH] dm: Deal with merge_bvec_fn in component devices better + +This is analogous to commit 627a2d3c29427637f4c5d31ccc7fcbd8d312cd71, +which does the same for md-devices at the top of the stack. The +following explanation is taken from that commit. Thanks to Neil Brown + for the advice. + +If a component device has a merge_bvec_fn then as we never call it +we must ensure we never need to. Currently this is done by setting +max_sector to 1 PAGE, however this does not stop a bio being created +with several sub-page iovecs that would violate the merge_bvec_fn. + +So instead set max_segments to 1 and set the segment boundary to the +same as a page boundary to ensure there is only ever one single-page +segment of IO requested at a time. + +This can particularly be an issue when 'xen' is used as it is +known to submit multiple small buffers in a single bio. + +Signed-off-by: Ben Hutchings +--- +--- a/drivers/md/dm-table.c ++++ b/drivers/md/dm-table.c +@@ -511,14 +511,15 @@ int dm_set_device_limits(struct dm_target *ti, struct dm_dev *dev, + (unsigned long long) start << SECTOR_SHIFT); + + /* +- * Check if merge fn is supported. +- * If not we'll force DM to use PAGE_SIZE or +- * smaller I/O, just to be safe. ++ * If we don't call merge_bvec_fn, we must never risk ++ * violating it, so limit max_phys_segments to 1 lying within ++ * a single page. + */ ++ if (q->merge_bvec_fn && !ti->type->merge) { ++ limits->max_segments = 1; ++ limits->seg_boundary_mask = PAGE_CACHE_SIZE - 1; ++ } + +- if (q->merge_bvec_fn && !ti->type->merge) +- blk_limits_max_hw_sectors(limits, +- (unsigned int) (PAGE_SIZE >> 9)); + return 0; + } + EXPORT_SYMBOL_GPL(dm_set_device_limits); --- linux-2.6-3.0.0~rc6.orig/debian/patches/bugfix/all/wireless-regulatory-default-EU.patch +++ linux-2.6-3.0.0~rc6/debian/patches/bugfix/all/wireless-regulatory-default-EU.patch @@ -0,0 +1,13 @@ +diff --git a/net/wireless/reg.c b/net/wireless/reg.c +index 855bff4..5969480 100644 +--- a/net/wireless/reg.c ++++ b/net/wireless/reg.c +@@ -29,7 +29,7 @@ + #include + #include "core.h" + +-static char *ieee80211_regdom = "US"; ++static char *ieee80211_regdom = "EU"; + module_param(ieee80211_regdom, charp, 0444); + MODULE_PARM_DESC(ieee80211_regdom, "IEEE 802.11 regulatory domain code"); + --- linux-2.6-3.0.0~rc6.orig/debian/patches/bugfix/all/rt2800-disable-powersaving-as-default.patch +++ linux-2.6-3.0.0~rc6/debian/patches/bugfix/all/rt2800-disable-powersaving-as-default.patch @@ -0,0 +1,27 @@ +From: Johannes Stezenbach +Date: Wed Jan 19 04:43:34 EST 2011 +Subject: [PATCH RFC] rt2800: disable powersaving as default + +Powersaving is broken on rt2800usb (the hardware cannot do timed wakeup +to receive beacons) and also on rt2800pci currently (auto-wakeup irq +does no seem to work, for reasons so far unknown). + +Signed-off-by: Johannes Stezenbach + +diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c +index b7d91d5..b846fd9 100644 +--- a/drivers/net/wireless/rt2x00/rt2800lib.c ++++ b/drivers/net/wireless/rt2x00/rt2800lib.c +@@ -3229,10 +3229,9 @@ int rt2800_probe_hw_mode(struct rt2x00_dev *rt2x00dev) + u16 eeprom; + + /* +- * Disable powersaving as default on PCI devices. ++ * Disable powersaving as default. + */ +- if (rt2x00_is_pci(rt2x00dev) || rt2x00_is_soc(rt2x00dev)) +- rt2x00dev->hw->wiphy->flags &= ~WIPHY_FLAG_PS_ON_BY_DEFAULT; ++ rt2x00dev->hw->wiphy->flags &= ~WIPHY_FLAG_PS_ON_BY_DEFAULT; + + /* + * Initialize all hw fields. --- linux-2.6-3.0.0~rc6.orig/debian/patches/bugfix/all/stable/gen-patch +++ linux-2.6-3.0.0~rc6/debian/patches/bugfix/all/stable/gen-patch @@ -0,0 +1,80 @@ +#!/usr/bin/env python + +import os.path, re, sys, textwrap +sys.path.append('debian/lib/python') +from debian_linux.config import ConfigCoreHierarchy +from debian_linux.debian import Changelog + +class Version(object): + _rules = ur"^(\d+\.\d+\.\d+)\.(\d+)$" + _re = re.compile(_rules) + + def __init__(self, version): + self.complete = version + match = self._re.match(version) + if match is None: + raise RuntimeError + self.release = match.group(1) + self.patch = int(match.group(2)) + +class GenPatch(object): + def __init__(self, path, repo, version): + self.config = ConfigCoreHierarchy(['debian/config']) + self.package_version = Changelog()[0].version + self.path = path + self.repo = repo + self.version = version + + def __call__(self): + base = self.version.complete + patch = base + '.patch' + log = base + '.log' + series = base + '.series' + + if self.version.patch == 1: + tag_in = "v%s" % self.version.release + else: + tag_in = "v%s.%d" % (self.version.release, self.version.patch - 1) + tag_out = "v%s" % self.version.complete + print tag_in, tag_out + + backports = self.config.get(('backports',), {}) + diff_filter = '-x Makefile' + if self.version.release == self.package_version.upstream: + diff_filter += ' ' + ' '.join("-x '%s'" % re.sub(r'/$', r'/*', path) + for path in backports) + git_paths = '' + else: + git_paths = ' '.join("'%s'" % path for path in backports + if backports[path] == self.version.release) + + f = os.popen("cd %s; git diff %s %s -- %s | filterdiff -p 1 %s > %s" % + (self.repo, tag_in, tag_out, git_paths, diff_filter, + os.path.join(self.path, patch))) + if f.close() is not None: + raise RuntimeError + + f = os.popen("cd %s; git log --oneline --reverse %s..%s^ -- %s" % + (self.repo, tag_in, tag_out, git_paths)) + out = file(os.path.join(self.path, log), 'w') + out.write(" * Add stable release %s:\n" % self.version.complete) + for line in f: + line = line.strip() + if not line: + continue + hash, log = line.split(' ', 1) + log = textwrap.wrap(log, 74) + log = '\n '.join(log) + out.write(" - %s\n" % log) + if f.close() is not None: + raise RuntimeError + + out = file(os.path.join(self.path, series), 'w') + out.write("+ bugfix/all/stable/%s\n" % patch) + out.close() + +if __name__ == '__main__': + path = os.path.realpath(os.path.dirname(sys.argv[0])) + repo = sys.argv[1] + for i in sys.argv[2:]: + GenPatch(path, repo, Version(i))() --- linux-2.6-3.0.0~rc6.orig/debian/patches/bugfix/powerpc/lpar-console.patch +++ linux-2.6-3.0.0~rc6/debian/patches/bugfix/powerpc/lpar-console.patch @@ -0,0 +1,39 @@ +diff --git a/arch/powerpc/platforms/pseries/lpar.c b/arch/powerpc/platforms/pseries/lpar.c +index 9235c46..8a20452 100644 +--- a/arch/powerpc/platforms/pseries/lpar.c ++++ b/arch/powerpc/platforms/pseries/lpar.c +@@ -204,6 +204,7 @@ void __init find_udbg_vterm(void) + struct device_node *stdout_node; + const u32 *termno; + const char *name; ++ int add_console; + + /* find the boot console from /chosen/stdout */ + if (!of_chosen) +@@ -219,6 +220,8 @@ void __init find_udbg_vterm(void) + printk(KERN_WARNING "stdout node missing 'name' property!\n"); + goto out; + } ++ /* The user has requested a console so this is already set up. */ ++ add_console = !strstr(cmd_line, "console="); + + /* Check if it's a virtual terminal */ + if (strncmp(name, "vty", 3) != 0) +@@ -232,13 +235,15 @@ void __init find_udbg_vterm(void) + udbg_putc = udbg_putcLP; + udbg_getc = udbg_getcLP; + udbg_getc_poll = udbg_getc_pollLP; +- add_preferred_console("hvc", termno[0] & 0xff, NULL); ++ if (add_console) ++ add_preferred_console("hvc", termno[0] & 0xff, NULL); + } else if (of_device_is_compatible(stdout_node, "hvterm-protocol")) { + vtermno = termno[0]; + udbg_putc = udbg_hvsi_putc; + udbg_getc = udbg_hvsi_getc; + udbg_getc_poll = udbg_hvsi_getc_poll; +- add_preferred_console("hvsi", termno[0] & 0xff, NULL); ++ if (add_console) ++ add_preferred_console("hvsi", termno[0] & 0xff, NULL); + } + out: + of_node_put(stdout_node); --- linux-2.6-3.0.0~rc6.orig/debian/patches/debian/version.patch +++ linux-2.6-3.0.0~rc6/debian/patches/debian/version.patch @@ -0,0 +1,67 @@ +--- a/init/version.c ++++ b/init/version.c +@@ -36,12 +36,31 @@ struct uts_namespace init_uts_ns = { + }; + EXPORT_SYMBOL_GPL(init_uts_ns); + +-/* FIXED STRINGS! Don't touch! */ + const char linux_banner[] = +- "Linux version " UTS_RELEASE " (" LINUX_COMPILE_BY "@" +- LINUX_COMPILE_HOST ") (" LINUX_COMPILER ") " UTS_VERSION "\n"; ++ "Linux version " UTS_RELEASE ++#ifdef LINUX_COMPILE_DISTRIBUTION_OFFICIAL_BUILD ++ " (" LINUX_COMPILE_DISTRIBUTION " " ++ LINUX_COMPILE_DISTRIBUTION_VERSION ")" ++ " (" LINUX_COMPILE_DISTRIBUTION_UPLOADER ")" ++#else ++# ifdef LINUX_COMPILE_DISTRIBUTION_VERSION ++ " (" LINUX_COMPILE_DISTRIBUTION_VERSION ")" ++# endif ++ " (" LINUX_COMPILE_BY "@" LINUX_COMPILE_HOST ")" ++#endif ++ " (" LINUX_COMPILER ")" ++ " " UTS_VERSION "\n"; + + const char linux_proc_banner[] = + "%s version %s" ++#ifdef LINUX_COMPILE_DISTRIBUTION_OFFICIAL_BUILD ++ " (" LINUX_COMPILE_DISTRIBUTION " " ++ LINUX_COMPILE_DISTRIBUTION_VERSION ")" ++ " (" LINUX_COMPILE_DISTRIBUTION_UPLOADER ")" ++#else ++# ifdef LINUX_COMPILE_DISTRIBUTION_VERSION ++ " (" LINUX_COMPILE_DISTRIBUTION_VERSION ")" ++# endif + " (" LINUX_COMPILE_BY "@" LINUX_COMPILE_HOST ")" ++#endif + " (" LINUX_COMPILER ") %s\n"; +--- a/scripts/mkcompile_h ++++ b/scripts/mkcompile_h +@@ -73,7 +73,25 @@ UTS_TRUNCATE="sed -e s/\(.\{1,$UTS_LEN\}\).*/\1/" + + echo \#define UTS_VERSION \"`echo $UTS_VERSION | $UTS_TRUNCATE`\" + +- echo \#define LINUX_COMPILE_BY \"`echo $LINUX_COMPILE_BY | $UTS_TRUNCATE`\" +- echo \#define LINUX_COMPILE_HOST \"`echo $LINUX_COMPILE_HOST | $UTS_TRUNCATE`\" ++ DISTRIBUTION=$(lsb_release -is 2>/dev/null) ++ DISTRIBUTION=${DISTRIBUTION:-Debian} ++ echo \#define LINUX_COMPILE_DISTRIBUTION \"$DISTRIBUTION\" ++ ++ if [ "$DISTRIBUTION_OFFICIAL_BUILD" ]; then ++ echo \#define LINUX_COMPILE_DISTRIBUTION_OFFICIAL_BUILD ++ echo \#define LINUX_COMPILE_DISTRIBUTION_UPLOADER \"$DISTRIBUTION_UPLOADER\" ++ echo \#define LINUX_COMPILE_DISTRIBUTION_VERSION \"$DISTRIBUTION_VERSION\" ++ echo \#define LINUX_COMPILE_BY \"unknown\" ++ echo \#define LINUX_COMPILE_HOST \"$DISTRIBUTION\" ++ else ++ if [ -e version.$DISTRIBUTION ]; then ++ echo \#define LINUX_COMPILE_DISTRIBUTION_VERSION \"$(cut -d" " -f1 version.$DISTRIBUTION)\" ++ else ++ echo \#define LINUX_COMPILE_DISTRIBUTION_VERSION \"unknown\" ++ fi ++ ++ echo \#define LINUX_COMPILE_BY \"`echo $LINUX_COMPILE_BY | $UTS_TRUNCATE`\" ++ echo \#define LINUX_COMPILE_HOST \"`echo $LINUX_COMPILE_HOST | $UTS_TRUNCATE`\" ++ fi + + echo \#define LINUX_COMPILER \"`$CC -v 2>&1 | tail -n 1`\" --- linux-2.6-3.0.0~rc6.orig/debian/patches/debian/rds-Disable-auto-loading-as-mitigation-against-local.patch +++ linux-2.6-3.0.0~rc6/debian/patches/debian/rds-Disable-auto-loading-as-mitigation-against-local.patch @@ -0,0 +1,34 @@ +From 6f9debf7c17b33ab9bb254c6c3cc1480f14d3ec2 Mon Sep 17 00:00:00 2001 +From: Ben Hutchings +Date: Fri, 19 Nov 2010 02:12:48 +0000 +Subject: [PATCH 1/3] rds: Disable auto-loading as mitigation against local exploits + +Recent review has revealed several bugs in obscure protocol +implementations that can be exploited by local users for denial of +service or privilege escalation. We can mitigate the effect of any +remaining vulnerabilities in such protocols by preventing unprivileged +users from loading the modules, so that they are only exploitable on +systems where the administrator has chosen to load the protocol. + +The 'rds' protocol is one such protocol that has been found to be +vulnerable, and which was not present in the 'lenny' kernel. +Therefore disable auto-loading. + +Signed-off-by: Ben Hutchings +--- + net/rds/af_rds.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/net/rds/af_rds.c b/net/rds/af_rds.c +index 98e0538..d8d4525 100644 +--- a/net/rds/af_rds.c ++++ b/net/rds/af_rds.c +@@ -574,4 +574,4 @@ MODULE_DESCRIPTION("RDS: Reliable Datagram Sockets" + " v" DRV_VERSION " (" DRV_RELDATE ")"); + MODULE_VERSION(DRV_VERSION); + MODULE_LICENSE("Dual BSD/GPL"); +-MODULE_ALIAS_NETPROTO(PF_RDS); ++/* MODULE_ALIAS_NETPROTO(PF_RDS); */ +-- +1.7.2.3 + --- linux-2.6-3.0.0~rc6.orig/debian/patches/debian/doc-build-parallel.patch +++ linux-2.6-3.0.0~rc6/debian/patches/debian/doc-build-parallel.patch @@ -0,0 +1,13 @@ +diff --git a/Documentation/DocBook/Makefile b/Documentation/DocBook/Makefile +index 5a2882d..71c7077 100644 +--- a/Documentation/DocBook/Makefile ++++ b/Documentation/DocBook/Makefile +@@ -146,7 +146,7 @@ quiet_cmd_db2html = HTML $@ + cp $(PNG-$(basename $(notdir $@))) $(patsubst %.html,%,$@); fi + + quiet_cmd_db2man = MAN $@ +- cmd_db2man = if grep -q refentry $<; then xmlto man $(XMLTOFLAGS) -o $(obj)/man $< ; gzip -f $(obj)/man/*.9; fi ++ cmd_db2man = if grep -q refentry $<; then xmlto man $(XMLTOFLAGS) -o $(obj)/man $< ; fi + %.9 : %.xml + @(which xmlto > /dev/null 2>&1) || \ + (echo "*** You need to install xmlto ***"; \ --- linux-2.6-3.0.0~rc6.orig/debian/patches/debian/cgroups-Document-the-Debian-memory-resource-controll.patch +++ linux-2.6-3.0.0~rc6/debian/patches/debian/cgroups-Document-the-Debian-memory-resource-controll.patch @@ -0,0 +1,28 @@ +From 969e4dd0b5c715b239c765b870f2abf81c57e878 Mon Sep 17 00:00:00 2001 +From: Ben Hutchings +Date: Sun, 30 May 2010 22:47:01 +0100 +Subject: [PATCH 2/2] cgroups: Document the Debian memory resource controller + config change + +--- + Documentation/cgroups/memory.txt | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +diff --git a/Documentation/cgroups/memory.txt b/Documentation/cgroups/memory.txt +index 7c16347..684f70d 100644 +--- a/Documentation/cgroups/memory.txt ++++ b/Documentation/cgroups/memory.txt +@@ -47,6 +47,10 @@ Features: + Kernel memory and Hugepages are not under control yet. We just manage + pages on LRU. To add more controls, we have to take care of performance. + ++NOTE: In Debian kernel packages, the memory resource controller is ++included but disabled by default. Use the kernel parameter ++'cgroup_enable=memory' to enable it. ++ + Brief summary of control files. + + tasks # attach a task(thread) and show list of threads +-- +1.7.4.4 + --- linux-2.6-3.0.0~rc6.orig/debian/patches/debian/af_802154-Disable-auto-loading-as-mitigation-against.patch +++ linux-2.6-3.0.0~rc6/debian/patches/debian/af_802154-Disable-auto-loading-as-mitigation-against.patch @@ -0,0 +1,34 @@ +From 086fa0c78e77b68ffc83c5b14bfdd425e63f024e Mon Sep 17 00:00:00 2001 +From: Ben Hutchings +Date: Fri, 19 Nov 2010 02:12:48 +0000 +Subject: [PATCH 2/3] af_802154: Disable auto-loading as mitigation against local exploits + +Recent review has revealed several bugs in obscure protocol +implementations that can be exploited by local users for denial of +service or privilege escalation. We can mitigate the effect of any +remaining vulnerabilities in such protocols by preventing unprivileged +users from loading the modules, so that they are only exploitable on +systems where the administrator has chosen to load the protocol. + +The 'af_802154' (IEEE 802.15.4) protocol is not widely used, was +not present in the 'lenny' kernel, and seems to receive only sporadic +maintenance. Therefore disable auto-loading. + +Signed-off-by: Ben Hutchings +--- + net/ieee802154/af_ieee802154.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/net/ieee802154/af_ieee802154.c b/net/ieee802154/af_ieee802154.c +index cd949d5..8f49dd5 100644 +--- a/net/ieee802154/af_ieee802154.c ++++ b/net/ieee802154/af_ieee802154.c +@@ -363,4 +363,4 @@ module_init(af_ieee802154_init); + module_exit(af_ieee802154_remove); + + MODULE_LICENSE("GPL"); +-MODULE_ALIAS_NETPROTO(PF_IEEE802154); ++/* MODULE_ALIAS_NETPROTO(PF_IEEE802154); */ +-- +1.7.2.3 + --- linux-2.6-3.0.0~rc6.orig/debian/patches/debian/mips-disable-werror.patch +++ linux-2.6-3.0.0~rc6/debian/patches/debian/mips-disable-werror.patch @@ -0,0 +1,28 @@ +From 210ea66fdb876415c09d20497beed650ac65e9d2 Mon Sep 17 00:00:00 2001 +From: Ben Hutchings +Date: Mon, 13 Sep 2010 02:16:18 +0100 +Subject: [PATCH] Partially revert "MIPS: Add -Werror to arch/mips/Kbuild" + +This reverts commit 66f9ba101f54bda63ab1db97f9e9e94763d0651b. + +We really don't want to add -Werror anywhere. +--- + arch/mips/Kbuild | 5 ----- + 1 files changed, 0 insertions(+), 5 deletions(-) + +diff --git a/arch/mips/Kbuild b/arch/mips/Kbuild +index e322d65..2e6b28f 100644 +--- a/arch/mips/Kbuild ++++ b/arch/mips/Kbuild +@@ -1,8 +1,3 @@ +-# Fail on warnings - also for files referenced in subdirs +-# -Werror can be disabled for specific files using: +-# CFLAGS_ := -Wno-error +-subdir-ccflags-y := -Werror +- + # platform specific definitions + include arch/mips/Kbuild.platforms + obj-y := $(platform-y) +-- +1.7.1 + --- linux-2.6-3.0.0~rc6.orig/debian/patches/debian/decnet-Disable-auto-loading-as-mitigation-against-lo.patch +++ linux-2.6-3.0.0~rc6/debian/patches/debian/decnet-Disable-auto-loading-as-mitigation-against-lo.patch @@ -0,0 +1,37 @@ +From 0061a6e7c7e5fef1d257cb2c2d9180f655ea5c1a Mon Sep 17 00:00:00 2001 +From: Ben Hutchings +Date: Sat, 20 Nov 2010 02:24:55 +0000 +Subject: [PATCH] decnet: Disable auto-loading as mitigation against local exploits + +Recent review has revealed several bugs in obscure protocol +implementations that can be exploited by local users for denial of +service or privilege escalation. We can mitigate the effect of any +remaining vulnerabilities in such protocols by preventing unprivileged +users from loading the modules, so that they are only exploitable on +systems where the administrator has chosen to load the protocol. + +The 'decnet' protocol is unmaintained and of mostly historical +interest, and the user-space support package 'dnet-common' loads the +module explicitly. Therefore disable auto-loading. + +Signed-off-by: Ben Hutchings +--- + net/decnet/af_decnet.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/net/decnet/af_decnet.c b/net/decnet/af_decnet.c +index 7a58c87..ed9e2b0 100644 +--- a/net/decnet/af_decnet.c ++++ b/net/decnet/af_decnet.c +@@ -2358,7 +2358,7 @@ void dn_unregister_sysctl(void); + MODULE_DESCRIPTION("The Linux DECnet Network Protocol"); + MODULE_AUTHOR("Linux DECnet Project Team"); + MODULE_LICENSE("GPL"); +-MODULE_ALIAS_NETPROTO(PF_DECnet); ++/* MODULE_ALIAS_NETPROTO(PF_DECnet); */ + + static char banner[] __initdata = KERN_INFO "NET4: DECnet for Linux: V.2.5.68s (C) 1995-2003 Linux DECnet Project Team\n"; + +-- +1.7.2.3 + --- linux-2.6-3.0.0~rc6.orig/debian/patches/debian/module-bug-Add-TAINT_OOT_MODULE-flag.patch +++ linux-2.6-3.0.0~rc6/debian/patches/debian/module-bug-Add-TAINT_OOT_MODULE-flag.patch @@ -0,0 +1,99 @@ +From 129d27b59502c85e9427f2c5299083818f77bad2 Mon Sep 17 00:00:00 2001 +From: Ben Hutchings +Date: Sun, 9 Jan 2011 06:41:52 +0000 +Subject: [PATCH] module,bug: Add TAINT_OOT_MODULE flag for modules that weren't built in-tree + +This makes it easier to spot out-of-tree modules. We have enough +bugs of our own to deal with, before supporting these. + +Signed-off-by: Ben Hutchings +--- + include/linux/kernel.h | 1 + + kernel/module.c | 5 +++++ + kernel/panic.c | 2 ++ + scripts/mod/modpost.c | 7 +++++++ + 4 files changed, 15 insertions(+), 0 deletions(-) + +diff --git a/include/linux/kernel.h b/include/linux/kernel.h +index b6de9a6..7d41307 100644 +--- a/include/linux/kernel.h ++++ b/include/linux/kernel.h +@@ -250,6 +250,7 @@ extern enum system_states { + #define TAINT_WARN 9 + #define TAINT_CRAP 10 + #define TAINT_FIRMWARE_WORKAROUND 11 ++#define TAINT_OOT_MODULE 12 + + extern const char hex_asc[]; + #define hex_asc_lo(x) hex_asc[((x) & 0x0f)] +diff --git a/kernel/module.c b/kernel/module.c +index d190664..0549df3 100644 +--- a/kernel/module.c ++++ b/kernel/module.c +@@ -2260,6 +2260,9 @@ static int check_modinfo(struct module *mod, struct load_info *info) + return -ENOEXEC; + } + ++ if (!get_modinfo(info, "intree")) ++ add_taint_module(mod, TAINT_OOT_MODULE); ++ + if (get_modinfo(info, "staging")) { + add_taint_module(mod, TAINT_CRAP); + printk(KERN_WARNING "%s: module is from the staging directory," +@@ -3001,6 +3004,8 @@ static char *module_flags(struct module *mod, char *buf) + buf[bx++] = '('; + if (mod->taints & (1 << TAINT_PROPRIETARY_MODULE)) + buf[bx++] = 'P'; ++ else if (mod->taints & (1 << TAINT_OOT_MODULE)) ++ buf[bx++] = 'O'; + if (mod->taints & (1 << TAINT_FORCED_MODULE)) + buf[bx++] = 'F'; + if (mod->taints & (1 << TAINT_CRAP)) +diff --git a/kernel/panic.c b/kernel/panic.c +index 4c13b1a..9385d25 100644 +--- a/kernel/panic.c ++++ b/kernel/panic.c +@@ -174,6 +174,7 @@ static const struct tnt tnts[] = { + { TAINT_WARN, 'W', ' ' }, + { TAINT_CRAP, 'C', ' ' }, + { TAINT_FIRMWARE_WORKAROUND, 'I', ' ' }, ++ { TAINT_OOT_MODULE, 'O', ' ' }, + }; + + /** +@@ -191,6 +192,7 @@ static const struct tnt tnts[] = { + * 'W' - Taint on warning. + * 'C' - modules from drivers/staging are loaded. + * 'I' - Working around severe firmware bug. ++ * 'O' - Out-of-tree module has been loaded. + * + * The string is overwritten by the next call to print_tainted(). + */ +diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c +index 33122ca..d0cb92c 100644 +--- a/scripts/mod/modpost.c ++++ b/scripts/mod/modpost.c +@@ -1818,6 +1818,12 @@ static void add_header(struct buffer *b, struct module *mod) + buf_printf(b, "};\n"); + } + ++static void add_intree_flag(struct buffer *b, int is_intree) ++{ ++ if (is_intree) ++ buf_printf(b, "\nMODULE_INFO(intree, \"Y\");\n"); ++} ++ + static void add_staging_flag(struct buffer *b, const char *name) + { + static const char *staging_dir = "drivers/staging"; +@@ -2138,6 +2144,7 @@ int main(int argc, char **argv) + buf.pos = 0; + + add_header(&buf, mod); ++ add_intree_flag(&buf, !external_module); + add_staging_flag(&buf, mod->name); + err |= add_versions(&buf, mod); + add_depends(&buf, mod, modules); +-- +1.7.4.1 + --- linux-2.6-3.0.0~rc6.orig/debian/patches/debian/sched-autogroup-disabled.patch +++ linux-2.6-3.0.0~rc6/debian/patches/debian/sched-autogroup-disabled.patch @@ -0,0 +1,13 @@ +diff --git a/kernel/sched_autogroup.c b/kernel/sched_autogroup.c +index 9fb6562..96abaaf 100644 +--- a/kernel/sched_autogroup.c ++++ b/kernel/sched_autogroup.c +@@ -5,7 +5,7 @@ + #include + #include + +-unsigned int __read_mostly sysctl_sched_autogroup_enabled = 1; ++unsigned int __read_mostly sysctl_sched_autogroup_enabled = 0; + static struct autogroup autogroup_default; + static atomic_t autogroup_seq_nr; + --- linux-2.6-3.0.0~rc6.orig/debian/patches/debian/kernelvariables.patch +++ linux-2.6-3.0.0~rc6/debian/patches/debian/kernelvariables.patch @@ -0,0 +1,94 @@ +--- a/Makefile ++++ b/Makefile +@@ -198,46 +198,6 @@ + CROSS_COMPILE ?= + CROSS_COMPILE ?= $(CONFIG_CROSS_COMPILE:"%"=%) + +-# Architecture as present in compile.h +-UTS_MACHINE := $(ARCH) +-SRCARCH := $(ARCH) +- +-# Additional ARCH settings for x86 +-ifeq ($(ARCH),i386) +- SRCARCH := x86 +-endif +-ifeq ($(ARCH),x86_64) +- SRCARCH := x86 +-endif +- +-# Additional ARCH settings for sparc +-ifeq ($(ARCH),sparc32) +- SRCARCH := sparc +-endif +-ifeq ($(ARCH),sparc64) +- SRCARCH := sparc +-endif +- +-# Additional ARCH settings for sh +-ifeq ($(ARCH),sh64) +- SRCARCH := sh +-endif +- +-# Additional ARCH settings for tile +-ifeq ($(ARCH),tilepro) +- SRCARCH := tile +-endif +-ifeq ($(ARCH),tilegx) +- SRCARCH := tile +-endif +- +-# Where to locate arch specific headers +-hdr-arch := $(SRCARCH) +- +-ifeq ($(ARCH),m68knommu) +- hdr-arch := m68k +-endif +- + KCONFIG_CONFIG ?= .config + export KCONFIG_CONFIG + +@@ -354,6 +314,44 @@ LDFLAGS_MODULE = + AFLAGS_KERNEL = + CFLAGS_GCOV = -fprofile-arcs -ftest-coverage + ++-include $(obj)/.kernelvariables ++ ++# Architecture as present in compile.h ++UTS_MACHINE := $(ARCH) ++SRCARCH := $(ARCH) ++ ++# Additional ARCH settings for x86 ++ifeq ($(ARCH),i386) ++ SRCARCH := x86 ++endif ++ifeq ($(ARCH),x86_64) ++ SRCARCH := x86 ++endif ++ ++# Additional ARCH settings for sparc ++ifeq ($(ARCH),sparc64) ++ SRCARCH := sparc ++endif ++ ++# Additional ARCH settings for sh ++ifeq ($(ARCH),sh64) ++ SRCARCH := sh ++endif ++ ++# Additional ARCH settings for tile ++ifeq ($(ARCH),tilepro) ++ SRCARCH := tile ++endif ++ifeq ($(ARCH),tilegx) ++ SRCARCH := tile ++endif ++ ++# Where to locate arch specific headers ++hdr-arch := $(SRCARCH) ++ ++ifeq ($(ARCH),m68knommu) ++ hdr-arch := m68k ++endif + + # Use LINUXINCLUDE when you must reference the include/ directory. + # Needed to be compatible with the O= option --- linux-2.6-3.0.0~rc6.orig/debian/patches/debian/arch-sh4-fix-uimage-build.patch +++ linux-2.6-3.0.0~rc6/debian/patches/debian/arch-sh4-fix-uimage-build.patch @@ -0,0 +1,10 @@ +--- a/arch/sh/Makefile 2009-12-03 12:51:21.000000000 +0900 ++++ b/arch/sh/Makefile 2010-02-04 15:47:57.000000000 +0900 +@@ -75,7 +75,6 @@ + + # Give the various platforms the opportunity to set default image types + defaultimage-$(CONFIG_SUPERH32) := zImage +-defaultimage-$(CONFIG_SH_SH7785LCR) := uImage + defaultimage-$(CONFIG_SH_RSK) := uImage + defaultimage-$(CONFIG_SH_URQUELL) := uImage + defaultimage-$(CONFIG_SH_7206_SOLUTION_ENGINE) := vmlinux --- linux-2.6-3.0.0~rc6.orig/debian/patches/debian/sysrq-mask.patch +++ linux-2.6-3.0.0~rc6/debian/patches/debian/sysrq-mask.patch @@ -0,0 +1,30 @@ +--- a/include/linux/sysrq.h ++++ b/include/linux/sysrq.h +@@ -18,7 +18,7 @@ + #include + + /* Enable/disable SYSRQ support by default (0==no, 1==yes). */ +-#define SYSRQ_DEFAULT_ENABLE 1 ++#define SYSRQ_DEFAULT_ENABLE CONFIG_MAGIC_SYSRQ_DEFAULT_MASK + + /* Possible values of bitmask for enabling sysrq functions */ + /* 0x0001 is reserved for enable everything */ +diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug +index 234ceb1..415a834 100644 +--- a/lib/Kconfig.debug ++++ b/lib/Kconfig.debug +@@ -50,6 +50,14 @@ config MAGIC_SYSRQ + keys are documented in . Don't say Y + unless you really know what this hack does. + ++config MAGIC_SYSRQ_DEFAULT_MASK ++ hex "Default mask for Magic SysRq keys on the console" ++ depends on MAGIC_SYSRQ ++ default 1 ++ help ++ Specifies the default mask for the allowed SysRq keys. This can be ++ used to disable several sensitive keys by default. ++ + config STRIP_ASM_SYMS + bool "Strip assembler-generated symbols during link" + default n --- linux-2.6-3.0.0~rc6.orig/debian/patches/debian/dfsg/firmware-cleanup.patch +++ linux-2.6-3.0.0~rc6/debian/patches/debian/dfsg/firmware-cleanup.patch @@ -0,0 +1,26 @@ +diff --git a/Makefile b/Makefile +index d6592b6..9afac11 100644 +--- a/Makefile ++++ b/Makefile +@@ -487,7 +487,7 @@ scripts: scripts_basic include/config/auto.conf include/config/tristate.conf + + # Objects we will link into vmlinux / subdirs we need to visit + init-y := init/ +-drivers-y := drivers/ sound/ firmware/ ++drivers-y := drivers/ sound/ + net-y := net/ + libs-y := lib/ + core-y := usr/ +diff --git a/scripts/Makefile.fwinst b/scripts/Makefile.fwinst +index 6bf8e87..2f6db83 100644 +--- a/scripts/Makefile.fwinst ++++ b/scripts/Makefile.fwinst +@@ -13,7 +13,7 @@ src := $(obj) + -include $(objtree)/.config + + include scripts/Kbuild.include +-include $(srctree)/$(obj)/Makefile ++-include $(srctree)/$(obj)/Makefile + + include scripts/Makefile.host + --- linux-2.6-3.0.0~rc6.orig/debian/patches/debian/dfsg/files-1 +++ linux-2.6-3.0.0~rc6/debian/patches/debian/dfsg/files-1 @@ -0,0 +1,24 @@ +rm Documentation/netlabel/draft-ietf-cipso-ipsecurity-01.txt + +# Some of this is DFSG-free, but it has been moved to firmware-free so +# we don't need it in linux-2.6 as well. +rm firmware + +rm arch/powerpc/sysdev/micropatch.c + +rm drivers/media/dvb/dvb-usb/af9005-script.h + +rm drivers/net/appletalk/cops.c +rm drivers/net/appletalk/cops.h +rm drivers/net/appletalk/cops_ffdrv.h +rm drivers/net/appletalk/cops_ltdrv.h + +rm drivers/staging/ft1000/ft1000-pcmcia/boot.h + +rm drivers/staging/keucr/init.h + +rm drivers/staging/wlags49_h2/ap_*.c +rm drivers/staging/wlags49_h2/sta_*.c + +rm sound/pci/cs46xx/cs46xx_image.h +rm sound/pci/cs46xx/imgs --- linux-2.6-3.0.0~rc6.orig/debian/patches/debian/dfsg/arch-powerpc-platforms-8xx-ucode-disable.patch +++ linux-2.6-3.0.0~rc6/debian/patches/debian/dfsg/arch-powerpc-platforms-8xx-ucode-disable.patch @@ -0,0 +1,24 @@ +diff --git a/arch/powerpc/platforms/8xx/Kconfig b/arch/powerpc/platforms/8xx/Kconfig +index 48a920a..81570b6 100644 +--- a/arch/powerpc/platforms/8xx/Kconfig ++++ b/arch/powerpc/platforms/8xx/Kconfig +@@ -160,16 +160,19 @@ config NO_UCODE_PATCH + + config USB_SOF_UCODE_PATCH + bool "USB SOF patch" ++ depends on BROKEN + help + Help not implemented yet, coming soon. + + config I2C_SPI_UCODE_PATCH + bool "I2C/SPI relocation patch" ++ depends on BROKEN + help + Help not implemented yet, coming soon. + + config I2C_SPI_SMC1_UCODE_PATCH + bool "I2C/SPI/SMC1 relocation patch" ++ depends on BROKEN + help + Help not implemented yet, coming soon. + --- linux-2.6-3.0.0~rc6.orig/debian/patches/debian/dfsg/drivers-media-dvb-dvb-usb-af9005-disable.patch +++ linux-2.6-3.0.0~rc6/debian/patches/debian/dfsg/drivers-media-dvb-dvb-usb-af9005-disable.patch @@ -0,0 +1,24 @@ +From 2a7d7ecc9fdcdaa0b82865078fd2a47e3b46da1b Mon Sep 17 00:00:00 2001 +From: Ben Hutchings +Date: Mon, 17 Aug 2009 02:45:41 +0100 +Subject: [PATCH 1/2] dvb-usb-af9005: mark as broken + +--- + drivers/media/dvb/dvb-usb/Kconfig | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +diff --git a/drivers/media/dvb/dvb-usb/Kconfig b/drivers/media/dvb/dvb-usb/Kconfig +index 496c1a3..868e1cb 100644 +--- a/drivers/media/dvb/dvb-usb/Kconfig ++++ b/drivers/media/dvb/dvb-usb/Kconfig +@@ -238,6 +238,7 @@ config DVB_USB_OPERA1 + + config DVB_USB_AF9005 + tristate "Afatech AF9005 DVB-T USB1.1 support" ++ depends on BROKEN + depends on DVB_USB && EXPERIMENTAL + select MEDIA_TUNER_MT2060 if !MEDIA_TUNER_CUSTOMISE + select MEDIA_TUNER_QT1010 if !MEDIA_TUNER_CUSTOMISE +-- +1.6.3.3 + --- linux-2.6-3.0.0~rc6.orig/debian/patches/debian/dfsg/drivers-staging-wlags49_h2-disable.patch +++ linux-2.6-3.0.0~rc6/debian/patches/debian/dfsg/drivers-staging-wlags49_h2-disable.patch @@ -0,0 +1,10 @@ +--- a/drivers/staging/wlags49_h2/Kconfig ++++ b/drivers/staging/wlags49_h2/Kconfig +@@ -1,6 +1,7 @@ + config WLAGS49_H2 + tristate "Agere Systems HERMES II Wireless PC Card Model 0110" + depends on WLAN && PCMCIA ++ depends on BROKEN + select WIRELESS_EXT + select WEXT_SPY + select WEXT_PRIV --- linux-2.6-3.0.0~rc6.orig/debian/patches/debian/dfsg/sound-pci.patch +++ linux-2.6-3.0.0~rc6/debian/patches/debian/dfsg/sound-pci.patch @@ -0,0 +1,8 @@ +--- a/sound/pci/Kconfig ++++ b/sound/pci/Kconfig +@@ -229,4 +229,5 @@ config SND_CS46XX + config SND_CS46XX + tristate "Cirrus Logic (Sound Fusion) CS4280/CS461x/CS462x/CS463x" ++ depends on BROKEN + select SND_RAWMIDI + select SND_AC97_CODEC --- linux-2.6-3.0.0~rc6.orig/debian/patches/debian/dfsg/drivers-net-appletalk-cops.patch +++ linux-2.6-3.0.0~rc6/debian/patches/debian/dfsg/drivers-net-appletalk-cops.patch @@ -0,0 +1,45 @@ +diff -ruN a/drivers/net/appletalk/Kconfig b/drivers/net/appletalk/Kconfig +--- a/drivers/net/appletalk/Kconfig 2006-11-29 21:57:37.000000000 +0000 ++++ b/drivers/net/appletalk/Kconfig 2007-01-05 15:34:44.000000000 +0000 +@@ -49,32 +49,6 @@ + This driver is experimental, which means that it may not work. + See the file . + +-config COPS +- tristate "COPS LocalTalk PC support" +- depends on DEV_APPLETALK && (ISA || EISA) +- help +- This allows you to use COPS AppleTalk cards to connect to LocalTalk +- networks. You also need version 1.3.3 or later of the netatalk +- package. This driver is experimental, which means that it may not +- work. This driver will only work if you choose "AppleTalk DDP" +- networking support, above. +- Please read the file . +- +-config COPS_DAYNA +- bool "Dayna firmware support" +- depends on COPS +- help +- Support COPS compatible cards with Dayna style firmware (Dayna +- DL2000/ Daynatalk/PC (half length), COPS LT-95, Farallon PhoneNET PC +- III, Farallon PhoneNET PC II). +- +-config COPS_TANGENT +- bool "Tangent firmware support" +- depends on COPS +- help +- Support COPS compatible cards with Tangent style firmware (Tangent +- ATB_II, Novell NL-1000, Daystar Digital LT-200. +- + config IPDDP + tristate "Appletalk-IP driver support" + depends on DEV_APPLETALK && ATALK +diff -ruN a/drivers/net/appletalk/Makefile b/drivers/net/appletalk/Makefile +--- a/drivers/net/appletalk/Makefile 2006-11-29 21:57:37.000000000 +0000 ++++ b/drivers/net/appletalk/Makefile 2007-01-05 15:34:11.000000000 +0000 +@@ -3,5 +3,4 @@ + # + + obj-$(CONFIG_IPDDP) += ipddp.o +-obj-$(CONFIG_COPS) += cops.o + obj-$(CONFIG_LTPC) += ltpc.o --- linux-2.6-3.0.0~rc6.orig/debian/patches/debian/dfsg/drivers-staging-wlags49_h25-disable.patch +++ linux-2.6-3.0.0~rc6/debian/patches/debian/dfsg/drivers-staging-wlags49_h25-disable.patch @@ -0,0 +1,10 @@ +--- a/drivers/staging/wlags49_h25/Kconfig ++++ b/drivers/staging/wlags49_h25/Kconfig +@@ -1,6 +1,7 @@ + config WLAGS49_H25 + tristate "Linksys HERMES II.5 WCF54G_Wireless-G_CompactFlash_Card" + depends on WLAN && PCMCIA ++ depends on BROKEN + select WIRELESS_EXT + select WEXT_SPY + select WEXT_PRIV --- linux-2.6-3.0.0~rc6.orig/debian/source/format +++ linux-2.6-3.0.0~rc6/debian/source/format @@ -0,0 +1,2 @@ +1.0 + --- linux-2.6-3.0.0~rc6.orig/debian/po/templates.pot +++ linux-2.6-3.0.0~rc6/debian/po/templates.pot @@ -0,0 +1,130 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: linux-2.6@packages.debian.org\n" +"POT-Creation-Date: 2010-07-16 15:55+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: error +#. Description +#: ../linux-base.templates:8001 ../templates/temp.image.plain/templates:5001 +msgid "" +"If the boot loader needs to be updated whenever a new kernel is installed, " +"the boot loader package should install a script in /etc/kernel/postinst.d. " +"Alternately, you can specify the command to update the boot loader by " +"setting the 'postinst_hook' variable in /etc/kernel-img.conf." +msgstr "" + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "Abort installation after depmod error?" +msgstr "" + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "" +"The 'depmod' command exited with the exit code ${exit_value} " +"(${SIGNAL}${CORE})." +msgstr "" + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "" +"Since this image uses initrd, the ${modules_base}/=V/modules.dep file will " +"not be deleted, even though it may be invalid." +msgstr "" + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "" +"You should abort the installation and fix the errors in depmod, or " +"regenerate the initrd image with a known good modules.dep file. If you don't " +"abort the installation, there is a danger that the system will fail to boot." +msgstr "" + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "Abort kernel removal?" +msgstr "" + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "" +"You are running a kernel (version ${running}) and attempting to remove the " +"same version." +msgstr "" + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "" +"This can make the system unbootable as it will remove /boot/vmlinuz-" +"${running} and all modules under the directory /lib/modules/${running}. This " +"can only be fixed with a copy of the kernel image and the corresponding " +"modules." +msgstr "" + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "" +"It is highly recommended to abort the kernel removal unless you are prepared " +"to fix the system after removal." +msgstr "" + +#. Type: note +#. Description +#: ../templates/temp.image.plain/templates:4001 +msgid "Required firmware files may be missing" +msgstr "" + +#. Type: note +#. Description +#: ../templates/temp.image.plain/templates:4001 +msgid "" +"This system is currently running Linux ${runningversion} and you are " +"installing Linux ${version}. In the new version some of the drivers used on " +"this system may require additional firmware files:" +msgstr "" + +#. Type: note +#. Description +#: ../templates/temp.image.plain/templates:4001 +msgid "" +"Most firmware files are not included in the system because they do not " +"conform to the Debian Free Software Guidelines. You may need to reconfigure " +"the package manager to include the contrib and non-free sections of the " +"package archive before you can install these firmware files." +msgstr "" + +#. Type: error +#. Description +#: ../templates/temp.image.plain/templates:5001 +msgid "Boot loader configuration must be updated" +msgstr "" + +#. Type: error +#. Description +#: ../templates/temp.image.plain/templates:5001 +msgid "" +"Kernel packages no longer update a default boot loader. You should remove " +"'do_bootloader = yes' from /etc/kernel-img.conf." +msgstr "" --- linux-2.6-3.0.0~rc6.orig/debian/po/pt.po +++ linux-2.6-3.0.0~rc6/debian/po/pt.po @@ -0,0 +1,168 @@ +# Translation of linux-2.6 debconf messages to Portuguese +# Copyright (C) 2010 the linux-2.6's copyright holder +# This file is distributed under the same license as the linux-2.6 package. +# +# Américo Monteiro , 2010, 2011. +msgid "" +msgstr "" +"Project-Id-Version: linux-2.6 2.6.39.1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-05-21 10:31+0200\n" +"PO-Revision-Date: 2011-05-22 23:53+0100\n" +"Last-Translator: Américo Monteiro \n" +"Language-Team: Portuguese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt\n" +"X-Generator: Lokalize 1.2\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "Abort installation after depmod error?" +msgstr "Abortar a instalação após erro do depmod?" + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "" +"The 'depmod' command exited with the exit code ${exit_value} (${SIGNAL}" +"${CORE})." +msgstr "" +"O comando 'depmod' terminou com o código de erro ${exit_value} (${SIGNAL}" +"${CORE})." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "" +"Since this image uses initrd, the ${modules_base}/=V/modules.dep file will " +"not be deleted, even though it may be invalid." +msgstr "" +"Como esta imagem usa initrd, o ficheiro ${modules_base}/=V/modules.dep não " +"será apagado, apesar de poder ser inválido." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "" +"You should abort the installation and fix the errors in depmod, or " +"regenerate the initrd image with a known good modules.dep file. If you don't " +"abort the installation, there is a danger that the system will fail to boot." +msgstr "" +"Você deve abortar a instalação e corrigir os erros do depmod, ou gerar " +"novamente a imagem initrd com um ficheiro modules.dep conhecido como bom. Se " +"não abortar a instalação, existe o perigo do sistema falhar no arranque." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "Abort kernel removal?" +msgstr "Abortar a remoção do kernel?" + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "" +"You are running a kernel (version ${running}) and attempting to remove the " +"same version." +msgstr "" +"Você está a correr um kernel (versão ${running}) e a tentar remover essa " +"mesma versão." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "" +"This can make the system unbootable as it will remove /boot/vmlinuz-" +"${running} and all modules under the directory /lib/modules/${running}. This " +"can only be fixed with a copy of the kernel image and the corresponding " +"modules." +msgstr "" +"Isto pode fazer com que o sistema não arranque porque irá remover /boot/" +"vmlinuz-${running} e todos os módulos no directório /lib/modules/${running}. " +"Isto só pode ser corrigido com uma cópia da imagem do kernel e dos " +"correspondentes módulos." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "" +"It is highly recommended to abort the kernel removal unless you are prepared " +"to fix the system after removal." +msgstr "" +"É altamente recomendado abortar a remoção do kernel a menos que esteja " +"preparado para corrigir o sistema após a remoção." + +#. Type: note +#. Description +#: ../templates/temp.image.plain/templates:4001 +msgid "Required firmware files may be missing" +msgstr "Podem estar em falta ficheiros de firmware necessários" + +#. Type: note +#. Description +#: ../templates/temp.image.plain/templates:4001 +msgid "" +"This system is currently running Linux ${runningversion} and you are " +"installing Linux ${version}. In the new version some of the drivers used on " +"this system may require additional firmware files:" +msgstr "" +"Este sistema está actualmente a correr Linux ${runningversion} e você está a " +"instalar Linux ${version}. Na nova versão algumas das drivers usadas neste " +"sistema podem necessitar dos ficheiros de firmware adicionais:" + +#. Type: note +#. Description +#: ../templates/temp.image.plain/templates:4001 +msgid "" +"Most firmware files are not included in the system because they do not " +"conform to the Debian Free Software Guidelines. You may need to reconfigure " +"the package manager to include the contrib and non-free sections of the " +"package archive before you can install these firmware files." +msgstr "" +"A maioria dos ficheiros de firmware não estão incluídos no sistema porque " +"não respeitam as Guidelines da Debian Free Software. Você pode precisar de " +"reconfigurar o gestor de pacotes para incluir as secções contrib e non-free " +"do arquivo de pacotes antes de poder instalar estes ficheiros de firmware." + +#. Type: error +#. Description +#: ../templates/temp.image.plain/templates:5001 +#| msgid "Boot loader configuration must be updated" +msgid "Ramdisk configuration must be updated" +msgstr "A configuração de ramdisk tem de ser actualizada" + +#. Type: error +#. Description +#: ../templates/temp.image.plain/templates:5001 +msgid "" +"Kernel packages will no longer run a specific ramdisk creator. The ramdisk " +"creator package must install a script in /etc/kernel/postinst.d, and you " +"should remove the line beginning 'ramdisk =' from /etc/kernel-img.conf." +msgstr "" +"Os pacotes de kernel não irão mais correr um criador de ramdisk especificado. " +"O pacote do criador de ramdisk deve instalar um script em /etc/kernel/" +"postinst.d, e você deve remover a linha que começa com 'ramdisk =' do " +"ficheiro /etc/kernel-img.conf." + +#~ msgid "" +#~ "If the boot loader needs to be updated whenever a new kernel is " +#~ "installed, the boot loader package should install a script in /etc/kernel/" +#~ "postinst.d. Alternately, you can specify the command to update the boot " +#~ "loader by setting the 'postinst_hook' variable in /etc/kernel-img.conf." +#~ msgstr "" +#~ "Se o gestor de arranque precisa de ser actualizado sempre que um novo " +#~ "kernel é instalado, o pacote do gestor de arranque deve instalar um " +#~ "script em /etc/kernel/postinst.d. Em alternativa, você pode especificar o " +#~ "comando para actualizar o gestor de arranque ao definir a variável " +#~ "'postinst_hook' em /etc/kernel-img.conf." + +#~ msgid "" +#~ "Kernel packages no longer update a default boot loader. You should " +#~ "remove 'do_bootloader = yes' from /etc/kernel-img.conf." +#~ msgstr "" +#~ "Os pacotes do kernel já não actualizam um gestor de arranque predefinido. " +#~ "Você deve remover 'do_bootloader = yes' de /etc/kernel-img.conf." --- linux-2.6-3.0.0~rc6.orig/debian/po/ru.po +++ linux-2.6-3.0.0~rc6/debian/po/ru.po @@ -0,0 +1,160 @@ +# translation of ru.po to Russian +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the linux-2.6 package. +# +# Yuri Kozlov , 2010. +msgid "" +msgstr "" +"Project-Id-Version: linux-2.6 2.6.32-18\n" +"Report-Msgid-Bugs-To: linux-2.6@packages.debian.org\n" +"POT-Creation-Date: 2010-07-25 10:32+0200\n" +"PO-Revision-Date: 2010-08-01 17:11+0400\n" +"Last-Translator: Yuri Kozlov \n" +"Language-Team: Russian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#. Type: error +#. Description +#: ../linux-base.templates:8001 ../templates/temp.image.plain/templates:5001 +msgid "" +"If the boot loader needs to be updated whenever a new kernel is installed, " +"the boot loader package should install a script in /etc/kernel/postinst.d. " +"Alternately, you can specify the command to update the boot loader by " +"setting the 'postinst_hook' variable in /etc/kernel-img.conf." +msgstr "" +"Если системный загрузчик требует обновления после установки нового ядра, " +"то пакет системного загрузчика должен устанавливать сценарий в каталог " +"/etc/kernel/postinst.d. Или же вы можете задать команду обновления " +"системного загрузчика, указав её в переменной postinst_hook в файле " +"/etc/kernel-img.conf." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "Abort installation after depmod error?" +msgstr "Прервать установку после ошибки depmod?" + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "" +"The 'depmod' command exited with the exit code ${exit_value} " +"(${SIGNAL}${CORE})." +msgstr "" +"Команда depmod завершилась с кодом ошибки ${exit_value} (${SIGNAL}${CORE})." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "" +"Since this image uses initrd, the ${modules_base}/=V/modules.dep file will " +"not be deleted, even though it may be invalid." +msgstr "" +"Так как этот образ использует initrd, файл ${modules_base}/=V/modules.dep не " +"будет удалён, даже если он может быть неправильным." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "" +"You should abort the installation and fix the errors in depmod, or " +"regenerate the initrd image with a known good modules.dep file. If you don't " +"abort the installation, there is a danger that the system will fail to boot." +msgstr "" +"Вы должны прервать установку и исправить ошибки depmod, или пересобрать " +"образ initrd с работающим файлом modules.dep. Если вы не прервёте установку, " +"то система больше не сможет загружаться." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "Abort kernel removal?" +msgstr "Прервать удаление ядра?" + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "" +"You are running a kernel (version ${running}) and attempting to remove the " +"same version." +msgstr "Вы пытаетесь удалить запущенную версию ядра (${running})." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "" +"This can make the system unbootable as it will remove /boot/vmlinuz-" +"${running} and all modules under the directory /lib/modules/${running}. This " +"can only be fixed with a copy of the kernel image and the corresponding " +"modules." +msgstr "" +"Это может привести к неспособности загрузки системы, так как будут удалён " +"файл /boot/vmlinuz-${running} и все модули из каталога /lib/modules/" +"${running}. Это можно будет исправить только копированием образа ядра и " +"соответствующих модулей." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "" +"It is highly recommended to abort the kernel removal unless you are prepared " +"to fix the system after removal." +msgstr "" +"Настоятельно рекомендуется прервать удаление ядра, если вы не готовы чинить " +"систему после его удаления." + +#. Type: note +#. Description +#: ../templates/temp.image.plain/templates:4001 +msgid "Required firmware files may be missing" +msgstr "Могут отсутствовать необходимые файлы микропрограмм" + +#. Type: note +#. Description +#: ../templates/temp.image.plain/templates:4001 +msgid "" +"This system is currently running Linux ${runningversion} and you are " +"installing Linux ${version}. In the new version some of the drivers used on " +"this system may require additional firmware files:" +msgstr "" +"В этой системе сейчас работает ядро Linux ${runningversion} и производится " +"установка Linux ${version}. В новой версии некоторым драйверам, используемым " +"в данной системе, могут потребоваться дополнительные файлы микропрограмм:" + +#. Type: note +#. Description +#: ../templates/temp.image.plain/templates:4001 +msgid "" +"Most firmware files are not included in the system because they do not " +"conform to the Debian Free Software Guidelines. You may need to reconfigure " +"the package manager to include the contrib and non-free sections of the " +"package archive before you can install these firmware files." +msgstr "" +"Большинства файлов микропрограмм нет в дистрибутиве, так как они не " +"удовлетворяют критериям свободного ПО Debian. Для установки этих файлов из " +"архива вам может потребоваться перенастроить менеджер пакетов, чтобы " +"включить разделы contrib и non-free." + +#. Type: error +#. Description +#: ../templates/temp.image.plain/templates:5001 +#| msgid "Boot loader configuration check needed" +msgid "Boot loader configuration must be updated" +msgstr "Требуется обновление настроек системного загрузчика" + +#. Type: error +#. Description +#: ../templates/temp.image.plain/templates:5001 +msgid "" +"Kernel packages no longer update a default boot loader. You should remove " +"'do_bootloader = yes' from /etc/kernel-img.conf." +msgstr "" +"Пакеты ядра больше не обновляют системный загрузчик по умолчанию. " +"Вы должны удалить строку \"do_bootloader = yes\" из файла " +"/etc/kernel-img.conf." --- linux-2.6-3.0.0~rc6.orig/debian/po/cs.po +++ linux-2.6-3.0.0~rc6/debian/po/cs.po @@ -0,0 +1,153 @@ +# Czech PO debconf template translation of linux-2.6. +# Copyright (C) 2010 Michal Simunek +# This file is distributed under the same license as the linux-2.6 package. +# Michal Simunek , 2010. +# +msgid "" +msgstr "" +"Project-Id-Version: linux-2.6 2.6.32-18\n" +"Report-Msgid-Bugs-To: linux-2.6@packages.debian.org\n" +"POT-Creation-Date: 2010-07-25 10:32+0200\n" +"PO-Revision-Date: 2010-07-26 18:02+0200\n" +"Last-Translator: Michal Simunek \n" +"Language-Team: Czech \n" +"Language: cs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: error +#. Description +#: ../linux-base.templates:8001 ../templates/temp.image.plain/templates:5001 +msgid "" +"If the boot loader needs to be updated whenever a new kernel is installed, " +"the boot loader package should install a script in /etc/kernel/postinst.d. " +"Alternately, you can specify the command to update the boot loader by " +"setting the 'postinst_hook' variable in /etc/kernel-img.conf." +msgstr "" +"Pokud je nutné aktualizovat zavaděč kdykoli je nainstalováno nové jádro, " +"balíček zavaděče nainstalovuje skript v /etc/kernel/postinst.d. " +"Můžete také zadat příkaz k aktualizaci zavaděče nastavením proměnné " +"'postinst_hook' v /etc/kernel-img.conf." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "Abort installation after depmod error?" +msgstr "Přerušit po chybě depmod instalaci?" + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "" +"The 'depmod' command exited with the exit code ${exit_value} " +"(${SIGNAL}${CORE})." +msgstr "Příkaz 'depmod' skončil s chybou ${exit_value} (${SIGNAL}${CORE})." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "" +"Since this image uses initrd, the ${modules_base}/=V/modules.dep file will " +"not be deleted, even though it may be invalid." +msgstr "" +"Vzhledem k tomu, že tento obraz používá initrd, nebude soubor " +"${modules_base}/=V/modules.dep smazán, přesto že může být neplatný." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "" +"You should abort the installation and fix the errors in depmod, or " +"regenerate the initrd image with a known good modules.dep file. If you don't " +"abort the installation, there is a danger that the system will fail to boot." +msgstr "" +"Měli byste přerušit instalaci a opravit chyby v depmod, nebo vytvořit obraz " +"initrd s prověřeným souborem modules.dep. Nepřerušíte-li instalaci, " +"vystavujete se riziku, že se nepodaří systém zavést." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "Abort kernel removal?" +msgstr "Přerušit odstraňování jádra?" + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "" +"You are running a kernel (version ${running}) and attempting to remove the " +"same version." +msgstr "" +"Pokoušíte se odstranit verzi jádra (version ${running}), která nyní běží." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "" +"This can make the system unbootable as it will remove /boot/vmlinuz-" +"${running} and all modules under the directory /lib/modules/${running}. This " +"can only be fixed with a copy of the kernel image and the corresponding " +"modules." +msgstr "" +"To může způsobit, že se nepodaří zavést systém, a také bude odstraněno /boot/" +"vmlinuz-${running} a všechny moduly v adresáři /lib/modules/${running}. Toto " +"je možné opravit pouze nakopírováním obrazu jádra a příslušných modulů." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "" +"It is highly recommended to abort the kernel removal unless you are prepared " +"to fix the system after removal." +msgstr "" +"Je silně doporučeno přerušit odstraňování jádra, pokud nejste připraveni " +"opravovat systém po jeho odstranění." + +#. Type: note +#. Description +#: ../templates/temp.image.plain/templates:4001 +msgid "Required firmware files may be missing" +msgstr "Mohou chybět potřebné soubory s firmwarem" + +#. Type: note +#. Description +#: ../templates/temp.image.plain/templates:4001 +msgid "" +"This system is currently running Linux ${runningversion} and you are " +"installing Linux ${version}. In the new version some of the drivers used on " +"this system may require additional firmware files:" +msgstr "" +"Systém nyní běží na Linuxu ${runningversion} a vy instalujete Linux " +"${version}. V nové verzi mohou některé ovladače používané v tomto systému, " +"vyžadovat dodatečné soubory s firmwarem:" + +#. Type: note +#. Description +#: ../templates/temp.image.plain/templates:4001 +msgid "" +"Most firmware files are not included in the system because they do not " +"conform to the Debian Free Software Guidelines. You may need to reconfigure " +"the package manager to include the contrib and non-free sections of the " +"package archive before you can install these firmware files." +msgstr "" +"Většina souborů s firmwarem není zahrnuta v systému, protože nejsou v " +"souladu se Zásadami svobodného softwaru Debianu. Než budete moci tyto " +"soubory s firmwarem nainstalovat, budete možná muset nastavit správce " +"balíčků, aby zahrnoval archiv sekce balíčků non-free." + +#. Type: error +#. Description +#: ../templates/temp.image.plain/templates:5001 +msgid "Boot loader configuration must be updated" +msgstr "Nastavení zavaděče musí být aktualizováno" + +#. Type: error +#. Description +#: ../templates/temp.image.plain/templates:5001 +msgid "" +"Kernel packages no longer update a default boot loader. You should remove " +"'do_bootloader = yes' from /etc/kernel-img.conf." +msgstr "" +"Jaderný balíček již neaktualizuje výchozí zavaděč. Odstraňte " +"'do_bootloader = yes' z /etc/kernel-img.conf." --- linux-2.6-3.0.0~rc6.orig/debian/po/nl.po +++ linux-2.6-3.0.0~rc6/debian/po/nl.po @@ -0,0 +1,101 @@ +# Dutch translation of linux-2.6 po-debconf templates. +# Copyright (C) 2011 THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the linux-2.6 package. +# Willem Kuyn , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: linux-2.6\n" +"Report-Msgid-Bugs-To: linux-2.6@packages.debian.org\n" +"POT-Creation-Date: 2011-03-30 10:34+0200\n" +"PO-Revision-Date: 2011-04-02 20:07+0100\n" +"Last-Translator: willem kuyn \n" +"Language-Team: Debian-Dutch \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "Abort installation after depmod error?" +msgstr "Installatie afbreken na depmod fout? " + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "The 'depmod' command exited with the exit code ${exit_value} (${SIGNAL}${CORE})." +msgstr "De 'depmod' opdracht stopte met foutcode ${exit_value} (${SIGNAL}${CORE})." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "Since this image uses initrd, the ${modules_base}/=V/modules.dep file will not be deleted, even though it may be invalid." +msgstr "Omdat deze afbeelding initrd gebruikt, zal het ${modules_base}/=V/modules.dep bestand niet verwijderd worden, ook al is het niet correct." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "You should abort the installation and fix the errors in depmod, or regenerate the initrd image with a known good modules.dep file. If you don't abort the installation, there is a danger that the system will fail to boot." +msgstr "U zou de installatie moeten afbreken en de fouten in depmod herstellen, of het initrd bestand opnieuw moeten genereren met een correct modules.dep bestand. Als u de installatie niet afbreekt dan bestaat het gevaar dat het systeem niet zal starten." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "Abort kernel removal?" +msgstr "Het verwijderen van de kernel afbreken?" + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "You are running a kernel (version ${running}) and attempting to remove the same version." +msgstr "U gebruikt kernel (versie ${running}) en probeert de zelfde versie te verwijderen." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "This can make the system unbootable as it will remove /boot/vmlinuz-${running} and all modules under the directory /lib/modules/${running}. This can only be fixed with a copy of the kernel image and the corresponding modules." +msgstr "Het resultaat kan zijn dat het systeem niet start omdat het /boot/vmlinuz-${running} en alle modules onder /lib/modules/${running} verwijdert. Dit kan alleen gerepareerd worden met een kopie van het kernel bestand en de bijbehorende modules." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "It is highly recommended to abort the kernel removal unless you are prepared to fix the system after removal." +msgstr "Het wordt ten sterkste aanbevolen om het verwijderen van de kernel af te breken tenzij u bent voorbereid om het systeem te repareren na het verwijderen." + +#. Type: note +#. Description +#: ../templates/temp.image.plain/templates:4001 +msgid "Required firmware files may be missing" +msgstr "De vereiste firmware bestanden kunnen ontbreken" + +#. Type: note +#. Description +#: ../templates/temp.image.plain/templates:4001 +msgid "This system is currently running Linux ${runningversion} and you are installing Linux ${version}. In the new version some of the drivers used on this system may require additional firmware files:" +msgstr "Het systeem draait op dit moment Linux ${runningversion} en u installeert Linux ${version}. In de nieuwe versie kunnen enkele stuurprogramma's van het systeem aparte firmware bestanden nodig hebben." + +#. Type: note +#. Description +#: ../templates/temp.image.plain/templates:4001 +msgid "Most firmware files are not included in the system because they do not conform to the Debian Free Software Guidelines. You may need to reconfigure the package manager to include the contrib and non-free sections of the package archive before you can install these firmware files." +msgstr "Veel firmware bestanden zijn niet in het systeem opgenomen omdat zij niet voldoen aan de Debian Free Software Guidelines. Mogelijk moet u de configuratie van de pakket manager aanpassen en de contrib en non-free secties van het pakket archief toevoegen voordat u deze firmware bestanden kunt installeren. " + +#. Type: error +#. Description +#: ../templates/temp.image.plain/templates:5001 +msgid "Boot loader configuration must be updated" +msgstr "De bootloader configuratie moet worden aangepast." + +#. Type: error +#. Description +#: ../templates/temp.image.plain/templates:5001 +msgid "Kernel packages no longer update a default boot loader. You should remove 'do_bootloader = yes' from /etc/kernel-img.conf." +msgstr "Kernel pakketten passen de bootloader configuratie niet langer aan. U dient do_bootloader = yes' uit /etc/kernel-img.conf te verwijderen." + +#. Type: error +#. Description +#: ../templates/temp.image.plain/templates:5001 +msgid "If the boot loader needs to be updated whenever a new kernel is installed, the boot loader package should install a script in /etc/kernel/postinst.d. Alternately, you can specify the command to update the boot loader by setting the 'postinst_hook' variable in /etc/kernel-img.conf." +msgstr "Als de bootloader configuratie aangepast moet worden bij de installatie van een nieuwe kernel dan dient het bootloader pakket eeen script in /etc/kernel/postinst.d te installeren. Anders kunt u de opdracht om de bootloader configuratie aanpassen door het aanzetten van de 'postinst_hook' variabele in /etc/kernel-img.conf." + --- linux-2.6-3.0.0~rc6.orig/debian/po/es.po +++ linux-2.6-3.0.0~rc6/debian/po/es.po @@ -0,0 +1,191 @@ +# linux-2.6 po-debconf translation to Spanish +# This file is distributed under the same license as the linux-2.6 package. +# +# Changes: +# - Initial translation +# Omar Campagne 2010 +# +# - Review and update +# Javier Fernandez-Sanguino, December 2010 +# +# Traductores, si no conocen el formato PO, merece la pena leer la +# documentación de gettext, especialmente las secciones dedicadas a este +# formato, por ejemplo ejecutando: +# info -n '(gettext)PO Files' +# info -n '(gettext)Header Entry' +# +# Equipo de traducción al español, por favor lean antes de traducir +# los siguientes documentos: +# +# - El proyecto de traducción de Debian al español +# http://www.debian.org/intl/spanish/ +# especialmente las notas y normas de traducción en +# http://www.debian.org/intl/spanish/notas +# +# - La guía de traducción de po's de debconf: +# /usr/share/doc/po-debconf/README-trans +# o http://www.debian.org/intl/l10n/po-debconf/README-trans +# +msgid "" +msgstr "" +"Project-Id-Version: linux-2.6 2.6.32+5\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-12-11 10:35+0100\n" +"PO-Revision-Date: 2010-12-15 04:08+0100\n" +"Last-Translator: Omar Campagne \n" +"Language-Team: Debian l10n Spanish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Virtaal 0.6.1\n" +"X-POFile-SpellExtra: initrd postinsthook conf lib contrib yes IDE depmod\n" +"X-POFile-SpellExtra: runningversion img script boot Free exitvalue version\n" +"X-POFile-SpellExtra: Debian CORE free running dobootloader UUID dep SIGNAL\n" +"X-POFile-SpellExtra: Guidelines modulesbase vmlinuz postinst\n" + +#. Type: error +#. Description +#: ../linux-base.templates:8001 ../templates/temp.image.plain/templates:5001 +msgid "" +"If the boot loader needs to be updated whenever a new kernel is installed, " +"the boot loader package should install a script in /etc/kernel/postinst.d. " +"Alternately, you can specify the command to update the boot loader by " +"setting the 'postinst_hook' variable in /etc/kernel-img.conf." +msgstr "" +"El paquete del gestor de arranque debería instalar un script en " +"«/etc/kernel/postinst.d» si tiene que actualizarse cada vez que se instala " +"un nuevo núcleo. También puede especificar la orden a ejecutar para " +"actualizar el gestor de arranque configurando la variable «postinst_hook» " +"en el fichero de configuración «/etc/kernel-img.conf»." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "Abort installation after depmod error?" +msgstr "¿Desea interrumpir la instalación cuando se produzca un fallo de depmod?" + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "" +"The 'depmod' command exited with the exit code ${exit_value} " +"(${SIGNAL}${CORE})." +msgstr "" +"La orden «depmod» finalizó con el código de salida «${exit_value} " +"(${SIGNAL}${CORE})»." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "" +"Since this image uses initrd, the ${modules_base}/=V/modules.dep file will " +"not be deleted, even though it may be invalid." +msgstr "" +"Debido a que esta imagen usa una imagen de arranque «initrd», no se " +"eliminará el fichero «${modules_base}/=V/modules.dep», aún cuando no sea " +"válido." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "" +"You should abort the installation and fix the errors in depmod, or " +"regenerate the initrd image with a known good modules.dep file. If you don't " +"abort the installation, there is a danger that the system will fail to boot." +msgstr "" +"Debería cancelar la instalación y arreglar los errores de depmod, o " +"regenerar la imagen de arranque «initrd» con un fichero «modules.dep» " +"fiable. Si no cancela la instalación, existe el peligro de que el sistema no " +"pueda arrancar." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "Abort kernel removal?" +msgstr "¿Desea cancelar la eliminación del núcleo?" + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "" +"You are running a kernel (version ${running}) and attempting to remove the " +"same version." +msgstr "" +"Su sistema está ejecutando el núcleo (versión ${running}), y está intentando " +"eliminar la misma versión del núcleo." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "" +"This can make the system unbootable as it will remove /boot/vmlinuz-" +"${running} and all modules under the directory /lib/modules/${running}. This " +"can only be fixed with a copy of the kernel image and the corresponding " +"modules." +msgstr "" +"Puede que el sistema no pueda arrancar posteriormente, ya que eliminaría «/" +"boot/vmlinuz-${running}» y todos los módulos en el directorio «/lib/modules/" +"${running}». Esto sólo se puede arreglar esto con una copia de la imagen del " +"núcleo y los correspondientes módulos." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "" +"It is highly recommended to abort the kernel removal unless you are prepared " +"to fix the system after removal." +msgstr "" +"Se recomienda encarecidamente cancelar la eliminación del núcleo, a menos " +"que esté preparado para arreglar el sistema después de la eliminación." + +#. Type: note +#. Description +#: ../templates/temp.image.plain/templates:4001 +msgid "Required firmware files may be missing" +msgstr "Puede que los ficheros de firmware requeridos no estén disponibles" + +#. Type: note +#. Description +#: ../templates/temp.image.plain/templates:4001 +msgid "" +"This system is currently running Linux ${runningversion} and you are " +"installing Linux ${version}. In the new version some of the drivers used on " +"this system may require additional firmware files:" +msgstr "" +"Este sistema ejecuta actualmente la versión ${runningversion} de Linux, y se " +"está instalando la versión ${version}. Puede que los controladores incluidos " +"en la nueva versión requieran ficheros de firmware adicionales:" + +#. Type: note +#. Description +#: ../templates/temp.image.plain/templates:4001 +msgid "" +"Most firmware files are not included in the system because they do not " +"conform to the Debian Free Software Guidelines. You may need to reconfigure " +"the package manager to include the contrib and non-free sections of the " +"package archive before you can install these firmware files." +msgstr "" +"La mayoría de ficheros de firmware no se incluyen en el sistema porque no " +"cumplen las normas de software libre de Debian («Debian Free Software " +"Guidelines»). Puede que tenga que reconfigurar el gestor de paquetes para " +"incluir las secciones «contrib» y «non-free» del archivo de Debian antes de " +"instalar estos ficheros de firmware." + +#. Type: error +#. Description +#: ../templates/temp.image.plain/templates:5001 +msgid "Boot loader configuration must be updated" +msgstr "Debe actualizarse la configuración del gestor de arranque" + +#. Type: error +#. Description +#: ../templates/temp.image.plain/templates:5001 +msgid "" +"Kernel packages no longer update a default boot loader. You should remove " +"'do_bootloader = yes' from /etc/kernel-img.conf." +msgstr "" +"Los paquetes del núcleo ya no actualizan el gestor de arranque por omisión. " +"Debe eliminar la línea «do_bootloader = yes» del archivo de configuración " +"«/etc/kernel-img.conf»." --- linux-2.6-3.0.0~rc6.orig/debian/po/ja.po +++ linux-2.6-3.0.0~rc6/debian/po/ja.po @@ -0,0 +1,106 @@ +# Copyright (C) 2010 Kenshi Muto +# Copyright (C) 2010 Nobuhiro Iwamatsu +# This file is distributed under the same license as the linux-2.6 package. +# Kenshi Muto , 2010. +# Nobuhiro Iwamatsu , 2010. + +msgid "" +msgstr "" +"Project-Id-Version: linux-2.6\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-10-21 10:37+0200\n" +"PO-Revision-Date: 2010-10-31 06:32+0900\n" +"Last-Translator: Nobuhiro Iwamatsu \n" +"Language-Team: Japanese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ja\n" +"X-Poedit-Language: Japanese\n" +"X-Poedit-Country: JAPAN\n" + +#. Type: error +#. Description +#: ../linux-base.templates:8001 +#: ../templates/temp.image.plain/templates:5001 +msgid "If the boot loader needs to be updated whenever a new kernel is installed, the boot loader package should install a script in /etc/kernel/postinst.d. Alternately, you can specify the command to update the boot loader by setting the 'postinst_hook' variable in /etc/kernel-img.conf." +msgstr "新しいカーネルがインストールされるときに、いつでもブートローダがアップデートされる必要があるなら、ブートローダパッケージは /etc/kernel/postinst.d にスクリプトをインストールしなければなりません。あるいは、/etc/kernel-img.conf にある 'postinst_hook' 変数を設定することによって、ブートローダをアップデートするコマンドを指定できます。" + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "Abort installation after depmod error?" +msgstr "depmod のエラー後にインストールを中止しますか?" + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "The 'depmod' command exited with the exit code ${exit_value} (${SIGNAL}${CORE})." +msgstr "'depmod' コマンドは終了コード ${exit_value} (${SIGNAL}${CORE}) で終了しました。" + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "Since this image uses initrd, the ${modules_base}/=V/modules.dep file will not be deleted, even though it may be invalid." +msgstr "このイメージは initrd を使っているので、${modules_base}/=V/modules.dep ファイルは (たとえ無効なものであったとしても) 削除されません。" + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "You should abort the installation and fix the errors in depmod, or regenerate the initrd image with a known good modules.dep file. If you don't abort the installation, there is a danger that the system will fail to boot." +msgstr "インストールを中止して depmod のエラーを修正するか、問題がないとわかっている modules.dep ファイルで initrd イメージを再生成すべきです。インストールを中止しないと、システムの起動に失敗する恐れがあります。" + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "Abort kernel removal?" +msgstr "カーネルの削除を中止しますか?" + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "You are running a kernel (version ${running}) and attempting to remove the same version." +msgstr "現在カーネル (バージョン ${running}) を実行しており、同一バージョンのカーネルの削除を試みています。" + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "This can make the system unbootable as it will remove /boot/vmlinuz-${running} and all modules under the directory /lib/modules/${running}. This can only be fixed with a copy of the kernel image and the corresponding modules." +msgstr "この操作は /boot/vmlinuz-${running} および /lib/modules/${running} ディレクトリ下のすべてのモジュールを削除するので、システムを起動不能にする可能性があります。これは、カーネルイメージおよび関連モジュールのコピーがない限り直せません。" + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "It is highly recommended to abort the kernel removal unless you are prepared to fix the system after removal." +msgstr "削除後でもシステムに問題がないような準備を済ませるまで、カーネルの削除を中止することを強くお勧めします。" + +#. Type: note +#. Description +#: ../templates/temp.image.plain/templates:4001 +msgid "Required firmware files may be missing" +msgstr "必要なファームウェアファイルがなくなっている可能性があります" + +#. Type: note +#. Description +#: ../templates/temp.image.plain/templates:4001 +msgid "This system is currently running Linux ${runningversion} and you are installing Linux ${version}. In the new version some of the drivers used on this system may require additional firmware files:" +msgstr "このシステムは現在 Linux ${runningversion} を実行しており、Linux ${version} をインストールしようとしています。新しいバージョンでは、このシステムで使われるドライバのいくつかは追加のファームウェアファイルを必要とするかもしれません:" + +#. Type: note +#. Description +#: ../templates/temp.image.plain/templates:4001 +msgid "Most firmware files are not included in the system because they do not conform to the Debian Free Software Guidelines. You may need to reconfigure the package manager to include the contrib and non-free sections of the package archive before you can install these firmware files." +msgstr "ほとんどのファームウェアファイルは、Debian フリーソフトウェアガイドラインに合致しないため、システムに含まれていません。これらのファームウェアファイルをインストール可能にするために、パッケージアーカイブの contrib および non-free セクションを含むようパッケージマネージャを再設定する必要があるかもしれません。" + +#. Type: error +#. Description +#: ../templates/temp.image.plain/templates:5001 +msgid "Boot loader configuration must be updated" +msgstr "ブートローダ設定を更新する必要があります" + +#. Type: error +#. Description +#: ../templates/temp.image.plain/templates:5001 +msgid "Kernel packages no longer update a default boot loader. You should remove 'do_bootloader = yes' from /etc/kernel-img.conf." +msgstr "カーネルパッケージはデフォルトブートローダをもはやアップデートしません。/etc/kernel-img.conf から 'do_bootloader = yes' の行を削除しなければなりません。" + --- linux-2.6-3.0.0~rc6.orig/debian/po/de.po +++ linux-2.6-3.0.0~rc6/debian/po/de.po @@ -0,0 +1,162 @@ +# Translation of linux-2.6 templates to german. +# Copyright (C) 2010 Holger Wansing. +# This file is distributed under the same license as the linux-2.6 package. +# Holger Wansing , 2010. +# +msgid "" +msgstr "" +"Project-Id-Version: linux-2.6 2.6.32-11\n" +"Report-Msgid-Bugs-To: linux-2.6@packages.debian.org\n" +"POT-Creation-Date: 2010-08-07 10:32+0200\n" +"PO-Revision-Date: 2010-08-08 14:22+0200\n" +"Last-Translator: Holger Wansing \n" +"Language-Team: Debian German \n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: error +#. Description +#: ../linux-base.templates:8001 ../templates/temp.image.plain/templates:5001 +msgid "" +"If the boot loader needs to be updated whenever a new kernel is installed, " +"the boot loader package should install a script in /etc/kernel/postinst.d. " +"Alternately, you can specify the command to update the boot loader by " +"setting the 'postinst_hook' variable in /etc/kernel-img.conf." +msgstr "" +"Falls der Bootloader aktualisiert werden muss, wenn ein neuer Kernel " +"installiert wird, sollte das Bootloader-Paket ein Skript in " +"/etc/kernel/postinst.d installieren. Alternativ können Sie den Befehl für " +"die Aktualisierung des Bootloaders über das Setzen der Variable " +"»postinst_hook« in /etc/kernel-img.conf festlegen." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "Abort installation after depmod error?" +msgstr "Installation nach depmod-Fehler abbrechen?" + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "" +"The 'depmod' command exited with the exit code ${exit_value} " +"(${SIGNAL}${CORE})." +msgstr "" +"Der »depmod«-Befehl wurde beendet: Rückgabewert ${exit_value} " +"(${SIGNAL}${CORE})." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "" +"Since this image uses initrd, the ${modules_base}/=V/modules.dep file will " +"not be deleted, even though it may be invalid." +msgstr "" +"Da dieses Image eine initrd verwendet, wird die Datei ${modules_base}/=V/" +"modules.dep nicht gelöscht, obwohl sie ungültig sein könnte." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "" +"You should abort the installation and fix the errors in depmod, or " +"regenerate the initrd image with a known good modules.dep file. If you don't " +"abort the installation, there is a danger that the system will fail to boot." +msgstr "" +"Sie sollten die Installation abbrechen und die Fehler bezüglich depmod " +"beheben, oder erstellen Sie das initrd-Image neu mit einer bekanntermaßen " +"korrekten modules.dep-Datei. Falls Sie die Installation nicht abbrechen, " +"besteht die Gefahr, dass das System nicht mehr neu starten kann." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "Abort kernel removal?" +msgstr "Entfernen des Kernels abbrechen?" + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "" +"You are running a kernel (version ${running}) and attempting to remove the " +"same version." +msgstr "" +"Es läuft derzeit ein Kernel Version ${running} und Sie versuchen, die " +"gleiche Version zu entfernen." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "" +"This can make the system unbootable as it will remove /boot/vmlinuz-" +"${running} and all modules under the directory /lib/modules/${running}. This " +"can only be fixed with a copy of the kernel image and the corresponding " +"modules." +msgstr "" +"Das kann dazu führen, dass das System nicht mehr startfähig ist, da dadurch /" +"boot/vmlinuz-${running} und alle Module unterhalb des Verzeichnisses /lib/" +"modules/${running} entfernt werden. Dies kann nur mit einer Kopie des Kernel-" +"Images und der dazugehörigen Module behoben werden." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "" +"It is highly recommended to abort the kernel removal unless you are prepared " +"to fix the system after removal." +msgstr "" +"Es wird dringend empfohlen, das Entfernen des Kernels abzubrechen, " +"ausgenommen Sie sind darauf vorbereitet, das System nach der Entfernung " +"wieder instandzusetzen." + +#. Type: note +#. Description +#: ../templates/temp.image.plain/templates:4001 +msgid "Required firmware files may be missing" +msgstr "Benötigte Firmware-Dateien möglicherweise nicht vorhanden" + +#. Type: note +#. Description +#: ../templates/temp.image.plain/templates:4001 +msgid "" +"This system is currently running Linux ${runningversion} and you are " +"installing Linux ${version}. In the new version some of the drivers used on " +"this system may require additional firmware files:" +msgstr "" +"Auf diesem System läuft derzeit Linux ${runningversion} und Sie installieren " +"gerade Linux ${version}. In der neuen Version könnten einige Treiber, die " +"auf diesem System verwendet werden, zusätzliche Firmware-Dateien benötigen:" + +#. Type: note +#. Description +#: ../templates/temp.image.plain/templates:4001 +msgid "" +"Most firmware files are not included in the system because they do not " +"conform to the Debian Free Software Guidelines. You may need to reconfigure " +"the package manager to include the contrib and non-free sections of the " +"package archive before you can install these firmware files." +msgstr "" +"Die meisten Firmware-Dateien sind nicht im System enthalten, da sie nicht " +"mit den Debian-Richtlinien für Freie Software (DFSG) konform sind. Sie " +"müssen unter Umständen den Paketmanager neu konfigurieren, so dass die " +"contrib- und non-free-Sektionen des Paketarchivs ebenfalls enthalten sind, " +"bevor Sie diese Firmware-Dateien installieren können." + +#. Type: error +#. Description +#: ../templates/temp.image.plain/templates:5001 +msgid "Boot loader configuration must be updated" +msgstr "Aktualisierung der Bootloader-Konfiguration erforderlich" + +#. Type: error +#. Description +#: ../templates/temp.image.plain/templates:5001 +msgid "" +"Kernel packages no longer update a default boot loader. You should remove " +"'do_bootloader = yes' from /etc/kernel-img.conf." +msgstr "" +"Kernel-Pakete aktualisieren nicht mehr länger den Standard-Bootloader. " +"Sie sollten den Eintrag »do_bootloader = yes« aus /etc/kernel-img.conf " +"entfernen." --- linux-2.6-3.0.0~rc6.orig/debian/po/da.po +++ linux-2.6-3.0.0~rc6/debian/po/da.po @@ -0,0 +1,157 @@ +# Danish translation linux-2.6. +# Copyright (C) 2010 linux-2.6 & Joe Hansen. +# This file is distributed under the same license as the linux-2.6 package. +# Joe Hansen , 2010. +# +msgid "" +msgstr "" +"Project-Id-Version: linux-2.6\n" +"Report-Msgid-Bugs-To: linux-2.6@packages.debian.org\n" +"POT-Creation-Date: 2010-10-01 10:30+0200\n" +"PO-Revision-Date: 2010-10-07 05:26+0100\n" +"Last-Translator: Joe Hansen \n" +"Language-Team: Danish \n" +"Language: da\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: error +#. Description +#: ../linux-base.templates:8001 ../templates/temp.image.plain/templates:5001 +msgid "" +"If the boot loader needs to be updated whenever a new kernel is installed, " +"the boot loader package should install a script in /etc/kernel/postinst.d. " +"Alternately, you can specify the command to update the boot loader by " +"setting the 'postinst_hook' variable in /etc/kernel-img.conf." +msgstr "" +"Hvis opstartsindlæseren (boot loader) skal opdateres, når en ny kerne er " +"installeret, bør opstartsindlæserens pakke installere et skript i " +"/etc/kernel/postinst.d. Alternativt kan du angive kommandoen til opdatering " +"af opstartsindlæseren ved at angive variablen 'postinst_hook' i " +"/etc/kernel-img.conf." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "Abort installation after depmod error?" +msgstr "Afbryd installation efter depmod-fejl?" + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "" +"The 'depmod' command exited with the exit code ${exit_value} " +"(${SIGNAL}${CORE})." +msgstr "" +"Kommandoen depmod afsluttedes med koden afslutningskoden ${exit_value} " +"(${SIGNAL} ${CORE})." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "" +"Since this image uses initrd, the ${modules_base}/=V/modules.dep file will " +"not be deleted, even though it may be invalid." +msgstr "" +"Da dette aftryk bruger initrd, vil filen ${modules_base}/=V/modules.dep ikke " +"blive slettet, selvom den måske er ugyldig." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "" +"You should abort the installation and fix the errors in depmod, or " +"regenerate the initrd image with a known good modules.dep file. If you don't " +"abort the installation, there is a danger that the system will fail to boot." +msgstr "" +"Du skal afbryde installationen og rette fejlene i depmod, eller gendanne " +"initrd-aftrykket med en kendt god fil af typen modules-dep. Hvis du ikke " +"afbryder installationen, er der fare for at systemet vil fejle ved opstart." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "Abort kernel removal?" +msgstr "Afbryd kernefjernelse?" + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "" +"You are running a kernel (version ${running}) and attempting to remove the " +"same version." +msgstr "" +"Du kører en kerne (version ${running}) og forsøger at fjerne den samme " +"version." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "" +"This can make the system unbootable as it will remove /boot/vmlinuz-" +"${running} and all modules under the directory /lib/modules/${running}. This " +"can only be fixed with a copy of the kernel image and the corresponding " +"modules." +msgstr "" +"Dette kan gøre at systemet ikke kan starte op da det vil fjerne /boot/" +"vmlinuz-${running} og alle moduler i mappen /lib/modules//${running}. Dette " +"kan kun rettes med en kopi af kerneaftrykket og de tilsvarende moduler." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "" +"It is highly recommended to abort the kernel removal unless you are prepared " +"to fix the system after removal." +msgstr "" +"Det anbefales stærkt, at afbryde kernefjernelsen med mindre du er forberedt " +"på at rette systemet op efter fjernelsen." + +#. Type: note +#. Description +#: ../templates/temp.image.plain/templates:4001 +msgid "Required firmware files may be missing" +msgstr "Krævet firmwarefiler mangler måske" + +#. Type: note +#. Description +#: ../templates/temp.image.plain/templates:4001 +msgid "" +"This system is currently running Linux ${runningversion} and you are " +"installing Linux ${version}. In the new version some of the drivers used on " +"this system may require additional firmware files:" +msgstr "" +"Dette system kører aktuelt Linux ${runningversion}, og du installerer Linux " +"${version}. I den nye version kræver nogle af driverne på dette system måske " +"yderligere firmwarefiler:" + +#. Type: note +#. Description +#: ../templates/temp.image.plain/templates:4001 +msgid "" +"Most firmware files are not included in the system because they do not " +"conform to the Debian Free Software Guidelines. You may need to reconfigure " +"the package manager to include the contrib and non-free sections of the " +"package archive before you can install these firmware files." +msgstr "" +"De fleste firmwarefiler er ikke inkluderet i Debiansystemet, da de ikke " +"overholder Debian Free Softwares retningslinjer. Du skal måske rekonfigurere " +"pakkehåndteringen for at inkludere contrib og det ikke frie afsnit af " +"Debianarkivet, før du kan installere disse firmwarefiler." + +#. Type: error +#. Description +#: ../templates/temp.image.plain/templates:5001 +msgid "Boot loader configuration must be updated" +msgstr "Konfiguration af opstartsindlæseren (boot loader) skal opdateres" + +#. Type: error +#. Description +#: ../templates/temp.image.plain/templates:5001 +msgid "" +"Kernel packages no longer update a default boot loader. You should remove " +"'do_bootloader = yes' from /etc/kernel-img.conf." +msgstr "" +"Kernepakker opdaterer ikke længere en standardopstartsindlæser (boot loader). " +"Du bør fjerne 'do_bootloader = yes' fra /etc/kernel-img.conf." --- linux-2.6-3.0.0~rc6.orig/debian/po/et.po +++ linux-2.6-3.0.0~rc6/debian/po/et.po @@ -0,0 +1,156 @@ +# linux-2.6-debconf estonian translation +# linux-2.6-debconf eesti keele tõlge +# Copyright (C) 2010 Debian GNU/Linux +# This file is distributed under the same license as the PACKAGE package. +# +# mihkel , 2010. +# +msgid "" +msgstr "" +"Project-Id-Version: linux-2.6 2.6.32-11\n" +"Report-Msgid-Bugs-To: linux-2.6@packages.debian.org\n" +"POT-Creation-Date: 2010-07-16 15:55+0100\n" +"PO-Revision-Date: 2010-04-24 14:20+0300\n" +"Last-Translator: mihkel \n" +"Language-Team: Estonian \n" +"Language: et\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Emacs\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. Type: error +#. Description +#: ../linux-base.templates:8001 ../templates/temp.image.plain/templates:5001 +msgid "" +"If the boot loader needs to be updated whenever a new kernel is installed, " +"the boot loader package should install a script in /etc/kernel/postinst.d. " +"Alternately, you can specify the command to update the boot loader by " +"setting the 'postinst_hook' variable in /etc/kernel-img.conf." +msgstr "" + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "Abort installation after depmod error?" +msgstr "Katkesta paigaldus peale depmod veateadet?" + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "" +"The 'depmod' command exited with the exit code ${exit_value} " +"(${SIGNAL}${CORE})." +msgstr "" +"'depmod' käsk lõpetas väljumise koodiga ${exit_value} (${SIGNAL}${CORE})." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "" +"Since this image uses initrd, the ${modules_base}/=V/modules.dep file will " +"not be deleted, even though it may be invalid." +msgstr "" +"Kuna tõmmis kasutab initrd-d, siis ${modules_base}/=V/modules.dep faili ei " +"kustutata, kuigi ta võib olla vigane." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "" +"You should abort the installation and fix the errors in depmod, or " +"regenerate the initrd image with a known good modules.dep file. If you don't " +"abort the installation, there is a danger that the system will fail to boot." +msgstr "" +"Sa peaksid paigaldamise katkestama ja parandama depmodi vead või " +"regenereerima initrd tõmmise heade modules.dep failiga. Kui sa ei katkesta, " +"siis suure tõenäosusega süsteem enam ei käivitu alglaadimisel." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "Abort kernel removal?" +msgstr "Katkesta tuuma eemaldamine?" + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "" +"You are running a kernel (version ${running}) and attempting to remove the " +"same version." +msgstr "" +"Sa kasutad tuuma versiooni (version ${running}) ning üritad seda sama " +"versiooni eemaldada." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "" +"This can make the system unbootable as it will remove /boot/vmlinuz-" +"${running} and all modules under the directory /lib/modules/${running}. This " +"can only be fixed with a copy of the kernel image and the corresponding " +"modules." +msgstr "" +"See võib süsteemi muuta mitte käivitatavaks kuna eemaldatakse /boot/vmlinuz-" +"${running} ja kõik moodulid kataloogist /lib/modules/${running}. Seda saab " +"parandada ainult sama tumma ja vastavate moodulite kopeerimisega õigetesse " +"kohtadesse." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "" +"It is highly recommended to abort the kernel removal unless you are prepared " +"to fix the system after removal." +msgstr "" +"On äärmiselt soovituslik katkestada tuuma eemaldamine, kui sa just pole " +"valmistunud süsteemi ise parandama." + +#. Type: note +#. Description +#: ../templates/temp.image.plain/templates:4001 +msgid "Required firmware files may be missing" +msgstr "Vajalikud püsivara failid võivad olla puudu" + +#. Type: note +#. Description +#: ../templates/temp.image.plain/templates:4001 +msgid "" +"This system is currently running Linux ${runningversion} and you are " +"installing Linux ${version}. In the new version some of the drivers used on " +"this system may require additional firmware files:" +msgstr "" +"See süsteem kasutab praegu Linuxi versiooni ${runningversion} ja sina " +"paigaldad versiooni ${version}. Uues versionis võivad mõned ajurid vajada " +"lisaks püsivara faile:" + +#. Type: note +#. Description +#: ../templates/temp.image.plain/templates:4001 +msgid "" +"Most firmware files are not included in the system because they do not " +"conform to the Debian Free Software Guidelines. You may need to reconfigure " +"the package manager to include the contrib and non-free sections of the " +"package archive before you can install these firmware files." +msgstr "" +"Enamik püsivara faile ei ole kaasatud süsteemi, sest nad ei vasta Debian " +"vaba tarkvara juhtnööridele (Debian Free Software Guidelines). Võimalik, et " +"pead enne oma pakimajandajat ümber seadistama, et kaasata varamutesse ka " +"contrib ja non-free harud, kui saad need püsivara failid paigaldada." + +#. Type: error +#. Description +#: ../templates/temp.image.plain/templates:5001 +#, fuzzy +#| msgid "Boot loader configuration check needed" +msgid "Boot loader configuration must be updated" +msgstr "Vajalik alglaaduri konfiguratsiooni kontroll" + +#. Type: error +#. Description +#: ../templates/temp.image.plain/templates:5001 +msgid "" +"Kernel packages no longer update a default boot loader. You should remove " +"'do_bootloader = yes' from /etc/kernel-img.conf." +msgstr "" --- linux-2.6-3.0.0~rc6.orig/debian/po/POTFILES.in +++ linux-2.6-3.0.0~rc6/debian/po/POTFILES.in @@ -0,0 +1 @@ +[type: gettext/rfc822deb] templates/temp.image.plain/templates --- linux-2.6-3.0.0~rc6.orig/debian/po/it.po +++ linux-2.6-3.0.0~rc6/debian/po/it.po @@ -0,0 +1,158 @@ +# This file is distributed under the same license as the linux-2.6 package. +# Collaboratively translated during an online sprint, thanks to all contributors! +# Luca Bruno , 2010. +# +msgid "" +msgstr "" +"Project-Id-Version: linux-2.6 2.6.32-27\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-11-01 10:31+0100\n" +"PO-Revision-Date: 2010-11-09 18:24+0100\n" +"Last-Translator: Luca Bruno \n" +"Language-Team: Italian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. Type: error +#. Description +#: ../linux-base.templates:8001 ../templates/temp.image.plain/templates:5001 +msgid "" +"If the boot loader needs to be updated whenever a new kernel is installed, " +"the boot loader package should install a script in /etc/kernel/postinst.d. " +"Alternately, you can specify the command to update the boot loader by " +"setting the 'postinst_hook' variable in /etc/kernel-img.conf." +msgstr "" +"Se il boot loader necessita di essere aggiornato ad ogni installazione di " +"nuovi kernel, il pacchetto relativo dovrebbe installare uno script in /etc/" +"kernel/postinst.d. In alternativa, è possibile specificare il comando di " +"aggiornamento tramite la variabile «postinst_hook» in /etc/kernel-img.conf." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "Abort installation after depmod error?" +msgstr "Interrompere l'installazione a seguito dell'errore di depmod?" + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "" +"The 'depmod' command exited with the exit code ${exit_value} " +"(${SIGNAL}${CORE})." +msgstr "" +"Il comando «depmod» è terminato con codice d'uscita ${exit_value} " +"(${SIGNAL}${CORE})." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "" +"Since this image uses initrd, the ${modules_base}/=V/modules.dep file will " +"not be deleted, even though it may be invalid." +msgstr "" +"Poiché questa immagine usa un initrd, il file ${modules_base}/=V/modules.dep " +"non viene eliminato, anche se potrebbe risultare non più valido." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "" +"You should abort the installation and fix the errors in depmod, or " +"regenerate the initrd image with a known good modules.dep file. If you don't " +"abort the installation, there is a danger that the system will fail to boot." +msgstr "" +"Si consiglia di interrompere l'installazione e correggere gli errori di " +"depmod, o ricreare l'immagine initrd con un file modules.dep valido. Se " +"l'installazione non viene interrotta, è possibile che il sistema possa " +"risultare non avviabile." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "Abort kernel removal?" +msgstr "Interrompere la rimozione del kernel?" + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "" +"You are running a kernel (version ${running}) and attempting to remove the " +"same version." +msgstr "" +"Nel sistema è in esecuzione un kernel (versione ${running}) e si sta " +"cercando di rimuovere la stessa versione." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "" +"This can make the system unbootable as it will remove /boot/vmlinuz-" +"${running} and all modules under the directory /lib/modules/${running}. This " +"can only be fixed with a copy of the kernel image and the corresponding " +"modules." +msgstr "" +"Ciò potrebbe rendere il sistema non avviabile poiché rimuoverà /boot/vmlinuz-" +"${running} e tutti i moduli nella directory /lib/modules/${running}. A " +"questo si potrà rimediare solo con una copia dell'immagine del kernel e dei " +"moduli corrispondenti." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "" +"It is highly recommended to abort the kernel removal unless you are prepared " +"to fix the system after removal." +msgstr "" +"Si consiglia vivamente di interrompere la rimozione del kernel a meno che " +"non si sia preparati a riparare il sistema in seguito." + +#. Type: note +#. Description +#: ../templates/temp.image.plain/templates:4001 +msgid "Required firmware files may be missing" +msgstr "Alcuni firmware richiesti potrebbero non essere presenti" + +#. Type: note +#. Description +#: ../templates/temp.image.plain/templates:4001 +msgid "" +"This system is currently running Linux ${runningversion} and you are " +"installing Linux ${version}. In the new version some of the drivers used on " +"this system may require additional firmware files:" +msgstr "" +"Su questo sistema è attualmente in esecuzione Linux ${runningversion} e si " +"sta installando Linux ${version}. Nella nuova versione alcuni dei driver " +"utilizzati su questo sistema potrebbero richiedere firmware aggiuntivi:" + +#. Type: note +#. Description +#: ../templates/temp.image.plain/templates:4001 +msgid "" +"Most firmware files are not included in the system because they do not " +"conform to the Debian Free Software Guidelines. You may need to reconfigure " +"the package manager to include the contrib and non-free sections of the " +"package archive before you can install these firmware files." +msgstr "" +"La maggior parte dei firmware non sono inclusi nel sistema in quanto non " +"conformi alle Linee Guida Debian per il Software Libero. Potrebbe essere " +"necessario riconfigurare il gestore dei pacchetti ed includere le sezioni " +"contrib e non-free per poterli installare." + +#. Type: error +#. Description +#: ../templates/temp.image.plain/templates:5001 +msgid "Boot loader configuration must be updated" +msgstr "La configurazione del boot loader deve essere aggiornata" + +#. Type: error +#. Description +#: ../templates/temp.image.plain/templates:5001 +msgid "" +"Kernel packages no longer update a default boot loader. You should remove " +"'do_bootloader = yes' from /etc/kernel-img.conf." +msgstr "" +"I pacchetti del kernel non provvedono più all'aggiornamento del boot loader " +"predefinito. Si dovrebbe rimuovere la riga «do_bootloader = yes» da /etc/" +"kernel-img.conf." --- linux-2.6-3.0.0~rc6.orig/debian/po/ca.po +++ linux-2.6-3.0.0~rc6/debian/po/ca.po @@ -0,0 +1,129 @@ +# Catalan translation of linux-2.6 debconf templates. +# Copyright © 2010 Software in the Public Interest, Inc. +# This file is distributed under the same license as linux-2.6's packaging. +# Jordi Mallach , 2010. +# +msgid "" +msgstr "" +"Project-Id-Version: linux-2.6 2.6.32-24\n" +"Report-Msgid-Bugs-To: linux-2.6@packages.debian.org\n" +"POT-Creation-Date: 2010-07-16 15:55+0100\n" +"PO-Revision-Date: 2010-10-25 00:24+0200\n" +"Last-Translator: Jordi Mallach \n" +"Language-Team: Catalan \n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: error +#. Description +#: ../linux-base.templates:8001 ../templates/temp.image.plain/templates:5001 +msgid "" +"If the boot loader needs to be updated whenever a new kernel is installed, " +"the boot loader package should install a script in /etc/kernel/postinst.d. " +"Alternately, you can specify the command to update the boot loader by " +"setting the 'postinst_hook' variable in /etc/kernel-img.conf." +msgstr "Si s'ha d'actualitzar el carregador cada vegada que s'instaŀla un nou nucli, el paquet del carregador hauria d'instaŀlar un script en /etc/kernel/postinst.d. Alternativament, podeu especificar l'ordre per a actualitzar el carregador establint la variable «postinst_hook» en /etc/kernel-img.conf." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "Abort installation after depmod error?" +msgstr "Voleu avortar la instaŀlació degut a un error de depmod?" + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "" +"The 'depmod' command exited with the exit code ${exit_value} " +"(${SIGNAL}${CORE})." +msgstr "L'ordre «depmod» ha sortit amb el codi d'error ${exit_value} (${SIGNAL}${CORE})." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "" +"Since this image uses initrd, the ${modules_base}/=V/modules.dep file will " +"not be deleted, even though it may be invalid." +msgstr "Com aquesta imatge empra un initrd, no es suprimirà el fitxer ${modules_base}/=V/modules.dep, tot i que potser és invàlid." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "" +"You should abort the installation and fix the errors in depmod, or " +"regenerate the initrd image with a known good modules.dep file. If you don't " +"abort the installation, there is a danger that the system will fail to boot." +msgstr "Hauríeu d'avortar la instaŀlació i corregir els errors de depmod, o regenerar la imatge initrd amb un fitxer modules.dep que siga correcte amb certesa. Si no avorteu la instaŀlació, hi ha el perill que l'arrencada del sistema falle." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "Abort kernel removal?" +msgstr "Voleu avortar la supressió del nucli?" + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "" +"You are running a kernel (version ${running}) and attempting to remove the " +"same version." +msgstr "Esteu executant un nucli (versió ${running}) i esteu intentant suprimir la mateixa versió." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "" +"This can make the system unbootable as it will remove /boot/vmlinuz-" +"${running} and all modules under the directory /lib/modules/${running}. This " +"can only be fixed with a copy of the kernel image and the corresponding " +"modules." +msgstr "Això pot fer que el sistema no arrenque perquè suprimirà /boot/vmlinuz-${running} i tots els mòduls sota el directori /lib/modules/${running}. Això només es pot corregir amb una còpia de la imatge del nucli i els mòduls corresponents." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "" +"It is highly recommended to abort the kernel removal unless you are prepared " +"to fix the system after removal." +msgstr "És molt recomanable que avorteu la supressió del nucli si no esteu preparat per a reparar el sistema després de la supressió." + +#. Type: note +#. Description +#: ../templates/temp.image.plain/templates:4001 +msgid "Required firmware files may be missing" +msgstr "És possible que manquen fitxers de microprogramari requerits" + +#. Type: note +#. Description +#: ../templates/temp.image.plain/templates:4001 +msgid "" +"This system is currently running Linux ${runningversion} and you are " +"installing Linux ${version}. In the new version some of the drivers used on " +"this system may require additional firmware files:" +msgstr "Actualment, el sistema està executant el Linux ${runningversion} i esteu instaŀlant el Linux ${version}. A la nova versió, és possible que alguns dels dispositius emprats en el sistema requereixen fitxers de microprogramari addicionals:" + +#. Type: note +#. Description +#: ../templates/temp.image.plain/templates:4001 +msgid "" +"Most firmware files are not included in the system because they do not " +"conform to the Debian Free Software Guidelines. You may need to reconfigure " +"the package manager to include the contrib and non-free sections of the " +"package archive before you can install these firmware files." +msgstr "La major part dels fitxers de microprogramari no estan inclosos al sistema perquè no compleixen els principis del programari lliure de Debian. És possible que necessiteu reconfigurar el gestor de paquets per a incloure les seccions «contrib» i «non-free» de l'arxiu de paquets abans de poder instaŀlar aquests fitxers de microprogramari." + +#. Type: error +#. Description +#: ../templates/temp.image.plain/templates:5001 +msgid "Boot loader configuration must be updated" +msgstr "S'ha d'actualitzar la configuració del carregador" + +#. Type: error +#. Description +#: ../templates/temp.image.plain/templates:5001 +msgid "" +"Kernel packages no longer update a default boot loader. You should remove " +"'do_bootloader = yes' from /etc/kernel-img.conf." +msgstr "Els paquets del nucli ja no actualitzen el carregador per defecte. Hauríeu de suprimir la línia «do_bootloader = yes» del fitxer /etc/kernel-img.conf." --- linux-2.6-3.0.0~rc6.orig/debian/po/vi.po +++ linux-2.6-3.0.0~rc6/debian/po/vi.po @@ -0,0 +1,151 @@ +# Vietnamese Debconf translation for Linux 2.6. +# Copyright © 2010 Free Software Foundation, Inc. +# Clytie Siddall , 2010. +# +msgid "" +msgstr "" +"Project-Id-Version: linux-2.6 2.6.32-26\n" +"Report-Msgid-Bugs-To: linux-2.6@packages.debian.org\n" +"POT-Creation-Date: 2010-10-21 10:37+0200\n" +"PO-Revision-Date: 2010-10-27 15:21+1030\n" +"Last-Translator: Clytie Siddall \n" +"Language-Team: Vietnamese \n" +"Language: vi\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: LocFactoryEditor 1.8\n" + +#. Type: error +#. Description +#: ../linux-base.templates:8001 ../templates/temp.image.plain/templates:5001 +msgid "" +"If the boot loader needs to be updated whenever a new kernel is installed, " +"the boot loader package should install a script in /etc/kernel/postinst.d. " +"Alternately, you can specify the command to update the boot loader by " +"setting the 'postinst_hook' variable in /etc/kernel-img.conf." +msgstr "Nếu bộ nạp khởi động cần phải được cập nhật khi nào cài đặt một hạt nhân mới thì gói bộ nạp khởi động nên cài đặt một văn lệnh vào « /etc/kernel/postinst.d ». Hoặc bạn có thể ghi rõ câu lệnh cập nhật bộ nạp khởi động bằng cách lập biến « postinst_hook » (hàm móc hậu xử lý) trong tập tin cấu hình « /etc/kernel-img.conf »." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "Abort installation after depmod error?" +msgstr "Hủy bỏ tiến trình cài đặt sau khi gặp lỗi depmod ?" + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "" +"The 'depmod' command exited with the exit code ${exit_value} " +"(${SIGNAL}${CORE})." +msgstr "" +"Lệnh « depmod » đã thoát với mã thoát ${exit_value} (${SIGNAL}${CORE})." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "" +"Since this image uses initrd, the ${modules_base}/=V/modules.dep file will " +"not be deleted, even though it may be invalid." +msgstr "" +"Vì ảnh này sử dụng initrd, tập tin ${modules_base}/=V/modules.dep sẽ không " +"bị xoá, dù là nó có thể không thích hợp." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "" +"You should abort the installation and fix the errors in depmod, or " +"regenerate the initrd image with a known good modules.dep file. If you don't " +"abort the installation, there is a danger that the system will fail to boot." +msgstr "" +"Bạn nên hủy bỏ tiến trình cài đặt và sửa chữa các lỗi trong depmod, hoặc tạo " +"lại ảnh initrd với một tập tin « modules.dep » tốt. Không hủy bỏ tiến trình " +"cài đặt thì hệ thống có thể không khởi động được." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "Abort kernel removal?" +msgstr "Hủy bỏ tiến trình gỡ bỏ hạt nhân ?" + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "" +"You are running a kernel (version ${running}) and attempting to remove the " +"same version." +msgstr "" +"Bạn đang chạy một hạt nhân phiên bản ${running} trong khi thử gỡ bỏ phiên " +"bản đó." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "" +"This can make the system unbootable as it will remove /boot/vmlinuz-" +"${running} and all modules under the directory /lib/modules/${running}. This " +"can only be fixed with a copy of the kernel image and the corresponding " +"modules." +msgstr "" +"Hành động này có thể làm cho hệ thống không có khả năng khởi động, vì nó gỡ " +"bỏ « /boot/vmlinuz-${running} » và tất cả các mô-đụn nằm dưới thư mục « /lib/" +"modules/${running} »." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "" +"It is highly recommended to abort the kernel removal unless you are prepared " +"to fix the system after removal." +msgstr "" +"Rất khuyên bạn hủy bỏ tiến trình gỡ bỏ hạt nhân, nếu bạn không sẵn sàng sửa " +"chữa hệ thống sau khi gỡ bỏ." + +#. Type: note +#. Description +#: ../templates/temp.image.plain/templates:4001 +msgid "Required firmware files may be missing" +msgstr "Có thể thiếu một số tập tin phần vững cần thiết" + +#. Type: note +#. Description +#: ../templates/temp.image.plain/templates:4001 +msgid "" +"This system is currently running Linux ${runningversion} and you are " +"installing Linux ${version}. In the new version some of the drivers used on " +"this system may require additional firmware files:" +msgstr "" +"Hệ thống này hiện thời chạy Linux ${runningversion} còn bạn đang cài đặt " +"Linux ${version}. Trong phiên bản mới, một số trình điều khiển dùng trên hệ " +"thống này có thể yêu cầu tập tin phần vững bổ sung:" + +#. Type: note +#. Description +#: ../templates/temp.image.plain/templates:4001 +msgid "" +"Most firmware files are not included in the system because they do not " +"conform to the Debian Free Software Guidelines. You may need to reconfigure " +"the package manager to include the contrib and non-free sections of the " +"package archive before you can install these firmware files." +msgstr "" +"Phần lớn các tập tin phần vững không phải có sẵn trong hệ thống do không làm " +"cho hợp với Nguyên tắc Chỉ đạo Phần mềm Tự do Debian. Có thể là bạn cần phải " +"cấu hình lại trình quản lý gói phần mềm để bao gồm phần đóng góp (contrib) " +"và phần khác tự do (non-free) của kho lưu gói trước khi có khả năng cài đặt " +"tập tin phần vững như vậy." + +#. Type: error +#. Description +#: ../templates/temp.image.plain/templates:5001 +msgid "Boot loader configuration must be updated" +msgstr "Cần phải cập nhật cấu hình của bộ nạp khởi động" + +#. Type: error +#. Description +#: ../templates/temp.image.plain/templates:5001 +msgid "" +"Kernel packages no longer update a default boot loader. You should remove " +"'do_bootloader = yes' from /etc/kernel-img.conf." +msgstr "Gói hạt nhân không còn cập nhật lại bộ nạp khởi động mặc định. Bạn nên gỡ bỏ chuỗi « do_bootloader = yes » (làm bộ nạp khởi động = có) khỏi tập tin cấu hình « /etc/kernel-img.conf »." --- linux-2.6-3.0.0~rc6.orig/debian/po/sv.po +++ linux-2.6-3.0.0~rc6/debian/po/sv.po @@ -0,0 +1,160 @@ +# Translation of linux-2.6 debconf template to Swedish +# Copyright (C) 2010 Martin Bagge +# This file is distributed under the same license as the linux-2.6 package. +# +# Martin Bagge , 2010 +msgid "" +msgstr "" +"Project-Id-Version: linux-2.6\n" +"Report-Msgid-Bugs-To: linux-2.6@packages.debian.org\n" +"POT-Creation-Date: 2010-07-25 10:32+0200\n" +"PO-Revision-Date: 2010-08-07 05:01+0100\n" +"Last-Translator: Martin Bagge / brother \n" +"Language-Team: Swedish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sv\n" +"X-Poedit-Language: Swedish\n" +"X-Poedit-Country: Sweden\n" + +#. Type: error +#. Description +#: ../linux-base.templates:8001 ../templates/temp.image.plain/templates:5001 +msgid "" +"If the boot loader needs to be updated whenever a new kernel is installed, " +"the boot loader package should install a script in /etc/kernel/postinst.d. " +"Alternately, you can specify the command to update the boot loader by " +"setting the 'postinst_hook' variable in /etc/kernel-img.conf." +msgstr "" +"Om uppstartshanteraren behöver uppdateras när en ny kärna installeras ska " +"uppstartshanteraren installera ett skript i /etc/kernel/postinst.d. " +"Alternativt kan du ange kommandot som används för att uppdatera " +"uppstartshanteraren genom att sätta variabeln \"postinst_hook\" i /etc/" +"kernel-img.conf." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "Abort installation after depmod error?" +msgstr "Avbryt installation efter fel i depmod?" + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "" +"The 'depmod' command exited with the exit code ${exit_value} " +"(${SIGNAL}${CORE})." +msgstr "" +"Kommandot \"depmod\" avslutades med felkod ${exit_value} (${SIGNAL}${CORE})." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "" +"Since this image uses initrd, the ${modules_base}/=V/modules.dep file will " +"not be deleted, even though it may be invalid." +msgstr "" +"Eftersom denna avbildning använder initrd kommer inte filen ${modules_base}/" +"=V/modules.dep att raderas, trots att den kan vara felaktig." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "" +"You should abort the installation and fix the errors in depmod, or " +"regenerate the initrd image with a known good modules.dep file. If you don't " +"abort the installation, there is a danger that the system will fail to boot." +msgstr "" +"Du bör avbryta installationen och laga felen i depmod eller skapa en ny " +"initrd-avbildning med en fungerande modules.dep-fil. Om du inte avbryter " +"installationen kan systemet hamna i ett läge där det inte kan starta." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "Abort kernel removal?" +msgstr "Avbryt radering av kärnan?" + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "" +"You are running a kernel (version ${running}) and attempting to remove the " +"same version." +msgstr "" +"Den kärna du kör (version ${running}) och den du försöker ta bort är samma " +"version." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "" +"This can make the system unbootable as it will remove /boot/vmlinuz-" +"${running} and all modules under the directory /lib/modules/${running}. This " +"can only be fixed with a copy of the kernel image and the corresponding " +"modules." +msgstr "" +"Detta kan göra systemet ostartbart eftersom det kommer att innebära att /" +"boot/vmlinuz-${running} och alla moduler i /lib/modules/${running} raderas. " +"Detta kan endast återställas med en kopia av kärnavbildningen och " +"motsvarande moduler." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "" +"It is highly recommended to abort the kernel removal unless you are prepared " +"to fix the system after removal." +msgstr "" +"Det rekomenderas starkt att du avbryter raderingen av kärnan om du inte är " +"beredd på att laga systemet efter raderingen." + +#. Type: note +#. Description +#: ../templates/temp.image.plain/templates:4001 +msgid "Required firmware files may be missing" +msgstr "Firmware-filer som krävs kan saknas" + +#. Type: note +#. Description +#: ../templates/temp.image.plain/templates:4001 +msgid "" +"This system is currently running Linux ${runningversion} and you are " +"installing Linux ${version}. In the new version some of the drivers used on " +"this system may require additional firmware files:" +msgstr "" +"Detta system kör Linux ${runningversion} och du installerar Linux " +"${version}. I den nya versionen kan vissa drivrutiner behöva ytterligare " +"firmware-filer:" + +#. Type: note +#. Description +#: ../templates/temp.image.plain/templates:4001 +msgid "" +"Most firmware files are not included in the system because they do not " +"conform to the Debian Free Software Guidelines. You may need to reconfigure " +"the package manager to include the contrib and non-free sections of the " +"package archive before you can install these firmware files." +msgstr "" +"På grund av bestämmelserna i Debian Free Software Guidelines kan de flesta " +"firmware-filer inte inkluderas i systemet. Du kan behöva anpassa " +"pakethanteraren för att inkludera sektionerna \"contrib\" och \"non-free\" i " +"paketarkivet innan du kan installera dessa filer." + +#. Type: error +#. Description +#: ../templates/temp.image.plain/templates:5001 +#| msgid "Boot loader configuration check needed" +msgid "Boot loader configuration must be updated" +msgstr "Inställningarna för uppstartshanteraren behöver uppdateras" + +#. Type: error +#. Description +#: ../templates/temp.image.plain/templates:5001 +msgid "" +"Kernel packages no longer update a default boot loader. You should remove " +"'do_bootloader = yes' from /etc/kernel-img.conf." +msgstr "" +"Kärnpaket uppdaterar inte längre uppstartshanterare. Du ska ta bort " +"\"do_bootloader = yes\" från /etc/kernel-img.conf." --- linux-2.6-3.0.0~rc6.orig/debian/po/pt_BR.po +++ linux-2.6-3.0.0~rc6/debian/po/pt_BR.po @@ -0,0 +1,163 @@ +# linux-2.6 Brazilian Portuguese debconf template translation. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the linux-2.6 package. +# Flamarion Jorge , 2010. +# +msgid "" +msgstr "" +"Project-Id-Version: linux-2.6\n" +"Report-Msgid-Bugs-To: linux-2.6@packages.debian.org\n" +"POT-Creation-Date: 2010-09-19 10:42+0200\n" +"PO-Revision-Date: 2010-10-02 12:29-0300\n" +"Last-Translator: Flamarion Jorge \n" +"Language-Team: Brazilian Portuguese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"pt_BR utf-8\n" + +#. Type: error +#. Description +#: ../linux-base.templates:8001 ../templates/temp.image.plain/templates:5001 +msgid "" +"If the boot loader needs to be updated whenever a new kernel is installed, " +"the boot loader package should install a script in /etc/kernel/postinst.d. " +"Alternately, you can specify the command to update the boot loader by " +"setting the 'postinst_hook' variable in /etc/kernel-img.conf." +msgstr "" +"Se o carregador de inicialização precisa ser atualizado sempre que um novo " +"kernel é instalado, o pacote do carregador de inicialização deveria instalar " +"um script em /etc/kernel/postinst.d. Alternativamente, você pode especificar " +"o comando para atualizar o carregador de inicialização definindo a variável " +"'postinst_hook' em /etc/kernel-img.conf." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "Abort installation after depmod error?" +msgstr "Cancelar instalação após erro do depmod?" + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "" +"The 'depmod' command exited with the exit code ${exit_value} (${SIGNAL}" +"${CORE})." +msgstr "" +"O comando 'depmod' terminou com o código de saída ${exit_value} (${SIGNAL}" +"${CORE})." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "" +"Since this image uses initrd, the ${modules_base}/=V/modules.dep file will " +"not be deleted, even though it may be invalid." +msgstr "" +"Uma vez que esta imagem usa o initrd, o arquivo ${modules_base}/=V/modules." +"dep não será removido, embora possa ser considerado inválido." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "" +"You should abort the installation and fix the errors in depmod, or " +"regenerate the initrd image with a known good modules.dep file. If you don't " +"abort the installation, there is a danger that the system will fail to boot." +msgstr "" +"Você deve cancelar a instalação e consertar os erros no depmod, ou regerar a " +"imagem do initrd com um arquivo modules.dep em bom estado. Se você não " +"cancelar a instalação, existe um perigo de seu sistema falhar na " +"inicialização." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "Abort kernel removal?" +msgstr "Cancelar remoção do kernel?" + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "" +"You are running a kernel (version ${running}) and attempting to remove the " +"same version." +msgstr "" +"Você está executando um kernel (version ${running}) e tentando remover a " +"mesma versão." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "" +"This can make the system unbootable as it will remove /boot/vmlinuz-" +"${running} and all modules under the directory /lib/modules/${running}. This " +"can only be fixed with a copy of the kernel image and the corresponding " +"modules." +msgstr "" +"Isto pode tornar o sistema não inicializável, pois removerá /boot/vmlinuz-" +"${running} e todos os módulos sob o diretório /lib/modules/${running}. Isto " +"só pode ser consertado com uma cópia da imagem do kernel e dos módulos " +"correspondentes." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "" +"It is highly recommended to abort the kernel removal unless you are prepared " +"to fix the system after removal." +msgstr "" +"É altamente recomendável cancelar a remoção do kernel, a menos que você " +"esteja preparado para consertar o sistema após a remoção." + +#. Type: note +#. Description +#: ../templates/temp.image.plain/templates:4001 +msgid "Required firmware files may be missing" +msgstr "Arquivos de firmware necessários podem estar faltando" + +#. Type: note +#. Description +#: ../templates/temp.image.plain/templates:4001 +msgid "" +"This system is currently running Linux ${runningversion} and you are " +"installing Linux ${version}. In the new version some of the drivers used on " +"this system may require additional firmware files:" +msgstr "" +"Este sistema atualmente está executando o Linux ${runningversion} e você " +"está instalando o Linux ${version}. Na nova versão alguns dos drivers usados " +"neste sistema podem precisar de arquivos de firmware adicionais:" + +#. Type: note +#. Description +#: ../templates/temp.image.plain/templates:4001 +msgid "" +"Most firmware files are not included in the system because they do not " +"conform to the Debian Free Software Guidelines. You may need to reconfigure " +"the package manager to include the contrib and non-free sections of the " +"package archive before you can install these firmware files." +msgstr "" +"A maioria dos arquivos de firmware não estão incluídos no sistema porque não " +"estão em conformidade com a Definição Debian de Software Livre (\"Debian " +"Free Software Guidelines\"). Você poderá precisar reconfigurar o gerenciador " +"de pacotes para incluir as seções contrib e non-free do repositório de " +"pacotes antes de poder instalar estes arquivos de firmware." + +#. Type: error +#. Description +#: ../templates/temp.image.plain/templates:5001 +msgid "Boot loader configuration must be updated" +msgstr "A configuração do carregador de inicialização deve ser atualizada" + +#. Type: error +#. Description +#: ../templates/temp.image.plain/templates:5001 +msgid "" +"Kernel packages no longer update a default boot loader. You should remove " +"'do_bootloader = yes' from /etc/kernel-img.conf." +msgstr "" +"Os pacotes do kernel não atualizam mais o carregador de inicialização " +"padrão. Você deve remover 'do_bootloader = yes' do arquivo /etc/kernel-img." +"conf." --- linux-2.6-3.0.0~rc6.orig/debian/po/fr.po +++ linux-2.6-3.0.0~rc6/debian/po/fr.po @@ -0,0 +1,164 @@ +# Translation of linux-2.6 debconf templates to French +# Copyright (C) 2010 Debian French l10n team +# This file is distributed under the same license as the linux-2.6 package. +# +# David Prévot , 2010. +msgid "" +msgstr "" +"Project-Id-Version: linux-2.6 2.6.32-11\n" +"Report-Msgid-Bugs-To: linux-2.6@packages.debian.org\n" +"POT-Creation-Date: 2010-07-25 10:32+0200\n" +"PO-Revision-Date: 2010-07-26 12:24-0400\n" +"Last-Translator: David Prévot \n" +"Language-Team: French \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. Type: error +#. Description +#: ../linux-base.templates:8001 ../templates/temp.image.plain/templates:5001 +msgid "" +"If the boot loader needs to be updated whenever a new kernel is installed, " +"the boot loader package should install a script in /etc/kernel/postinst.d. " +"Alternately, you can specify the command to update the boot loader by " +"setting the 'postinst_hook' variable in /etc/kernel-img.conf." +msgstr "" +"Si le programme d'amorçage doit être mis à jour à chaque fois qu'un nouveau " +"noyau est installé, le paquet du programme d'amorçage doit installer un script " +"dans /etc/kernel/postinst.d. Sinon, vous pouvez indiquer la commande de mise à " +"jour du programme d'amorçage en configurant la variable « postinst_hook » dans " +"/etc/kernel-img.conf." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "Abort installation after depmod error?" +msgstr "Abandonner l'installation après l'erreur de depmod ?" + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "" +"The 'depmod' command exited with the exit code ${exit_value} " +"(${SIGNAL}${CORE})." +msgstr "" +"La commande depmod s'est terminée avec le code de sortie ${exit_value} " +"(${SIGNAL} ${CORE})." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "" +"Since this image uses initrd, the ${modules_base}/=V/modules.dep file will " +"not be deleted, even though it may be invalid." +msgstr "" +"Puisque cette image du noyau utilise initrd, le fichier ${modules_base}/=V/" +"modules.dep ne sera pas effacé, mais il peut ne pas être valable." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:2001 +msgid "" +"You should abort the installation and fix the errors in depmod, or " +"regenerate the initrd image with a known good modules.dep file. If you don't " +"abort the installation, there is a danger that the system will fail to boot." +msgstr "" +"Vous devriez abandonner l'installation et corriger les erreurs de dépendance " +"entre les modules du noyau (depmod), ou créer une nouvelle image initrd avec " +"un fichier modules.dep valable. Si vous n'annulez pas l'installation, le " +"système risque de ne pas redémarrer correctement." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "Abort kernel removal?" +msgstr "Abandonner la suppression du noyau ?" + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "" +"You are running a kernel (version ${running}) and attempting to remove the " +"same version." +msgstr "" +"Le noyau actuellement utilisé (version ${running}) est en train d'être " +"supprimé." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "" +"This can make the system unbootable as it will remove /boot/vmlinuz-" +"${running} and all modules under the directory /lib/modules/${running}. This " +"can only be fixed with a copy of the kernel image and the corresponding " +"modules." +msgstr "" +"Le système risque de ne plus pouvoir démarrer car /boot/vmlinuz-${running} " +"sera enlevé ainsi que tous les modules du répertoire /lib/modules/" +"${running}. Cela peut seulement être réparé avec une copie de l'image du " +"noyau et des modules correspondants." + +#. Type: boolean +#. Description +#: ../templates/temp.image.plain/templates:3001 +msgid "" +"It is highly recommended to abort the kernel removal unless you are prepared " +"to fix the system after removal." +msgstr "" +"Il est fortement recommandé d'interrompre la suppression du noyau à moins " +"d'être ensuite prêt à réparer le système." + +#. Type: note +#. Description +#: ../templates/temp.image.plain/templates:4001 +msgid "Required firmware files may be missing" +msgstr "Microprogrammes (« firmwares ») probablement manquants" + +#. Type: note +#. Description +#: ../templates/temp.image.plain/templates:4001 +msgid "" +"This system is currently running Linux ${runningversion} and you are " +"installing Linux ${version}. In the new version some of the drivers used on " +"this system may require additional firmware files:" +msgstr "" +"Ce système utilise actuellement Linux ${runningversion}, et Linux ${version} " +"va être installé. Dans la nouvelle version, certains pilotes utilisés par ce " +"système peuvent avoir besoin des microprogrammes additionnels :" + +#. Type: note +#. Description +#: ../templates/temp.image.plain/templates:4001 +msgid "" +"Most firmware files are not included in the system because they do not " +"conform to the Debian Free Software Guidelines. You may need to reconfigure " +"the package manager to include the contrib and non-free sections of the " +"package archive before you can install these firmware files." +msgstr "" +"La plupart des microprogrammes ne sont pas intégrés car ils ne sont pas " +"conformes aux principes du logiciel libre selon Debian. Il est probablement " +"nécessaire de modifier la configuration du gestionnaire de paquets et " +"d'ajouter les sections « contrib » (contributions) et « non-free » (non " +"libre) de l'archive avant de pouvoir installer ces fichiers." + +#. Type: error +#. Description +#: ../templates/temp.image.plain/templates:5001 +#| msgid "Boot loader configuration check needed" +msgid "Boot loader configuration must be updated" +msgstr "Mise à jour indispensable de la configuration du programme d'amorçage" + +#. Type: error +#. Description +#: ../templates/temp.image.plain/templates:5001 +msgid "" +"Kernel packages no longer update a default boot loader. You should remove " +"'do_bootloader = yes' from /etc/kernel-img.conf." +msgstr "" +"Les paquets du noyau ne s'occupent plus de la mise à jour d'un programme " +"d'amorçage par défaut. Vous devriez enlever 'do_bootloader = yes' de " +"/etc/kernel-img.conf."